为什么自举相关性围绕零旋转,而原始相关性≈ 0.52≈0.52?

机器算法验证 r 时间序列 引导程序
2022-03-26 20:59:30

我有两个包含 132 个日志返回的数据系列。一个用于 EURUSD,另一个用于 NZDUSD。head()函数向您展示了某些数据的外观。两者之间的相关系数,由cor()0.51789120.5178912

为了更好地了解相关系数,我通过cor()在不同的 132 个长样本上运行 1000 次来引导它。我在循环中运行它并euro.nzd.corr在每次迭代时更新。这是我正在使用的 R 代码:

head(euro)
[1] -0.001257862 -0.011637970  0.002428757  0.003602590 -0.003457319 -0.002012728
head(nzd)
[1]  0.008773255 -0.007744927  0.005498693  0.005642524 -0.000896363  0.003449576
cor(euro,nzd)
[1] 0.5178912
euro.nzd.corr <- numeric(1000)
for(i in 1:1000){
euro.nzd.corr[i] = cor(euro[sample(132,132,replace=TRUE)],nzd[sample(132,132,replace=TRUE)])
}
plot(density(euro.nzd.corr), lwd=3, col="steelblue")

获得数据后,我绘制密度图,并得到以下信息:

密度

自举数据的平均值并且大部分分布在之间。的初始结果到哪里去了?我该怎么办?最好得出结论这两个变量是不相关的,而不是相关的,系数我是否犯了任何编码错误,或者应用的方法只是有缺陷?00.30.3cor()0.51789120.52

1个回答

这有一个明显的原因:您分别从两个系列中取样,从而破坏了任何相关性。您可能想要对对进行采样,而不是在每个系列中进行观察,例如

index <- sample(132,132, replace=TRUE)
euro.nzd.corr[i] = cor(euro[index], nzd[index])

修复您的代码应该可以让您恢复以 .5 为中心的分布,但您可能需要在依赖这些推论之前查找一些文献,因为有一些关于引导相关性的细节。正如@NickCox 指出的那样,两组观察结果都是时间序列这一事实也造成了进一步的困难。你应该能够找到很多关于这一切的材料。