你如何模拟两个相关的 AR(p) 时间序列?

机器算法验证 时间序列 数理统计 向量自回归 状态空间模型
2022-03-28 13:53:30

如果可能的话,我会对 R 中的数学框架和代码感兴趣。

如果我已经指定了两个时间序列之间的某个互相关值加上它们各自的自相关,基本上我想找出两个 AR(p) 模型的参数。

提前致谢!

1个回答

您可以按如下方式定义数据生成过程:

x1,t=ϕ11x1,t1+ϕ1px1,tp+ϵ1,t,NID(0,σ12)x2,t=ϕ21x2,t1+ϕ2px2,tp+ϵ2,t,NID(0,σ22)Cov(ϵ1,t,ϵ2,s)=σ if t=s and zero otherwise.

R 函数MASS::mvrnormmvtnorm::rmvnorm可用于从多元高斯分布生成绘图。

下面的代码从上面定义的模型生成几个系列p=1rhos并将每对系列之间的相关性存储在对象中。扰动项的协方差矩阵用值定义σ12=2,σ22=3σ=0.8.

require("mvtnorm")
set.seed(123)
sigma <- diag(c(2,3))    
sigma[1,2] <- sigma[2,1] <- 0.8
n <- 200
niter <- 1000
rhos <- rep(NA, niter)
for (i in seq_len(niter))
{
  eps <- mvtnorm::rmvnorm(n = n, mean = rep(0, 2), sigma = sigma)
  x1 <- arima.sim(n = n, model = list(ar = c(0.7)), innov = eps[,1])
  x2 <- arima.sim(n = n, model = list(ar = c(-0.4)), innov = eps[,2])  
  rhos[i] <- cor(x1, x2)
}
summary(rhos)
#    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
# 0.00732 0.13480 0.16990 0.16690 0.19990 0.31280 

可以查到两者之间的相关性x1,tx2,t当两个系列都遵循 AR(1) 过程时,由下式给出:

ρ=σ/(1ϕ11ϕ21)σ121ϕ112σ221ϕ212

对于示例的参数值,我们有:

sd1 <- sqrt(2 / (1 - 0.7^2))
sd2 <- sqrt(3 / (1 - 0.4^2))
(0.8/(1 + (0.7*0.4))) / (sd1 * sd2)
# [1] 0.1670049

这与在小型模拟练习中获得的相关性平均值一致。