R:构建VAR滞后结构

时间:2018-07-15 19:35:15

标签: r time-series forecasting autoregressive-models

我正在搜索可以创建VAR(p)模型的滞后结构的函数或代码,因为我需要它在其上运行其他一些函数。我已经编写了一个在单变量情况下创建一个时间序列的滞后结构矩阵的函数,但是我不知道为多元情况编写一个函数。还是在R中有任何实现?

一个简短的可重现示例将是以下项的3维VAR:

Y <- matrix(1:30, ncol=3)

并假设我要构造3维VAR(2)模型的滞后矩阵

编辑

最终目标是使用包glmnet

估计5维VAR(20)套索回归

1 个答案:

答案 0 :(得分:0)

  

我正在搜索可以创建VAR(p)模型的滞后结构的函数或代码,...

这是一种方法

n <- 1000
p <- 3
set.seed(1)
Y <- matrix(rnorm(n * p), ncol = p)
X <- cbind(lag_1 = rbind(NA, head(Y, -1)), lag_2 = rbind(NA, NA, head(Y, -2)))
head(X)
#R         [,1]    [,2]     [,3]    [,4]    [,5]    [,6]
#R [1,]      NA      NA       NA      NA      NA      NA
#R [2,] -0.6265  1.1350 -0.88615      NA      NA      NA
#R [3,]  0.1836  1.1119 -1.92225 -0.6265  1.1350 -0.8861
#R [4,] -0.8356 -0.8708  1.61970  0.1836  1.1119 -1.9223
#R [5,]  1.5953  0.2107  0.51927 -0.8356 -0.8708  1.6197
#R [6,]  0.3295  0.0694 -0.05585  1.5953  0.2107  0.5193
head(Y)
#R         [,1]    [,2]     [,3]
#R [1,] -0.6265  1.1350 -0.88615
#R [2,]  0.1836  1.1119 -1.92225
#R [3,] -0.8356 -0.8708  1.61970
#R [4,]  1.5953  0.2107  0.51927
#R [5,]  0.3295  0.0694 -0.05585
#R [6,] -0.8205 -1.6626  0.69642

您可以使用它来执行以下条件对数似然估计

 
colnames(X) <- c(paste0("X_lag_1", 1:3), paste0("X_lag_2", 1:3))
lm.fit(x = X[-(1:2), ], y = Y[-(1:2), ])$coefficients
#R               [,1]       [,2]     [,3]
#R X_lag_11 -0.041859  0.0048129 -0.02624
#R X_lag_12 -0.013648  0.0005279 -0.02306
#R X_lag_13  0.037641 -0.0087508  0.05377
#R X_lag_21 -0.033324  0.0637967 -0.05455
#R X_lag_22 -0.007617  0.0384764 -0.08435
#R X_lag_23  0.006812 -0.0420907 -0.02983

更新

您可以创建一个执行此操作的功能

n <- 1000
p <- 2
set.seed(1)
Y <- matrix(rnorm(n * p), ncol = p)

lag_series <- function(Y, max_lag)
  do.call(cbind, lapply(1:max_lag, function(i)
    do.call(rbind, c(as.list(rep(NA, i)), list(head(Y, -i))))))

head(lag_series(Y, 1))
#R            [,1]        [,2]
#R [1,]         NA          NA
#R [2,] -0.6264538  1.13496509
#R [3,]  0.1836433  1.11193185
#R [4,] -0.8356286 -0.87077763
#R [5,]  1.5952808  0.21073159
#R [6,]  0.3295078  0.06939565
head(lag_series(Y, 2))
#R          [,1]        [,2]       [,3]       [,4]
#R [1,]         NA          NA         NA         NA
#R [2,] -0.6264538  1.13496509         NA         NA
#R [3,]  0.1836433  1.11193185 -0.6264538  1.1349651
#R [4,] -0.8356286 -0.87077763  0.1836433  1.1119318
#R [5,]  1.5952808  0.21073159 -0.8356286 -0.8707776
#R [6,]  0.3295078  0.06939565  1.5952808  0.2107316
head(lag_series(Y, 3))
#R             [,1]        [,2]       [,3]       [,4]       [,5]       [,6]
#R [1,]         NA          NA         NA         NA         NA         NA
#R [2,] -0.6264538  1.13496509         NA         NA         NA         NA
#R [3,]  0.1836433  1.11193185 -0.6264538  1.1349651         NA         NA
#R [4,] -0.8356286 -0.87077763  0.1836433  1.1119318 -0.6264538  1.1349651
#R [5,]  1.5952808  0.21073159 -0.8356286 -0.8707776  0.1836433  1.1119318
#R [6,]  0.3295078  0.06939565  1.5952808  0.2107316 -0.8356286 -0.8707776

#...