fitAutoReg: Vector Autoregressive Model - VAR(p = 2)
Ivan Jacob Agaloos Pesigan
Source:vignettes/var-p2.Rmd
var-p2.Rmd
Generate data
set.seed(42)
time <- 1000L
burn_in <- 200L
k <- 3
p <- 2
constant <- c(1, 1, 1)
coef <- matrix(
data = c(
0.4, 0.0, 0.0, 0.1, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0, 0.2, 0.0,
0.0, 0.0, 0.6, 0.0, 0.0, 0.3
),
nrow = k,
byrow = TRUE
)
chol_cov <- chol(diag(3))
dat_p2 <- SimVAR(
time = time,
burn_in = burn_in,
constant = constant,
coef = coef,
chol_cov = chol_cov
)
Ordinary Least Squares
Y <- dat_p2_yx$Y
X <- dat_p2_yx$X
FitVAROLS(Y = Y, X = X)
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.7899726 0.36836768 0.008539283 0.02231498 0.11338780 0.024505442
#> [2,] 1.0001995 0.01334496 0.481949237 -0.01730029 -0.03223315 0.234373552
#> [3,] 1.0666814 -0.03022951 0.014945306 0.60741736 -0.01610408 -0.006149189
#> [,7]
#> [1,] -0.01143384
#> [2,] 0.01815779
#> [3,] 0.29620975
Lasso Regularization
YStd <- StdMat(dat_p2_yx$Y)
XStd <- StdMat(dat_p2_yx$X[, -1])
lambdas <- LambdaSeq(YStd = YStd, XStd = XStd, n_lambdas = 100)
FitVARLassoSearch(YStd = YStd, XStd = XStd, lambdas = lambdas,
crit = "ebic", max_iter = 1000, tol = 1e-5)
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.3429428 0.000000 0.000000 0.08487819 0.0000000 0.0000000
#> [2,] 0.0000000 0.457026 0.000000 0.00000000 0.2120426 0.0000000
#> [3,] 0.0000000 0.000000 0.588127 0.00000000 0.0000000 0.2737749
Dynr
dynr_model <- ModelVARP2Dynr(data = dat_p2)
coef(
object = dynr_model,
dynr_cook = FitVARDynr(model = dynr_model, hessian_flag = FALSE)
)
#> $constant
#> [1] 0.8108203 1.0385953 1.0830291
#>
#> $coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.36766728 0.007391896 0.01983247 0.114497325 0.024832351 -0.01065118
#> [2,] 0.01376537 0.480781804 -0.01962650 -0.038003569 0.233819340 0.01853446
#> [3,] -0.03337367 0.013277403 0.60707078 -0.009727031 -0.004752739 0.29460604
#>
#> $cov
#> [,1] [,2] [,3]
#> [1,] 0.986841754 -0.054124215 -0.004444707
#> [2,] -0.054124215 1.007742802 0.008107844
#> [3,] -0.004444707 0.008107844 0.987783462
Multiple individuals
n <- 10 # n individuals
dat_p2_mult <- lapply(
X = seq_len(n),
FUN = function(i) {
return(
SimVAR(
time = 1000L,
burn_in = 10,
constant = constant,
coef = coef,
chol_cov = chol_cov
)
)
}
)
Single VAR model on the entire data set.
dynr_model <- ModelVARP2Dynr(data = dat_p2_mult)
coef(
object = dynr_model,
dynr_cook = FitVARDynr(model = dynr_model, hessian_flag = FALSE)
)
#> $constant
#> [1] 1.0448029 0.9746017 1.0014669
#>
#> $coef
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] 0.40121116 -0.009609459 -0.003694735 0.104843203 -0.006740511
#> [2,] -0.00886161 0.504827496 -0.007677505 0.002317086 0.208803378
#> [3,] -0.01568661 0.004431672 0.584943385 -0.001003501 0.014681107
#> [,6]
#> [1,] 0.004724077
#> [2,] 0.006492386
#> [3,] 0.312771409
#>
#> $cov
#> [,1] [,2] [,3]
#> [1,] 0.99995757 0.017928481 -0.016324570
#> [2,] 0.01792848 0.982177366 0.004719771
#> [3,] -0.01632457 0.004719771 0.998661138
Multiple VAR models on each individual.
dynr_cook <- FitMLVARDynr(data = dat_p2_mult, p = 2, hessian_flag = FALSE)
dynr_model <- ModelVARP2Dynr(data = dat_p2_mult[[1]])
lapply(
X = dynr_cook,
FUN = function(dynr_cook,
dynr_model) {
coef(
object = dynr_model,
dynr_cook = dynr_cook
)
},
dynr_model = ModelVARP2Dynr(data = dat_p2_mult[[1]])
)
#> [[1]]
#> [[1]]$constant
#> [1] 1.1016118 0.6220082 1.0310433
#>
#> [[1]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.36008223 -0.01306639 -0.03304167 0.105455322 0.019978368 0.02973365
#> [2,] -0.02699569 0.51145557 -0.01623585 0.043102336 0.213956729 0.04299584
#> [3,] -0.02700385 0.05105222 0.56744250 -0.008307423 0.001164322 0.31699644
#>
#> [[1]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.01177031 0.02705833 -0.0356887
#> [2,] 0.02705833 0.98613899 -0.0510453
#> [3,] -0.03568870 -0.05104530 0.9728425
#>
#>
#> [[2]]
#> [[2]]$constant
#> [1] 0.9087098 1.2997561 0.9708976
#>
#> [[2]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.421808224 -0.02868872 0.01113127 0.10547763 -0.028134757 0.007448539
#> [2,] -0.010725884 0.49607261 0.05155614 -0.01204139 0.203919613 -0.079327421
#> [3,] 0.008929565 0.02792460 0.59290782 -0.01900508 0.005532939 0.303290248
#>
#> [[2]]$cov
#> [,1] [,2] [,3]
#> [1,] 0.98586014 -0.01532868 0.02167002
#> [2,] -0.01532868 1.04271399 0.01693319
#> [3,] 0.02167002 0.01693319 0.98675364
#>
#>
#> [[3]]
#> [[3]]$constant
#> [1] 0.9625255 1.1617802 0.8160145
#>
#> [[3]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.387314489 0.03398277 0.034217985 0.10781723 -0.046571965 -0.02299568
#> [2,] 0.001779301 0.48054979 -0.001741598 0.02865702 0.205492403 -0.01080436
#> [3,] -0.017245793 -0.00786880 0.585949598 -0.00371550 -0.001581034 0.34076521
#>
#> [[3]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.00731999 0.03633079 0.04965056
#> [2,] 0.03633079 0.89353130 -0.02701402
#> [3,] 0.04965056 -0.02701402 1.01764574
#>
#>
#> [[4]]
#> [[4]]$constant
#> [1] 1.0072154 0.7881492 1.3793954
#>
#> [[4]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.36758525 -0.03591149 -0.03675947 0.1448151430 0.019685886 0.039052584
#> [2,] -0.01164483 0.55576980 0.01356325 0.0009545091 0.172674735 0.001263999
#> [3,] -0.05748517 0.01461848 0.63786131 0.0062837028 0.009153765 0.221367633
#>
#> [[4]]$cov
#> [,1] [,2] [,3]
#> [1,] 0.99428428 -0.03969732 -0.01109314
#> [2,] -0.03969732 1.00684355 0.02687373
#> [3,] -0.01109314 0.02687373 0.98994616
#>
#>
#> [[5]]
#> [[5]]$constant
#> [1] 1.1563747 0.6489412 1.0588652
#>
#> [[5]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.34769124 -0.01774602 0.02370469 0.12287694 -0.0008137301 -0.02862023
#> [2,] -0.04701790 0.49252858 0.05574341 0.02032942 0.2489501465 -0.03315115
#> [3,] -0.02927806 -0.02989915 0.59606680 0.03774691 0.0264441791 0.30269867
#>
#> [[5]]$cov
#> [,1] [,2] [,3]
#> [1,] 0.967004145 0.02661108 0.007126847
#> [2,] 0.026611081 0.95755262 -0.011130767
#> [3,] 0.007126847 -0.01113077 1.017224670
#>
#>
#> [[6]]
#> [[6]]$constant
#> [1] 1.0122311 0.9821801 1.0640212
#>
#> [[6]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.422294792 -0.02173318 -0.04781544 0.102915806 0.0069815446 0.04742816
#> [2,] -0.007030334 0.50703672 -0.06449920 -0.049537626 0.2043790301 0.07221843
#> [3,] 0.026390818 0.01110491 0.56364536 -0.009568856 0.0001919468 0.32417544
#>
#> [[6]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.0111198563 0.04610627 -0.0008635716
#> [2,] 0.0461062711 0.99542463 0.0538673257
#> [3,] -0.0008635716 0.05386733 0.9261752104
#>
#>
#> [[7]]
#> [[7]]$constant
#> [1] 1.2390079 0.9772929 0.9997870
#>
#> [[7]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.44903817 -0.0601045100 -0.01546071 0.05524027 0.01796034 0.005724359
#> [2,] -0.04670476 0.5299439782 -0.05048147 0.02884935 0.15330528 0.054024206
#> [3,] 0.03481530 0.0008994912 0.55615647 -0.03407587 0.03315500 0.333956146
#>
#> [[7]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.02236705 0.01536160 -0.07710838
#> [2,] 0.01536160 0.92596621 -0.04101406
#> [3,] -0.07710838 -0.04101406 1.06871132
#>
#>
#> [[8]]
#> [[8]]$constant
#> [1] 1.431899 1.292935 1.012757
#>
#> [[8]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.40713790 -0.0007877583 -0.009534469 0.078319650 -0.05136826 -0.01198658
#> [2,] -0.02284324 0.4869293147 0.003511874 0.025897582 0.20356846 -0.02499286
#> [3,] -0.06726107 0.0198557174 0.569060654 0.005417727 0.01228816 0.33028598
#>
#> [[8]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.01846132 0.04556160 -0.05487458
#> [2,] 0.04556160 0.92826043 0.06792138
#> [3,] -0.05487458 0.06792138 1.06185577
#>
#>
#> [[9]]
#> [[9]]$constant
#> [1] 0.7906723 0.9371424 1.0302616
#>
#> [[9]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.44248349 0.03633455 0.03452381 0.080468237 0.01352517 -0.026384462
#> [2,] 0.03957075 0.47697059 0.00204900 -0.001293086 0.21604839 0.001096854
#> [3,] 0.04026347 -0.04818074 0.56119133 -0.009810479 0.06034822 0.324471289
#>
#> [[9]]$cov
#> [,1] [,2] [,3]
#> [1,] 0.911376281 0.001190159 -0.019759492
#> [2,] 0.001190159 0.997640210 -0.002934869
#> [3,] -0.019759492 -0.002934869 0.937569755
#>
#>
#> [[10]]
#> [[10]]$constant
#> [1] 0.9170386 1.0921253 1.1220770
#>
#> [[10]]$coef
#> [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] 0.38922120 0.005973010 0.01038857 0.094160748 -0.02232555 0.008267599
#> [2,] 0.04004084 0.480036149 -0.06276185 -0.062625067 0.21461737 0.057985062
#> [3,] -0.05361224 0.005343913 0.60051783 0.003481464 0.01078946 0.297470371
#>
#> [[10]]$cov
#> [,1] [,2] [,3]
#> [1,] 1.00247113 0.001030410 -0.053567210
#> [2,] 0.00103041 0.997905516 0.007351553
#> [3,] -0.05356721 0.007351553 0.954848521