## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4 ) ## ----setup, message = FALSE--------------------------------------------------- library(forecastdom) data(llq2022_jnj) # JNJ realized variance + 6 forecasts + lagged VIX data(llq2022) # S&P 500 counterpart data(llq2022_uv_cspa) # pre-computed cross-stock counts models <- c("AR1", "AR22", "AR22_Lasso", "HAR", "HARQ", "ARFIMA") qlike <- function(f, y) (f / y) - log(f / y) - 1 ## ----jnj-losses--------------------------------------------------------------- L_jnj <- sapply(models, function(m) qlike(llq2022_jnj[[m]], llq2022_jnj$rv)) X_jnj <- llq2022_jnj$vix_lag ## ----fig2-left, fig.width = 6.5, fig.height = 4------------------------------- set.seed(20260512) g_har_ar1 <- cspa_test_plot( Y = as.matrix(L_jnj[, "AR1"] - L_jnj[, "HAR"]), X = X_jnj, level = 0.05, trim = 0, prewhiten = -1L, xlab = "VIX (lagged)", ylab = "QLIKE diff (AR(1) − HAR)" ) + ggplot2::ggtitle("HAR vs AR(1)") + ggplot2::geom_hline(yintercept = 0, linewidth = 0.3) g_har_ar1 ## ----fig2-right, fig.width = 6.5, fig.height = 4------------------------------ set.seed(20260512) g_har_harq <- cspa_test_plot( Y = as.matrix(L_jnj[, "HARQ"] - L_jnj[, "HAR"]), X = X_jnj, level = 0.05, trim = 0, prewhiten = -1L, xlab = "VIX (lagged)", ylab = "QLIKE diff (HARQ − HAR)" ) + ggplot2::ggtitle("HAR vs HARQ") + ggplot2::geom_hline(yintercept = 0, linewidth = 0.3) g_har_harq ## ----fig2-decisions----------------------------------------------------------- fig2 <- function(competitor) { Y <- as.matrix(L_jnj[, competitor] - L_jnj[, "HAR"]) set.seed(20260512) r <- cspa_test(Y, X_jnj, level = 0.05, trim = 0, prewhiten = -1L, preselect = TRUE, R = 10000L) data.frame(competitor = competitor, theta = unname(r$theta), pvalue = unname(r$pvalue), reject = unname(r$reject)) } knitr::kable( rbind(fig2("AR1"), fig2("HARQ")), digits = 4, row.names = FALSE, col.names = c("Competitor", "$\\theta$", "$p$-value", "Reject")) ## ----fig3-ar1, fig.width = 6.5, fig.height = 4.3------------------------------ set.seed(20260512) Y_ar1 <- L_jnj[, setdiff(models, "AR1")] - L_jnj[, "AR1"] g_ar1 <- cspa_test_plot( Y = Y_ar1, X = X_jnj, level = 0.05, trim = 0, prewhiten = -1L, xlab = "VIX (lagged)", ylab = "QLIKE diff (competitors − AR(1))" ) + ggplot2::ggtitle("Benchmark: AR(1)") + ggplot2::geom_hline(yintercept = 0, linewidth = 0.3) g_ar1 ## ----fig3-harq, fig.width = 6.5, fig.height = 4.3----------------------------- set.seed(20260512) Y_harq <- L_jnj[, setdiff(models, "HARQ")] - L_jnj[, "HARQ"] g_harq <- cspa_test_plot( Y = Y_harq, X = X_jnj, level = 0.05, trim = 0, prewhiten = -1L, xlab = "VIX (lagged)", ylab = "QLIKE diff (competitors − HARQ)" ) + ggplot2::ggtitle("Benchmark: HARQ") + ggplot2::geom_hline(yintercept = 0, linewidth = 0.3) g_harq ## ----fig3-decisions----------------------------------------------------------- fig3 <- function(bench) { comp <- setdiff(models, bench) Y <- L_jnj[, comp] - L_jnj[, bench] set.seed(20260512) r <- cspa_test(Y, X_jnj, level = 0.05, trim = 0, prewhiten = -1L, preselect = TRUE, R = 10000L) data.frame(benchmark = bench, theta = unname(r$theta), pvalue = unname(r$pvalue), reject = unname(r$reject)) } knitr::kable( rbind(fig3("AR1"), fig3("HARQ")), digits = 4, row.names = FALSE, col.names = c("Benchmark", "$\\theta$", "$p$-value", "Reject")) ## ----counts-mine-------------------------------------------------------------- knitr::kable(llq2022_uv_cspa$mine, caption = "forecastdom::cspa_test, R = 10000") ## ----counts-paper------------------------------------------------------------- knitr::kable(llq2022_uv_cspa$paper, caption = "Published Table_UV_CSPA.xlsx (LLQ 2022)") ## ----counts-diff-------------------------------------------------------------- diff_mat <- llq2022_uv_cspa$mine - llq2022_uv_cspa$paper knitr::kable(diff_mat, caption = "Difference (forecastdom minus LLQ)") ## ----sp500-csms--------------------------------------------------------------- L_sp <- sapply(models, function(m) qlike(llq2022[[m]], llq2022$rv)) set.seed(20260512) cs <- csms(L_sp, llq2022$vix_lag, level = 0.10, trim = 0, prewhiten = -1L, preselect = TRUE, R = 10000L, method_names = models) cs