Add voldep slides
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"files.autoSave": "off"
|
||||||
|
}
|
||||||
@@ -53,3 +53,38 @@ cols %>%
|
|||||||
scale_x_discrete(expand = c(0, 0)) +
|
scale_x_discrete(expand = c(0, 0)) +
|
||||||
scale_y_discrete(expand = c(0, 0)) +
|
scale_y_discrete(expand = c(0, 0)) +
|
||||||
theme_minimal() -> plot_cols
|
theme_minimal() -> plot_cols
|
||||||
|
|
||||||
|
col_gas <- "blue"
|
||||||
|
col_eua <- "green"
|
||||||
|
col_oil <- "amber"
|
||||||
|
col_coal <- "brown"
|
||||||
|
|
||||||
|
col_scale2 <- function(x, rng_t) {
|
||||||
|
ret <- x
|
||||||
|
for (i in seq_along(x)) {
|
||||||
|
if (x[i] < rng_t[1]) {
|
||||||
|
ret[i] <- col_scale(rng_t[1])
|
||||||
|
} else if (x[i] > rng_t[2]) {
|
||||||
|
ret[i] <- col_scale(rng_t[2])
|
||||||
|
} else {
|
||||||
|
ret[i] <- col_scale(x[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(ret)
|
||||||
|
}
|
||||||
|
|
||||||
|
rng_t <- c(-5, 5)
|
||||||
|
h_sub <- c(1, 5, 30)
|
||||||
|
|
||||||
|
col_scale <- scales::gradient_n_pal(
|
||||||
|
c(
|
||||||
|
cols[5, "green"],
|
||||||
|
cols[5, "light-green"],
|
||||||
|
cols[5, "yellow"],
|
||||||
|
# cols[5, "amber"],
|
||||||
|
cols[5, "orange"],
|
||||||
|
# cols[5, "deep-orange"],
|
||||||
|
cols[5, "red"]
|
||||||
|
),
|
||||||
|
values = seq(rng_t[1], rng_t[2], length.out = 5)
|
||||||
|
)
|
||||||
|
|||||||
@@ -8,6 +8,15 @@
|
|||||||
year = {2014},
|
year = {2014},
|
||||||
publisher = {Taylor \& Francis}
|
publisher = {Taylor \& Francis}
|
||||||
}
|
}
|
||||||
|
@article{berrisch2023modeling,
|
||||||
|
title = {Modeling volatility and dependence of European carbon and energy prices},
|
||||||
|
author = {Berrisch, Jonathan and Pappert, Sven and Ziel, Florian and Arsova, Antonia},
|
||||||
|
journal = {Finance Research Letters},
|
||||||
|
volume = {52},
|
||||||
|
pages = {103503},
|
||||||
|
year = {2023},
|
||||||
|
publisher = {Elsevier}
|
||||||
|
}
|
||||||
@incollection{aastveit2019evolution,
|
@incollection{aastveit2019evolution,
|
||||||
title = {The Evolution of Forecast Density Combinations in Economics},
|
title = {The Evolution of Forecast Density Combinations in Economics},
|
||||||
author = {Aastveit, Knut Are and Mitchell, James and Ravazzolo, Francesco and van Dijk, Herman K},
|
author = {Aastveit, Knut Are and Mitchell, James and Ravazzolo, Francesco and van Dijk, Herman K},
|
||||||
|
|||||||
BIN
25_07_phd_defense/assets/voldep/crps_classic.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/crps_classic.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/crps_df.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/crps_df.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/energy_classic.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/energy_classic.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/energy_df.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/energy_df.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/plot_quant_df.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/plot_quant_df.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/plot_rho_df.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/plot_rho_df.Rdata
Normal file
Binary file not shown.
BIN
25_07_phd_defense/assets/voldep/rmsq_df.Rdata
Normal file
BIN
25_07_phd_defense/assets/voldep/rmsq_df.Rdata
Normal file
Binary file not shown.
@@ -2094,6 +2094,750 @@ Get these slides:
|
|||||||
|
|
||||||
::::
|
::::
|
||||||
|
|
||||||
|
# Modeling Volatility and Dependence of European Carbon and Energy Prices
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
- Understanding European Allowances (EUA) dynamics is important
|
||||||
|
for several fields:
|
||||||
|
- - Portfolio & Risk Management,
|
||||||
|
- - Sustainability Planing
|
||||||
|
- - Political decisions
|
||||||
|
- - ...
|
||||||
|
|
||||||
|
EUA prices are obviously connected to the energy market
|
||||||
|
|
||||||
|
How can the dynamics be characterized?
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
- Several Questions arise:
|
||||||
|
|
||||||
|
- - Data (Pre)processing
|
||||||
|
- - Modeling Approach
|
||||||
|
- - Evaluation
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Data
|
||||||
|
|
||||||
|
- EUA, natural gas, Brent crude oil, coal
|
||||||
|
- March 15, 2010, until October 14, 2022
|
||||||
|
|
||||||
|
- Data was normalized w.r.t. $\text{CO}_2$ emissions
|
||||||
|
- Emission-adjusted prices reflects one tonne of $\text{CO}_2$
|
||||||
|
|
||||||
|
- We adjusted for inflation by Eurostat's HICP, excluding energy
|
||||||
|
|
||||||
|
|
||||||
|
- Log transformation of the data to stabilize the variance
|
||||||
|
|
||||||
|
- ADF Test: All series are stationary in first differences
|
||||||
|
|
||||||
|
- Johansen’s likelihood ratio trace test suggests two cointegrating relationships (levels)
|
||||||
|
- Johansen’s likelihood ratio trace test suggests no cointegrating relationships (logs)
|
||||||
|
|
||||||
|
## Data
|
||||||
|
|
||||||
|
```{r, echo=FALSE, fig.width = 12, fig.height = 6, fig.align="center"}
|
||||||
|
readr::read_csv("assets/voldep/2022_10_14_eur_ref_co2_adj_hvpi_ex_nrg.csv") %>%
|
||||||
|
select(-EUR_USD, -hvpi_x_nrg) %>%
|
||||||
|
pivot_longer(-Date) %>%
|
||||||
|
mutate(name = factor(name,
|
||||||
|
levels = c("EUA", "Oil", "NGas", "Coal")
|
||||||
|
)) %>%
|
||||||
|
ggplot(aes(x = Date, y = value, color = name)) +
|
||||||
|
geom_line(
|
||||||
|
linewidth = linesize
|
||||||
|
) + # The ggplot2 call got a little simpler now :)
|
||||||
|
geom_vline(
|
||||||
|
# Beginning of the war
|
||||||
|
xintercept = as.Date("2022-02-24"),
|
||||||
|
col = as.character(cols[8, "grey"]),
|
||||||
|
linetype = "dashed"
|
||||||
|
) +
|
||||||
|
ylab("Prices EUR") +
|
||||||
|
xlab("Date") +
|
||||||
|
scale_color_manual(
|
||||||
|
values = as.character(c(
|
||||||
|
cols[8, col_eua],
|
||||||
|
cols[8, col_oil],
|
||||||
|
cols[8, col_gas],
|
||||||
|
cols[8, col_coal]
|
||||||
|
)),
|
||||||
|
labels = c(
|
||||||
|
"EUA",
|
||||||
|
"Oil",
|
||||||
|
"NGas",
|
||||||
|
"Coal"
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
guides(color = guide_legend(override.aes = list(size = 2))) +
|
||||||
|
theme_minimal() +
|
||||||
|
theme(
|
||||||
|
legend.position = "bottom",
|
||||||
|
# legend.key.size = unit(1.5, "cm"),
|
||||||
|
legend.title = element_blank(),
|
||||||
|
text = element_text(
|
||||||
|
size = text_size
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
scale_x_date(
|
||||||
|
breaks = as.Date(
|
||||||
|
paste0(
|
||||||
|
as.character(seq(2010, 2022, 2)),
|
||||||
|
"-01-01"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
date_labels = "%Y"
|
||||||
|
) +
|
||||||
|
xlab(NULL) +
|
||||||
|
scale_y_continuous(trans = "log2")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Modeling Approach: Overview
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
### VECM: Vector Error Correction Model
|
||||||
|
|
||||||
|
- Modeling the expectaion
|
||||||
|
- Captures the long-run cointegrating relationship
|
||||||
|
- Different cointegrating ranks, including rank zero (no cointegration)
|
||||||
|
|
||||||
|
### GARCH: Generalized Autoregressive Conditional Heteroscedasticity
|
||||||
|
|
||||||
|
- Captures the variance dynamics
|
||||||
|
|
||||||
|
### Copula: Captures the dependence structure
|
||||||
|
|
||||||
|
- Captures: conditional cross-sectional dependence structure
|
||||||
|
- Dependence allowed to vary over time
|
||||||
|
|
||||||
|
|
||||||
|
## Modeling Approach: Overview
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
- Let $\boldsymbol{X}_t$ be a $K$-dimensional vector at time $t$
|
||||||
|
- The forecasting target:
|
||||||
|
- Conditional joint distribution
|
||||||
|
- $F_{\boldsymbol{X}_t|\mathcal{F}_{t-1}}$
|
||||||
|
- $\mathcal{F}_{t}$ is the sigma field generated by all information available up to and including time $t$
|
||||||
|
|
||||||
|
Sklars theorem: decompose target into
|
||||||
|
- marginal distributions: $F_{X_{k,t}|\mathcal{F}_{t-1}}$ for $k=1,\ldots, K$, and
|
||||||
|
- copula function: $C_{\boldsymbol{U}_{t}|\mathcal{F}_{t - 1}}$
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
Let $\boldsymbol{x}_t= (x_{1,t},\ldots, x_{K,t})^\intercal$ be the realized values
|
||||||
|
|
||||||
|
It holds that:
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
F_{\boldsymbol{X}_t|\mathcal{F}_{t-1}}(\boldsymbol{x}_t) = C_{\boldsymbol{U}_{t}|\mathcal{F}_{t - 1}}(\boldsymbol{u}_t) \nonumber
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
with: $\boldsymbol{u}_t =(u_{1,t},\ldots, u_{K,t})^\intercal$, $u_{k,t} = F_{X_{k,t}|\mathcal{F}_{t-1}}(x_{k,t})$
|
||||||
|
|
||||||
|
For brewity we drop the conditioning on $\mathcal{F}_{t-1}$.
|
||||||
|
|
||||||
|
The model can be specified as follows
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
F(\boldsymbol{x}_t) = C \left[\mathbf{F}(\boldsymbol{x}_t; \boldsymbol{\mu}_t, \boldsymbol{ \sigma }_{t}^2, \boldsymbol{\nu}, \boldsymbol{\lambda}); \Xi_t, \Theta\right] \nonumber
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
$\Xi_{t}$ denotes time-varying dependence parameters
|
||||||
|
$\Theta$ denotes time-invariant dependence parameters
|
||||||
|
|
||||||
|
We take $C$ as the $t$-copula
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Modeling Approach: Mean and Variance
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### Individual marginal distributions:
|
||||||
|
|
||||||
|
$$\mathbf{F} = (F_1, \ldots, F_K)^{\intercal}$$
|
||||||
|
|
||||||
|
#### Generalized non-central t-distributions
|
||||||
|
- To account for heavy tails
|
||||||
|
- Time varying
|
||||||
|
- expectation: $\boldsymbol{\mu}_t = (\mu_{1,t}, \ldots, \mu_{K,t})^{\intercal}$
|
||||||
|
- variance: $\boldsymbol{\sigma}_{t}^2 = (\sigma_{1,t}^2, \ldots, \sigma_{K,t}^2)^{\intercal}$
|
||||||
|
- Time invariant
|
||||||
|
- degrees of freedom: $\boldsymbol{\nu} = (\nu_1, \ldots, \nu_K)^{\intercal}$
|
||||||
|
- noncentrality: $\boldsymbol{\lambda} = (\lambda_1, \ldots, \lambda_K)^{\intercal}$
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### VECM Model
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\Delta \boldsymbol{\mu}_t = \Pi \boldsymbol{x}_{t-1} + \Gamma \Delta \boldsymbol{x}_{t-1} \nonumber
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
where $\Pi = \alpha \beta^{\intercal}$ is the cointegrating matrix of rank $r$, $0 \leq r\leq K$.
|
||||||
|
|
||||||
|
#### GARCH model
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\sigma_{i,t}^2 = & \omega_i + \alpha^+_{i} (\epsilon_{i,t-1}^+)^2 + \alpha^-_{i} (\epsilon_{i,t-1}^-)^2 + \beta_i \sigma_{i,t-1}^2 \nonumber
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
where $\epsilon_{i,t-1}^+ = \max\{\epsilon_{i,t-1}, 0\}$ ...
|
||||||
|
|
||||||
|
Separate coefficients for positive and negative innovations to capture leverage effects.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Modeling Approach: Dependence
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### Time-varying dependence parameters
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\Xi_{t} = & \Lambda\left(\boldsymbol{\xi}_{t}\right)
|
||||||
|
\\
|
||||||
|
\xi_{ij,t} = & \eta_{0,ij} + \eta_{1,ij} \xi_{ij,t-1} + \eta_{2,ij} z_{i,t-1} z_{j,t-1},
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
$\xi_{ij,t}$ is a latent process
|
||||||
|
|
||||||
|
|
||||||
|
$z_{i,t}$ denotes the $i$-th standardized residual from time series $i$ at time point $t$
|
||||||
|
|
||||||
|
|
||||||
|
$\Lambda(\cdot)$ is a link function
|
||||||
|
- ensures that $\Xi_{t}$ is a valid variance covariance matrix
|
||||||
|
- ensures that $\Xi_{t}$ does not exceed its support space and remains semi-positive definite
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### Maximum Likelihood Estimation
|
||||||
|
|
||||||
|
All parameters can be estimated jointly. Using conditional independence:
|
||||||
|
\begin{align*}
|
||||||
|
L = f_{X_1} \prod_{i=2}^T f_{X_i|\mathcal{F}_{i-1}},
|
||||||
|
\end{align*}
|
||||||
|
with multivariate conditional density:
|
||||||
|
\begin{align*}
|
||||||
|
f_{\mathbf{X}_t}(\mathbf{x}_t | \mathcal{F}_{t-1}) = c\left[\mathbf{F}(\mathbf{x}_t;\boldsymbol{\mu}_t, \boldsymbol{\sigma}_{t}^2, \boldsymbol{\nu},
|
||||||
|
\boldsymbol{\lambda});\Xi_t, \Theta\right] \cdot \\ \prod_{i=1}^K f_{X_{i,t}}(\mathbf{x}_t;\boldsymbol{\mu}_t, \boldsymbol{\sigma}_{t}^2, \boldsymbol{\nu}, \boldsymbol{\lambda})
|
||||||
|
\end{align*}
|
||||||
|
The copula density $c$ can be derived analytically.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Study Design and Evaluation
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### Rolling-window forecasting study
|
||||||
|
|
||||||
|
- 3257 observations total
|
||||||
|
- Window size: 1000 days (~ four years)
|
||||||
|
- Forecasting 30-steps-ahead
|
||||||
|
|
||||||
|
=> 2227 potential starting points
|
||||||
|
|
||||||
|
We sample 250 to reduce computational cost
|
||||||
|
|
||||||
|
We draw $2^{12}= 2048$ trajectories from the joint predictive distribution
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
#### Evaluation
|
||||||
|
|
||||||
|
Forecasts are evaluated by the energy score (ES)
|
||||||
|
|
||||||
|
\begin{align*}
|
||||||
|
\text{ES}_t(F, \mathbf{x}_t) = \mathbb{E}_{F} \left(||\tilde{\mathbf{X}}_t - \mathbf{x}_t||_2\right) - \frac{1}{2} \mathbb{E}_F \left(||\tilde{\mathbf{X}}_t - \tilde{\mathbf{X}}_t'||_2 \right)
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
where $\mathbf{x}_t$ is the observed $K$-dimensional realization and $\tilde{\mathbf{X}}_t$, respectively $\tilde{\mathbf{X}}_t'$ are independent random vectors distributed according to $F$
|
||||||
|
|
||||||
|
For univariate cases the Energy Score becomes the Continuous Ranked Probability Score (CRPS)
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Energy Scores
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
Relative improvement in ES compared to $\text{RW}^{\sigma, \rho}$
|
||||||
|
|
||||||
|
Cellcolor: w.r.t test statistic of Diebold-Mariano test (testing wether the model outperformes the benchmark, greener = better).
|
||||||
|
|
||||||
|
```{r, echo=FALSE, results='asis'}
|
||||||
|
load("assets/voldep/energy_df.Rdata")
|
||||||
|
table_energy <- energy %>%
|
||||||
|
kbl(
|
||||||
|
digits = 2,
|
||||||
|
col.names = c(
|
||||||
|
"Model",
|
||||||
|
"\\(\\text{ES}^{\\text{All}}_{1-30}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{EUA}}_{1-30}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{Oil}}_{1-30}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{NGas}}_{1-30}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{Coal}}_{1-30}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{All}}_{1}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{All}}_{5}\\)",
|
||||||
|
"\\(\\text{ES}^{\\text{All}}_{30}\\)"
|
||||||
|
),
|
||||||
|
# linesep = "",
|
||||||
|
bootstrap_options = "condensed",
|
||||||
|
# Dont replace any string, dataframe has to be valid latex code ...
|
||||||
|
escape = TRUE,
|
||||||
|
format = "html",
|
||||||
|
align = c("l", rep("r", ncol(energy) - 1))
|
||||||
|
) %>%
|
||||||
|
kable_paper(full_width = FALSE)
|
||||||
|
|
||||||
|
for (i in 2:ncol(energy)) {
|
||||||
|
bold_cells <- rep(FALSE, times = nrow(energy))
|
||||||
|
|
||||||
|
if (all(energy[-1, i, drop = TRUE] < 0)) {
|
||||||
|
bold_cells[1] <- TRUE
|
||||||
|
} else {
|
||||||
|
bold_cells[which.max(energy[-1, i, drop = TRUE]) + 1] <- TRUE
|
||||||
|
}
|
||||||
|
|
||||||
|
table_energy <- table_energy %>%
|
||||||
|
column_spec(i,
|
||||||
|
background = c(
|
||||||
|
cols[5, "grey"],
|
||||||
|
col_scale2(
|
||||||
|
energy_dm[, i, drop = TRUE][-1],
|
||||||
|
rng_t
|
||||||
|
)
|
||||||
|
),
|
||||||
|
bold = bold_cells
|
||||||
|
)
|
||||||
|
}
|
||||||
|
table_energy %>%
|
||||||
|
kable_styling(
|
||||||
|
bootstrap_options = c("condensed"),
|
||||||
|
full_width = FALSE,
|
||||||
|
font_size = 16
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
- Benchmarks:
|
||||||
|
- $\text{RW}^{\sigma, \rho}$: Random walk with constant volatility and correlation
|
||||||
|
- Univariate $\text{ETS}^{\sigma}$ with constant volatility
|
||||||
|
- Vector ETS $VES^{\sigma}$ with constant volatility
|
||||||
|
|
||||||
|
- Heteroscedasticity is a main driver of ES
|
||||||
|
- The VECM model without cointegration (essentially a VAR) is the best performing model in terms of ES overall
|
||||||
|
- For EUA, the ETS Benchmark is the best performing model in terms of ES
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## CRPS Scores
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="28%"}
|
||||||
|
|
||||||
|
- CRPS solely evaluates the marginal distributions
|
||||||
|
- The cross-sectional dependence is ignored
|
||||||
|
|
||||||
|
|
||||||
|
- VES models deliver poor performance in short horizons
|
||||||
|
- For Oil prices the RW Benchmark can't be oupterformed 30 steps ahead
|
||||||
|
- Both VECM models generally deliver good performance
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="68%"}
|
||||||
|
|
||||||
|
Improvement in CRPS of selected models relative to $\textrm{RW}^{\sigma, \rho}_{}$ in % (higher = better). Colored according to the test statistic of a DM-Test comparing to $\textrm{RW}^{\sigma, \rho}_{}$ (greener means lower test statistic i.e., better performance compared to $\textrm{RW}^{\sigma, \rho}_{}$).
|
||||||
|
|
||||||
|
```{r, echo=FALSE, results = 'asis'}
|
||||||
|
load("assets/voldep/crps_df.Rdata")
|
||||||
|
|
||||||
|
table_crps <- crps %>%
|
||||||
|
kbl(
|
||||||
|
col.names = c("Model", rep(paste0("H", h_sub), 4)),
|
||||||
|
digits = 1,
|
||||||
|
linesep = "",
|
||||||
|
# Dont replace any string, dataframe has to be valid latex code ...
|
||||||
|
escape = FALSE,
|
||||||
|
format = "html",
|
||||||
|
booktabs = TRUE,
|
||||||
|
align = c("l", rep("r", ncol(crps) - 1))
|
||||||
|
) %>%
|
||||||
|
kable_paper(full_width = FALSE)
|
||||||
|
|
||||||
|
for (i in 2:ncol(crps)) {
|
||||||
|
bold_cells <- rep(FALSE, times = nrow(crps))
|
||||||
|
|
||||||
|
if (all(crps[-1, i, drop = TRUE] < 0)) {
|
||||||
|
bold_cells[1] <- TRUE
|
||||||
|
} else {
|
||||||
|
bold_cells[which.max(crps[-1, i, drop = TRUE]) + 1] <- TRUE
|
||||||
|
}
|
||||||
|
|
||||||
|
table_crps <- table_crps %>%
|
||||||
|
column_spec(i,
|
||||||
|
background = c(cols[5, "grey"], col_scale2(
|
||||||
|
crps_dm[, i, drop = TRUE][-1], rng_t
|
||||||
|
)),
|
||||||
|
bold = bold_cells
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
table_crps <- table_crps %>%
|
||||||
|
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3))
|
||||||
|
|
||||||
|
table_crps %>%
|
||||||
|
kable_styling(
|
||||||
|
bootstrap_options = c("condensed"),
|
||||||
|
full_width = FALSE,
|
||||||
|
font_size = 16
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## RMSE
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="28%"}
|
||||||
|
|
||||||
|
RMSE measures the performance of the forecasts at their mean
|
||||||
|
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
|
||||||
|
- Some models beat the benchmarks at short horizons
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
Conclusion: the Improvements seen before must be attributed to other parts of the multivariate probabilistic predictive distribution
|
||||||
|
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="68%"}
|
||||||
|
|
||||||
|
|
||||||
|
Improvement in RMSE score of selected models relative to $\textrm{RW}^{\sigma, \rho}_{}$ in % (higher = better). Colored according to the test statistic of a DM-Test comparing to $\textrm{RW}^{\sigma, \rho}_{}$ (greener means lower test statistic i.e., better performance compared to $\textrm{RW}^{\sigma, \rho}_{}$).
|
||||||
|
|
||||||
|
```{r, echo=FALSE, results = 'asis'}
|
||||||
|
load("assets/voldep/rmsq_df.Rdata")
|
||||||
|
|
||||||
|
table_rmsq <- rmsq %>%
|
||||||
|
kbl(
|
||||||
|
col.names = c("Model", rep(paste0("H", h_sub), 4)),
|
||||||
|
digits = 1,
|
||||||
|
# Dont replace any string, dataframe has to be valid latex code ...
|
||||||
|
escape = FALSE,
|
||||||
|
linesep = "",
|
||||||
|
format = "html",
|
||||||
|
align = c("l", rep("r", ncol(rmsq) - 1))
|
||||||
|
) %>%
|
||||||
|
kable_paper(full_width = FALSE)
|
||||||
|
|
||||||
|
for (i in 2:ncol(rmsq)) {
|
||||||
|
bold_cells <- rep(FALSE, times = nrow(rmsq))
|
||||||
|
|
||||||
|
if (all(rmsq[-1, i, drop = TRUE] < 0)) {
|
||||||
|
bold_cells[1] <- TRUE
|
||||||
|
} else {
|
||||||
|
bold_cells[which.max(rmsq[-1, i, drop = TRUE]) + 1] <- TRUE
|
||||||
|
}
|
||||||
|
|
||||||
|
table_rmsq <- table_rmsq %>%
|
||||||
|
column_spec(i,
|
||||||
|
background = c(cols[5, "grey"], col_scale2(
|
||||||
|
rmsq_dm[, i, drop = TRUE][-1], rng_t
|
||||||
|
)),
|
||||||
|
bold = bold_cells
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
table_rmsq <- table_rmsq %>%
|
||||||
|
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3))
|
||||||
|
|
||||||
|
table_rmsq %>%
|
||||||
|
kable_styling(
|
||||||
|
bootstrap_options = c("condensed"),
|
||||||
|
full_width = FALSE,
|
||||||
|
font_size = 14
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
|
## Evolution of Linear Dependence $\Xi$
|
||||||
|
|
||||||
|
```{r, echo=FALSE, fig.width = 12, fig.height = 6, fig.align="center"}
|
||||||
|
load("assets/voldep/plot_rho_df.Rdata")
|
||||||
|
ggplot() +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "5Oil-Coal", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "2EUA-NGas", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "1EUA-Oil", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "3EUA-Coal", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "6NGas-Coal", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_line(
|
||||||
|
size = linesize,
|
||||||
|
data = plot_data[plot_data$name == "4Oil-NGas", ],
|
||||||
|
aes(x = idx, y = value, col = name)
|
||||||
|
) +
|
||||||
|
geom_vline(
|
||||||
|
xintercept = as.Date("2022-02-24"), # Beginning of the war
|
||||||
|
col = as.character(cols[8, "grey"]),
|
||||||
|
linetype = "dashed"
|
||||||
|
) +
|
||||||
|
geom_vline(
|
||||||
|
xintercept = as.Date("2022-02-28"), # Central bank of russia was blocked from access to foreign reserves
|
||||||
|
col = as.character(cols[8, "grey"]),
|
||||||
|
linetype = "dotted"
|
||||||
|
) +
|
||||||
|
scale_colour_manual(
|
||||||
|
values = as.character(
|
||||||
|
cols[
|
||||||
|
6,
|
||||||
|
c("green", "purple", "blue", "red", "orange", "brown")
|
||||||
|
]
|
||||||
|
),
|
||||||
|
labels = c(
|
||||||
|
paste0(varnames[comb[, 1] + 1], "-", varnames[comb[, 2] + 1])
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
theme_minimal() +
|
||||||
|
theme(
|
||||||
|
zoom.x = element_rect(fill = cols[4, "grey"], colour = NA),
|
||||||
|
legend.position = "bottom",
|
||||||
|
text = element_text(size = text_size)
|
||||||
|
) +
|
||||||
|
ylab("Correlation") +
|
||||||
|
scale_x_date(
|
||||||
|
breaks = date_breaks_fct,
|
||||||
|
labels = date_labels_fct
|
||||||
|
) +
|
||||||
|
xlab(NULL) +
|
||||||
|
guides(col = guide_legend(
|
||||||
|
title = NULL,
|
||||||
|
nrow = 1,
|
||||||
|
byrow = TRUE,
|
||||||
|
override.aes = list(size = 2)
|
||||||
|
)) +
|
||||||
|
# scale_y_continuous(breaks = seq(-1.5, 1.0, 0.5)) +
|
||||||
|
ggforce::facet_zoom(
|
||||||
|
xlim = c(
|
||||||
|
as.Date("2022-02-02"),
|
||||||
|
as.Date("2022-04-30")
|
||||||
|
),
|
||||||
|
zoom.size = 1.5,
|
||||||
|
show.area = TRUE
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Predictive Quantiles (Russian Invasion)
|
||||||
|
|
||||||
|
```{r, echo=FALSE, fig.width = 12, fig.height = 6, fig.align="center"}
|
||||||
|
load("assets/voldep/plot_quant_df.Rdata")
|
||||||
|
|
||||||
|
plot_quant_data %>% ggplot(aes(x = date, y = value)) +
|
||||||
|
geom_line(size = 1, aes(col = quant)) +
|
||||||
|
geom_vline(
|
||||||
|
xintercept = as.Date("2022-02-24"), # Beginning of the war
|
||||||
|
col = as.character(cols[8, "grey"]),
|
||||||
|
linetype = "dashed"
|
||||||
|
) +
|
||||||
|
geom_vline(
|
||||||
|
xintercept = as.Date("2022-02-28"), # Central bank of russia was blocked from access to foreign reserves
|
||||||
|
col = as.character(cols[8, "grey"]),
|
||||||
|
linetype = "dotted"
|
||||||
|
) +
|
||||||
|
scale_colour_manual(
|
||||||
|
values = as.character(
|
||||||
|
c(
|
||||||
|
cols[
|
||||||
|
5,
|
||||||
|
c(1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15)
|
||||||
|
],
|
||||||
|
cols[9, 18]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
facet_grid(var ~ ., scales = "free_y") +
|
||||||
|
theme_minimal() +
|
||||||
|
theme(
|
||||||
|
legend.position = "bottom",
|
||||||
|
text = element_text(size = text_size),
|
||||||
|
strip.background = element_rect(
|
||||||
|
fill = cols[1, 18],
|
||||||
|
colour = cols[1, 18]
|
||||||
|
)
|
||||||
|
) +
|
||||||
|
ylab("EUR") +
|
||||||
|
scale_x_date(
|
||||||
|
breaks = (seq(
|
||||||
|
as.Date("2022-02-15"),
|
||||||
|
as.Date("2022-03-31"),
|
||||||
|
by = "4 day"
|
||||||
|
) + 1)[-12],
|
||||||
|
date_labels = "%b %d",
|
||||||
|
limits = c(as.Date("2022-02-15"), as.Date("2022-03-31"))
|
||||||
|
) +
|
||||||
|
xlab(NULL) +
|
||||||
|
guides(col = guide_legend(
|
||||||
|
title = "Quantiles [\\%]",
|
||||||
|
nrow = 2,
|
||||||
|
byrow = TRUE,
|
||||||
|
override.aes = list(size = 2)
|
||||||
|
)) +
|
||||||
|
scale_y_continuous(
|
||||||
|
trans = "log2",
|
||||||
|
breaks = y_breaks
|
||||||
|
)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
:::: {.columns}
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
Accounting for heteroscedasticity or stabilizing the variance via log transformation is crucial for good performance in terms of ES
|
||||||
|
|
||||||
|
- Price dynamics emerged way before the russian invaion into ukraine
|
||||||
|
- Linear dependence between the series reacted only right after the invasion
|
||||||
|
- Improvements in forecasting performance is mainly attributed to:
|
||||||
|
- the tails multivariate probabilistic predictive distribution
|
||||||
|
- the dependence structure between the marginals
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="2%"}
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::: {.column width="48%"}
|
||||||
|
|
||||||
|
</br>
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<img src="assets/voldep/frame.png">
|
||||||
|
</center>
|
||||||
|
|
||||||
|
`r fontawesome::fa("newspaper")` `r Citet(my_bib, "berrisch2023modeling")`
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
::::
|
||||||
|
|
||||||
## Columns Template
|
## Columns Template
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user