Table consistency, VolDep progress
This commit is contained in:
@@ -230,4 +230,9 @@
|
||||
.zero-width {
|
||||
display: inline-block;
|
||||
width: 0px;
|
||||
}
|
||||
|
||||
.fa {
|
||||
width: 1.25em;
|
||||
text-align: center;
|
||||
}
|
||||
189
index.qmd
189
index.qmd
@@ -44,24 +44,23 @@ $$
|
||||
$$
|
||||
:::
|
||||
|
||||
::: {style="font-size: 150%;"}
|
||||
<br/>
|
||||
|
||||
:::: {style="font-size: 150%;"}
|
||||
|
||||
<i class="fa fa-fw fa-rocket" style="color:var(--col_grey_9);"></i>   [Research Motivation](#motivation)
|
||||
|
||||
<i class="fa fa-fw fa-book" style="color:var(--col_grey_9);"></i>   Overview of the Thesis
|
||||
|
||||
<i class="fa fa-fw fa-code-merge" style="color:var(--col_grey_9);"></i>   Online Aggregation
|
||||
|
||||
<i class="fa fa-fw fa-fire-flame-simple" style="color:var(--col_grey_9);"></i>   Probabilistic Forecasting of European Carbon and Energy Prices
|
||||
|
||||
<i class="fa fa-fw fa-newspaper" style="color:var(--col_grey_9);"></i>   Contributions & Outlook
|
||||
|
||||
|
||||
:::
|
||||
|
||||
<br>
|
||||
|
||||
[{{< fa bars-staggered >}}]{style="color: #404040;"}   [Introduction & Research Motivation](#motivation)
|
||||
|
||||
[{{< fa bars-staggered >}}]{style="color: #404040;"}   Overview of the Thesis
|
||||
|
||||
[{{< fa table >}}]{style="color: #404040;"}   Online Learning
|
||||
|
||||
[{{< fa circle-nodes >}}]{style="color: #404040;"}   Probabilistic Forecasting of European Carbon and Energy Prices
|
||||
|
||||
[{{< fa lightbulb >}}]{style="color: #404040;"}   Limitations
|
||||
|
||||
[{{< fa binoculars >}}]{style="color: #404040;"}   Contributions & Outlook
|
||||
|
||||
```{r, setup, include=FALSE}
|
||||
# Compile with: rmarkdown::render("crps_learning.Rmd")
|
||||
library(latex2exp)
|
||||
@@ -538,7 +537,7 @@ Using the CRPS, we can calculate time-adaptive weights $w_{t,k}$. However, what
|
||||
\label{eq_boa_opt_conv}
|
||||
\end{equation}
|
||||
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t *convex aggregation* \eqref{eq_optp_conv} @wintenberger2017optimal.
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t. *convex aggregation* \eqref{eq_optp_conv} @wintenberger2017optimal.
|
||||
|
||||
The same algorithm satisfies that there exist a $C>0$ such that for $x>0$ it holds that
|
||||
\begin{equation}
|
||||
@@ -550,7 +549,7 @@ The same algorithm satisfies that there exist a $C>0$ such that for $x>0$ it hol
|
||||
|
||||
if $Y_t$ is bounded, the considered loss $\ell$ is convex $G$-Lipschitz and weak exp-concave in its first coordinate.
|
||||
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t *selection* \eqref{eq_optp_select} @gaillard2018efficient.
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t. *selection* \eqref{eq_optp_select} @gaillard2018efficient.
|
||||
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` We show that this holds for QL under feasible conditions.
|
||||
|
||||
@@ -579,7 +578,7 @@ for all $x_1,x_2 \in \mathbb{R}$ and $t>0$ that
|
||||
\mathbb{E}\left[ \left. \left( \alpha(\ell'(x_1, Y_t)(x_1 - x_2))^{2}\right)^{1/\beta} \right|\mathcal{F}_{t-1}\right]
|
||||
\end{align*}
|
||||
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t *selection* \eqref{eq_optp_select} @gaillard2018efficient.
|
||||
`r fontawesome::fa("arrow-right", fill ="#000000")` Almost optimal w.r.t. *selection* \eqref{eq_optp_select} @gaillard2018efficient.
|
||||
|
||||
:::
|
||||
|
||||
@@ -1247,12 +1246,8 @@ TTinit <- 1 ## without first, as all comb. are uniform
|
||||
RQL <- apply(QL[1:KK, -c(1:TTinit), ], c(1, 3), mean)
|
||||
dimnames(RQL) <- list(mnames, Qgrid)
|
||||
RQLm <- apply(RQL, c(1), mean, na.rm = TRUE)
|
||||
# sort(RQLm - RQLm[K + 1])
|
||||
##
|
||||
qq <- apply(QL[1:KK, -c(1:TTinit), ], c(1, 2), mean)
|
||||
# t.test(qq[K + 1, ] - qq[K + 3, ])
|
||||
# t.test(qq[K + 1, ] - qq[K + 4, ])
|
||||
|
||||
|
||||
library(xtable)
|
||||
Pall <- numeric(KK)
|
||||
@@ -1290,12 +1285,13 @@ for (i.p in 1:MO) {
|
||||
fblue <- round(approxfun(seq(crange[1], crange[2], length = length(cblue)), cblue)(pmin(xxx[, i.p], xmax)), 3)
|
||||
tmp <- format(round(xxx[, i.p], 3), nsmall = 3)
|
||||
xxxx[, i.p] <- paste("\\cellcolor[rgb]{", fred, ",", fgreen, ",", fblue, "}", tmp, " {\\footnotesize (", Pallout[IDX[i.p]], ")}", sep = "")
|
||||
table[, i.p] <- paste0(tmp, " (", Pallout[i.p], ")")
|
||||
table[, i.p] <- paste0(tmp, " (", Pallout[i.p], ")") # TODO: Improve here?
|
||||
table_col[, i.p] <- rgb(fred, fgreen, fblue, maxColorValue = 1)
|
||||
} # i.p
|
||||
|
||||
table_out <- kbl(table, align = rep("c", ncol(table)), bootstrap_options = c("condensed")) %>%
|
||||
kable_paper(full_width = TRUE)
|
||||
kable_paper(full_width = TRUE) %>%
|
||||
row_spec(0:nrow(table), color = cols[9, "grey"])
|
||||
|
||||
for (j in 1:ncol(table)) {
|
||||
table_out <- table_out %>%
|
||||
@@ -1333,7 +1329,8 @@ for (i.p in 1:MO) {
|
||||
} # i.p
|
||||
|
||||
table_out2 <- kableExtra::kbl(table2, align = rep("c", ncol(table2)), bootstrap_options = c("condensed")) %>%
|
||||
kable_paper(full_width = TRUE)
|
||||
kable_paper(full_width = TRUE) %>%
|
||||
row_spec(0:nrow(table2), color = cols[9, "grey"])
|
||||
|
||||
for (j in 1:ncol(table2)) {
|
||||
table_out2 <- table_out2 %>%
|
||||
@@ -1623,7 +1620,7 @@ table_naive <- naive_table_df %>%
|
||||
align = c("c", rep("c", ncol(naive_table_df) - 1))
|
||||
) %>%
|
||||
kable_paper(full_width = TRUE) %>%
|
||||
row_spec(0:1, color = cols[10, "grey"]) %>%
|
||||
row_spec(0:1, color = cols[9, "grey"]) %>%
|
||||
kable_styling(font_size = 16)
|
||||
|
||||
|
||||
@@ -1694,7 +1691,7 @@ table_performance <- performance_loss_tibble %>%
|
||||
align = c("l", "l", rep("c", ncol(performance_loss_tibble)-2))
|
||||
) %>%
|
||||
kable_paper(full_width = TRUE) %>%
|
||||
row_spec(0:nrow(performance_loss_tibble), color = cols[10, "grey"])
|
||||
row_spec(0:nrow(performance_loss_tibble), color = cols[9, "grey"])
|
||||
|
||||
# %%
|
||||
|
||||
@@ -2214,23 +2211,33 @@ Berrisch, J., Pappert, S., Ziel, F., & Arsova, A. (2023). *Finance Research Lett
|
||||
|
||||
---
|
||||
|
||||
## Motivation
|
||||
##
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
- Understanding European Allowances (EUA) dynamics is important
|
||||
### Motivation
|
||||
|
||||
Understanding European Allowances (EUA) dynamics is important
|
||||
for several fields:
|
||||
- - Portfolio & Risk Management,
|
||||
- - Sustainability Planing
|
||||
- - Political decisions
|
||||
- - ...
|
||||
|
||||
<i class="fa fa-fw fa-chart-pie" style="color:var(--col_grey_9);"></i> Portfolio & Risk Management,
|
||||
|
||||
<i class="fa fa-fw fa-timeline" style="color:var(--col_grey_9);"></i> Sustainability Planing
|
||||
|
||||
<i class="fa fa-fw fa-handshake" style="color:var(--col_grey_9);"></i> Political decisions
|
||||
|
||||
EUA prices are obviously connected to the energy market
|
||||
|
||||
How can the dynamics be characterized?
|
||||
|
||||
Several Questions arise:
|
||||
|
||||
- Data (Pre)processing
|
||||
- Modeling Approach
|
||||
- Evaluation
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
@@ -2239,13 +2246,25 @@ How can the dynamics be characterized?
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
</br>
|
||||
### Data
|
||||
|
||||
- Several Questions arise:
|
||||
EUA, natural gas, Brent crude oil, coal
|
||||
|
||||
- - Data (Pre)processing
|
||||
- - Modeling Approach
|
||||
- - Evaluation
|
||||
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)
|
||||
|
||||
:::
|
||||
|
||||
@@ -2253,24 +2272,6 @@ How can the dynamics be characterized?
|
||||
|
||||
## 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", cache = TRUE}
|
||||
readr::read_csv("assets/voldep/2022_10_14_eur_ref_co2_adj_hvpi_ex_nrg.csv") %>%
|
||||
select(-EUR_USD, -hvpi_x_nrg) %>%
|
||||
@@ -2339,15 +2340,17 @@ readr::read_csv("assets/voldep/2022_10_14_eur_ref_co2_adj_hvpi_ex_nrg.csv") %>%
|
||||
|
||||
### GARCH: Generalized Autoregressive Conditional Heteroscedasticity
|
||||
|
||||
- Captures the variance dynamics
|
||||
- Captures dynamics in conditional variance
|
||||
|
||||
### Copula: Captures the dependence structure
|
||||
|
||||
- Captures: conditional cross-sectional dependence structure
|
||||
- Captures: conditional cross-sectional dependencies
|
||||
- Dependence allowed to vary over time
|
||||
|
||||
|
||||
## Modeling Approach: Overview
|
||||
## Modeling Approach: Notation
|
||||
|
||||
<br/>
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
@@ -2400,15 +2403,17 @@ We take $C$ as the $t$-copula
|
||||
|
||||
## Modeling Approach: Mean and Variance
|
||||
|
||||
<br/>
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### Individual marginal distributions:
|
||||
### Individual marginal distributions:
|
||||
|
||||
$$\mathbf{F} = (F_1, \ldots, F_K)^{\intercal}$$
|
||||
|
||||
#### Generalized non-central t-distributions
|
||||
### Generalized non-central t-distributions
|
||||
- To account for heavy tails
|
||||
- Time varying
|
||||
- expectation: $\boldsymbol{\mu}_t = (\mu_{1,t}, \ldots, \mu_{K,t})^{\intercal}$
|
||||
@@ -2425,7 +2430,7 @@ $$\mathbf{F} = (F_1, \ldots, F_K)^{\intercal}$$
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### VECM Model
|
||||
### VECM Model
|
||||
|
||||
\begin{align}
|
||||
\Delta \boldsymbol{\mu}_t = \Pi \boldsymbol{x}_{t-1} + \Gamma \Delta \boldsymbol{x}_{t-1} \nonumber
|
||||
@@ -2433,7 +2438,7 @@ $$\mathbf{F} = (F_1, \ldots, F_K)^{\intercal}$$
|
||||
|
||||
where $\Pi = \alpha \beta^{\intercal}$ is the cointegrating matrix of rank $r$, $0 \leq r\leq K$.
|
||||
|
||||
#### GARCH model
|
||||
### 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
|
||||
@@ -2449,11 +2454,13 @@ Separate coefficients for positive and negative innovations to capture leverage
|
||||
|
||||
## Modeling Approach: Dependence
|
||||
|
||||
<br/>
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### Time-varying dependence parameters
|
||||
### Time-varying dependence parameters
|
||||
|
||||
\begin{align*}
|
||||
\Xi_{t} = & \Lambda\left(\boldsymbol{\xi}_{t}\right)
|
||||
@@ -2479,7 +2486,7 @@ $\Lambda(\cdot)$ is a link function
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### Maximum Likelihood Estimation
|
||||
### Maximum Likelihood Estimation
|
||||
|
||||
All parameters can be estimated jointly. Using conditional independence:
|
||||
\begin{align*}
|
||||
@@ -2498,11 +2505,13 @@ The copula density $c$ can be derived analytically.
|
||||
|
||||
## Study Design and Evaluation
|
||||
|
||||
<br/>
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### Rolling-window forecasting study
|
||||
### Rolling-window forecasting study
|
||||
|
||||
- 3257 observations total
|
||||
- Window size: 1000 days (~ four years)
|
||||
@@ -2516,18 +2525,18 @@ We draw $2^{12}= 2048$ trajectories from the joint predictive distribution
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
::: {.column width="4%"}
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="48%"}
|
||||
|
||||
#### Evaluation
|
||||
### 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)
|
||||
\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$
|
||||
@@ -2538,17 +2547,21 @@ For univariate cases the Energy Score becomes the Continuous Ranked Probability
|
||||
|
||||
::::
|
||||
|
||||
## Results
|
||||
|
||||
::: {.panel-tabset}
|
||||
|
||||
## Energy Scores
|
||||
|
||||
:::: {.columns}
|
||||
|
||||
::: {.column width="48%"}
|
||||
::: {.column width="55%"}
|
||||
|
||||
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).
|
||||
Cellcolor: w.r.t. test statistic of Diebold-Mariano test (testing wether the model outperformes the benchmark, greener = better).
|
||||
|
||||
```{r, echo=FALSE, results='asis', cache = TRUE}
|
||||
```{r, echo=FALSE, results='asis', width = 'revert-layer', cache = TRUE}
|
||||
load("assets/voldep/energy_df.Rdata")
|
||||
table_energy <- energy %>%
|
||||
kbl(
|
||||
@@ -2571,8 +2584,8 @@ table_energy <- energy %>%
|
||||
format = "html",
|
||||
align = c("l", rep("r", ncol(energy) - 1))
|
||||
) %>%
|
||||
kable_paper(full_width = FALSE) %>%
|
||||
row_spec(0:nrow(energy), color = cols[10, "grey"])
|
||||
kable_paper(full_width = TRUE) %>%
|
||||
row_spec(0:nrow(energy), color = cols[9, "grey"])
|
||||
|
||||
for (i in 2:ncol(energy)) {
|
||||
bold_cells <- rep(FALSE, times = nrow(energy))
|
||||
@@ -2598,18 +2611,17 @@ for (i in 2:ncol(energy)) {
|
||||
table_energy %>%
|
||||
kable_styling(
|
||||
bootstrap_options = c("condensed"),
|
||||
full_width = TRUE,
|
||||
font_size = 14
|
||||
)
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
::: {.column width="4%"}
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="48%"}
|
||||
::: {.column width="41%"}
|
||||
|
||||
- Benchmarks:
|
||||
- $\text{RW}^{\sigma, \rho}$: Random walk with constant volatility and correlation
|
||||
@@ -2640,7 +2652,7 @@ table_energy %>%
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
::: {.column width="4%"}
|
||||
|
||||
:::
|
||||
|
||||
@@ -2659,7 +2671,7 @@ table_crps <- crps %>%
|
||||
# Dont replace any string, dataframe has to be valid latex code ...
|
||||
escape = FALSE,
|
||||
format = "html",
|
||||
booktabs = TRUE,
|
||||
booktabs = FALSE,
|
||||
align = c("l", rep("r", ncol(crps) - 1))
|
||||
) %>%
|
||||
kable_paper(full_width = FALSE)
|
||||
@@ -2683,7 +2695,8 @@ for (i in 2:ncol(crps)) {
|
||||
}
|
||||
|
||||
table_crps <- table_crps %>%
|
||||
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3))
|
||||
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3)) %>%
|
||||
row_spec(0:nrow(crps), color = cols[9, "grey"])
|
||||
|
||||
table_crps %>%
|
||||
kable_styling(
|
||||
@@ -2718,13 +2731,12 @@ Conclusion: the Improvements seen before must be attributed to other parts of th
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
::: {.column width="4%"}
|
||||
|
||||
:::
|
||||
|
||||
::: {.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', cache = TRUE}
|
||||
@@ -2761,7 +2773,8 @@ for (i in 2:ncol(rmsq)) {
|
||||
}
|
||||
|
||||
table_rmsq <- table_rmsq %>%
|
||||
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3))
|
||||
add_header_above(c(" ", "EUA" = 3, "Oil" = 3, "NGas" = 3, "Coal" = 3)) %>%
|
||||
row_spec(0:nrow(rmsq), color = cols[9, "grey"])
|
||||
|
||||
table_rmsq %>%
|
||||
kable_styling(
|
||||
@@ -2777,7 +2790,7 @@ table_rmsq %>%
|
||||
|
||||
## Evolution of Linear Dependence $\Xi$
|
||||
|
||||
```{r, echo=FALSE, fig.width = 12, fig.height = 6, fig.align="center", cache = TRUE}
|
||||
```{r, echo=FALSE, fig.width = 12, fig.height = 5.5, fig.align="center", cache = TRUE}
|
||||
load("assets/voldep/plot_rho_df.Rdata")
|
||||
ggplot() +
|
||||
geom_line(
|
||||
@@ -2860,9 +2873,9 @@ ggplot() +
|
||||
)
|
||||
```
|
||||
|
||||
## Predictive Quantiles (Russian Invasion)
|
||||
## Predictive Quantiles
|
||||
|
||||
```{r, echo=FALSE, fig.width = 12, fig.height = 6, fig.align="center", cache = TRUE}
|
||||
```{r, echo=FALSE, fig.width = 12, fig.height = 5.5, fig.align="center", cache = TRUE}
|
||||
load("assets/voldep/plot_quant_df.Rdata")
|
||||
|
||||
plot_quant_data %>% ggplot(aes(x = date, y = value)) +
|
||||
@@ -2922,6 +2935,8 @@ plot_quant_data %>% ggplot(aes(x = date, y = value)) +
|
||||
|
||||
```
|
||||
|
||||
::::
|
||||
|
||||
## Conclusion
|
||||
|
||||
:::: {.columns}
|
||||
@@ -2938,7 +2953,7 @@ Accounting for heteroscedasticity or stabilizing the variance via log transforma
|
||||
|
||||
:::
|
||||
|
||||
::: {.column width="2%"}
|
||||
::: {.column width="4%"}
|
||||
|
||||
:::
|
||||
|
||||
|
||||
Reference in New Issue
Block a user