0

我想为几年前的几只股票创建一个相关矩阵。

getSymbols(c("AAPL", "FB", "LNKD"))
close<-cbind(Cl(AAPL), Cl(FB), Cl(LNKD))
roc<-ROC(close)

这些公司都在不同的时间上市,所以我得到:

head(close)

         AAPL.Close FB.Close LNKD.Close
2007-01-03      83.80       NA         NA
2007-01-04      85.66       NA         NA
2007-01-05      85.05       NA         NA
2007-01-08      85.47       NA         NA
2007-01-09      92.57       NA         NA
2007-01-10      97.00       NA         NA

和:

tail(close)
           AAPL.Close FB.Close LNKD.Close
2013-11-04     526.75    48.22     223.72
2013-11-05     525.45    50.11     224.54
2013-11-06     520.92    49.12     220.78
2013-11-07     512.49    47.56     211.47
2013-11-08     520.56    47.53     215.17
2013-11-11     519.05    46.20     211.66

所以当我:

cor(roc)

我得到:

           AAPL.Close FB.Close LNKD.Close
AAPL.Close          1       NA         NA
FB.Close           NA        1         NA
LNKD.Close         NA       NA          1

在这种情况下,我是否被迫在所有三家公司都有股票回报历史的日期开始矩阵?

在这种情况下,那就是:

head(na.omit(close))

           AAPL.Close FB.Close LNKD.Close
2012-05-18     530.38    38.23      99.02
2012-05-21     561.28    34.03      96.84
2012-05-22     556.97    31.00     101.33
2012-05-23     570.56    32.00     103.56
2012-05-24     565.32    33.03      98.80

现在,如果我将这个想法扩展到更大的矩阵,比如 SP 500,我想摆脱历史上的 NA,而不需要取出整个列,因为这会与矩阵相混淆。有没有办法清理返回数据以便能够比较 cor 矩阵的返回?

之前有人问过这个问题的变体,但没有令人信服的答案:

“R”中的相关矩阵返回 NA 值

4

2 回答 2

1

只有为所有股票发布结果的时间范围创建一个相关矩阵才有意义,以避免扭曲的结果。

假设您有 A、B 和 C 三个公司,您的时间跨度是 2005 年到 2009 年。A 和 B 在 2005 年进行了 IPO,C 在 2007 年进行了 IPO。

如果您现在计算相关矩阵,您将在其中考虑 Corr(A,B) 的 2005 年到 2009 年的整个时间范围,该值将指示它们在繁荣和萧条期间移动的紧密程度。但是,您的 Corr(A,C) 只会在萧条时期表现出这种行为。

可以很好地观察到,股票收益在经济衰退期间表现出更强的相关性,请参阅论文:危机时期金融市场的相关性。因此,您的相关矩阵会表现出扭曲的值。

在你的位置,我会看一个时间范围,所有股票都应该有回报数字。如果内部仍然很少有间隙,我会考虑用线性近似na.approx()或样条近似na.spline()(动物园包的一部分)来关闭它们。

祝你有美好的一天。

于 2017-08-13T09:52:53.203 回答
0

这确实是 ialm 的解决方案,但听起来像你想要的

cor(roc, use = 'pairwise.complete.obs')
于 2013-11-12T19:32:14.093 回答