knitr::opts_chunk$set(echo = TRUE, warning = F, message = F)
多元时间序列分析的目的可以概括为分析不同时间序列的动态相关性, 从而得到单元序列分析更准确的预测。首先,我们生成k = 3个时间序列, y1,y2,y3 , 每个序列长度T为500。从单元时间序列分析得知,分析的重点在残差,即矫正过的时间序列,比较宽松但是很实际的假设是时间序列是一个white noise, 所以这里模拟的序列从简单出发也是white noise。 假定我们已经知道三个序列的Covariance Matrix cm 为
temp = matrix(c(1.2, -0.3, 0.8, -.3, .85, 1.45, .8, 1.45, .68), 3, 3)
colnames(temp) = c("z1","z2", "z3")
rownames(temp) = colnames(temp)
temp
三个时间序列的平均数 mn=(0,0,0)′ , 那么我们可以模拟得到这个三时间序列
require(mvtnorm)
cm = matrix(c(1.2, -0.3, 0.1, -.3, 1.5, 0.2, .1, .2, .68),3,3)
mn = c(0, 0, 0)
set.seed(1000) # for replication
zr = rmvnorm(500, mean = mn, sigma = cm)
colnames(zr) = c("z1","z2", "z3")
dim(zr)
head(zr, n = 5)
var(zr) # check covariance matrix
apply(zr, 2, mean) # check mean
我们可以从下图中看到,很明显,他们都是stationary的。 因为先验的设定了他们的covariance和mean,他们的走势没有特别相似或不相似。
library(MTS)
MTSplot(zr)
很自然,我们会考虑到这些数列和自己的lag value 以及其他序列的lag vlaue 是否确有联系,这个问题可以用cross covariance/correlation matrices 中找到提示, 这两个matrices,相对于lag ℓ , 依序为如下定义:
Γℓ^=1T−1∑t=ℓ+1T(