我想为几年前的几只股票创建一个相关矩阵。
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,我想摆脱历史上的NAs,而不是将整列作为矩阵的混乱。有没有办法清理返回数据,以便能够比较cor矩阵的回报?
这个问题的变种之前已经被问过,没有一个有说服力的答案:
答案 0 :(得分:1)
只有在所有股票发布结果以避免扭曲结果的时间范围内创建相关矩阵才有意义。
假设你有三家公司A,B和C,你的时间是2005年到2009年.A&amp; B于2005年首次公开募股,C于2007年首次公开募股。
如果您现在计算相关矩阵,您将考虑Corr(A,B)2005年至2009年的整个时间长度,该值将表明它们在繁荣期和萧条期间的移动程度。然而,你的Corr(A,C)只会表现出在萧条时期的行为。
很明显,在经济衰退期间,股票收益率显示出更强的相关性,见Paper: Correlation of financial markets in times of crisis。因此,您的相关矩阵会显示失真的值。
在你的位置,我会看一下所有股票应该有回报数据的时间。如果内部的间隙仍然很少,我会考虑使用线性近似na.approx()
或样条近似na.spline()
(动物园包的一部分)来关闭它们。
祝你有个美好的一天。
答案 1 :(得分:0)
这真的是ialm的解决方案,但听起来像你想要的
cor(roc, use = 'pairwise.complete.obs')