笔记说明
在datacamp网站上学习“Time Series with R ”track
“Introduction to Time Series Analysis”课程 做的对应笔记。
学识有限,错误难免,还请不吝赐教。
如无特殊说明,笔记中所使用数据均来自datacamp课程
自协方差与自相关
自相关(autocorrelation or lagged correlation)用于评估时间序列数据是否依赖于其过去的数据。
假设时间序列是弱平稳的:之间的相关系数记为,函数ρ称为自相关函数(autocorrelation function, ACF)
与之类似,自协方差函数用表示
设满足弱平稳过程。
- 用样本均值估计总体均值,用样本方差估计总体方差
- 用样本自协方差函数估计总体自协方差函数,样本自协方差函数:
另外一种计算版本用替代上式中的,当n相对大而h相对小时,这两种计算方法间的差异是很小的。
(这里我感觉用n-h做分母,和协方差计算公式保持一致更加合理) - 用样本自相关函数(sample ACF)估计,样本自相关函数定义为:
用cov()函数手动计算自相关系数
设有例数为n的时间序列数据x,按照自相关函数的定义,以计算为例,我们可以手动构造计算自相关系数的成对数据,x_t0 x_t1对应x[t],x[t-1],然后用cor()函数计算,本例中n=150:
# Define x_t0 as x[-1]
x_t0 <- x[-1]
# Define x_t1 as x[-n]
x_t1 <- x[-150]
# Confirm that x_t0 and x_t1 are (x[t], x[t-1]) pairs
head(cbind(x_t0, x_t1))
# Plot x_t0 and x_t1
plot(x_t0, x_t1)
# View the correlation between x_t0 and x_t1
cor(x_t0, x_t1)
cor(x_t0, x_t1)输出为:0.7630314
用acf()函数计算自相关系数
acf(..., lag.max =1, plot = FALSE)函数可以用来计算lag为1的自相关系数:
acf(x, lag.max = 1, plot = F)
acf()函数输出中lag为1的自相关系数为0.758
可以看出我们手动计算的结果和acf()函数计算的结果略有不同。这是因为acf()使用的是用n作为分母的计算版本而手动计算利用cov()函数使用的是用n-h(这里h=1)作为分母的计算版本。
acf()函数以n作为分母的计算方法算出的自相关系数是有偏的,但是在时间序列分析中更常用(preferred)。
验证两种计算方法相差一个因子:(n-h)/n
# Confirm that difference factor is (n-1)/n
cor(x_t1, x_t0) * (n-1)/n
acf(x, lag.max = 1, plot = F)[1][[1]]
cor(x_t1, x_t0) * (n-1)/n输出结果为0.7579445.
acf(x, lag.max = 1, plot = F)[1][[1]]输出结果为0.7579761
看来除了课程中提到的计算版本分母不同以外这两种计算方法还有其他的差异导致计算结果在考虑到分母问题以后仍然有一点点微小的不同。
关于acf()函数的更多内容
acf(..., lag.max = ..., plot = FALSE)函数会计算h=0,1,2...直到lag.max参数指定值对应的自相关系数。
此外,acf()函数的plot选项默认为TRUE,可以生成自相关图,自相关图会显示各lag值对应的自相关系数,并用蓝色水平虚线表示自相关系数为0的95%置信区间边界线,如果自相关系数在两条虚线以内则表明自相关系数没有统计学意义。
例子数据:x显示出强持续性(persistence),即时间序列的值与前一测量值呈现出强相关性;y具有周期性,周期大约为4;z则没有明确的模式。
对上面三个时间序列使用acf()函数:
# View the ACF of x y z
acf(x)
acf(y)
acf(z)