我有一个xts时间序列对象:
head(mtrx)
ADS.DE.Close ALV.DE.Close BAS.DE.Close BAYN.DE.Close BEI.DE.Close BMW.DE.Close CBK.DE.Close CON.DE.Close DAI.DE.Close
2007-12-28 01:00:00 51.26 147.95 101.41 62.53 53.00 42.35 21.04 86.06 66.50
2008-01-02 01:00:00 50.00 145.92 100.94 61.45 52.39 42.73 20.75 83.76 64.68
2008-01-03 01:00:00 50.09 144.93 101.60 61.71 51.18 42.09 20.48 81.74 62.91
2008-01-04 01:00:00 49.81 142.08 102.17 62.43 51.02 40.90 20.42 75.28 59.17
2008-01-07 01:00:00 49.51 140.06 104.20 63.50 51.15 41.98 20.48 73.99 58.63
2008-01-08 01:00:00 48.30 139.88 103.97 65.08 50.95 42.00 20.25 75.43 57.88
DB1.DE.Close DBK.DE.Close DPW.DE.Close DTE.DE.Close EOAN.DE.Close FME.DE.Close FRE.DE.Close HEI.DE.Close HEN3.DE.Close
2007-12-28 01:00:00 135.75 77.81 23.51 15.02 145.59 36.69 56.00 72.86 38.43
2008-01-02 01:00:00 128.63 76.82 23.21 14.90 143.36 36.10 55.80 71.14 37.95
2008-01-03 01:00:00 123.85 76.28 22.67 14.90 146.18 36.34 56.00 69.90 37.41
2008-01-04 01:00:00 118.48 75.91 22.87 15.00 147.85 36.50 55.63 68.60 37.17
2008-01-07 01:00:00 114.59 75.47 22.70 15.43 150.97 37.12 55.82 65.30 36.67
2008-01-08 01:00:00 123.28 74.90 24.15 15.44 149.21 37.72 57.13 64.61 36.86
IFX.DE.Close LHA.DE.Close LIN.DE.Close LXS.DE.Close MRK.DE.Close MUV2.DE.Close RWE.DE.Close SAP.DE.Close SDF.DE.Close
2007-12-28 01:00:00 8.07 18.22 90.45 33.60 88.30 132.94 95.68 35.53 162.75
2008-01-02 01:00:00 8.13 18.20 90.21 33.22 87.45 132.76 94.96 34.88 167.35
2008-01-03 01:00:00 7.97 17.75 90.90 32.46 86.15 131.94 97.84 34.53 170.44
2008-01-04 01:00:00 7.68 17.35 94.88 31.55 86.07 131.91 97.41 34.12 165.75
2008-01-07 01:00:00 7.36 17.46 95.64 30.45 85.99 131.22 100.31 32.90 163.99
2008-01-08 01:00:00 7.34 17.60 95.90 30.31 89.03 129.94 98.78 33.04 170.66
SIE.DE.Close TKA.DE.Close VOW3.DE.Close
2007-12-28 01:00:00 105.49 38.35 100.00
2008-01-02 01:00:00 103.97 38.37 99.15
2008-01-03 01:00:00 102.82 38.30 96.55
2008-01-04 01:00:00 100.10 36.58 94.10
2008-01-07 01:00:00 98.60 36.46 93.60
2008-01-08 01:00:00 100.41 37.40 94.65
我想计算滚动(30天)平均成对相关性并尝试以下方法:
cor.mean <- function(x) {
rval <- cor(x)
return(mean(rval[lower.tri(rval)]))
}
cor.roll <- rollapply(mtrx,width=30,FUN="cor.mean") #doesn't work
不幸的是,我得到以下结果,而不是获得结果的一个时间列:
head(cor.roll,40)
ADS.DE.Close ALV.DE.Close BAS.DE.Close BAYN.DE.Close BEI.DE.Close BMW.DE.Close CBK.DE.Close CON.DE.Close DAI.DE.Close
2007-12-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-02 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-03 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-09 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-10 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-11 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-14 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-15 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-16 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-17 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-18 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-21 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-22 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-23 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-24 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-25 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-29 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-30 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-31 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-01 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-05 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-06 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-11 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-12 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-13 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-14 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-15 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-18 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-19 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-20 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-21 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-22 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-25 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
DB1.DE.Close DBK.DE.Close DPW.DE.Close DTE.DE.Close EOAN.DE.Close FME.DE.Close FRE.DE.Close HEI.DE.Close HEN3.DE.Close
2007-12-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-02 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-03 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-09 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-10 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-11 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-14 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-15 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-16 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-17 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-18 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-21 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-22 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-23 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-24 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-25 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-29 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-30 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-31 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-01 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-05 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-06 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-11 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-12 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-13 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-14 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-15 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-18 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-19 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-20 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-21 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-22 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-25 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
IFX.DE.Close LHA.DE.Close LIN.DE.Close LXS.DE.Close MRK.DE.Close MUV2.DE.Close RWE.DE.Close SAP.DE.Close SDF.DE.Close
2007-12-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-02 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-03 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-09 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-10 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-11 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-14 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-15 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-16 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-17 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-18 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-21 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-22 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-23 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-24 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-25 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-28 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-29 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-30 01:00:00 NA NA NA NA NA NA NA NA NA
2008-01-31 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-01 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-04 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-05 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-06 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-07 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-08 01:00:00 NA NA NA NA NA NA NA NA NA
2008-02-11 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-12 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-13 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-14 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-15 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-18 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-19 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-20 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-21 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-22 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2008-02-25 01:00:00 NaN NaN NaN NaN NaN NaN NaN NaN NaN
SIE.DE.Close TKA.DE.Close VOW3.DE.Close
2007-12-28 01:00:00 NA NA NA
2008-01-02 01:00:00 NA NA NA
2008-01-03 01:00:00 NA NA NA
2008-01-04 01:00:00 NA NA NA
2008-01-07 01:00:00 NA NA NA
2008-01-08 01:00:00 NA NA NA
2008-01-09 01:00:00 NA NA NA
2008-01-10 01:00:00 NA NA NA
2008-01-11 01:00:00 NA NA NA
2008-01-14 01:00:00 NA NA NA
2008-01-15 01:00:00 NA NA NA
2008-01-16 01:00:00 NA NA NA
2008-01-17 01:00:00 NA NA NA
2008-01-18 01:00:00 NA NA NA
2008-01-21 01:00:00 NA NA NA
2008-01-22 01:00:00 NA NA NA
2008-01-23 01:00:00 NA NA NA
2008-01-24 01:00:00 NA NA NA
2008-01-25 01:00:00 NA NA NA
2008-01-28 01:00:00 NA NA NA
2008-01-29 01:00:00 NA NA NA
2008-01-30 01:00:00 NA NA NA
2008-01-31 01:00:00 NA NA NA
2008-02-01 01:00:00 NA NA NA
2008-02-04 01:00:00 NA NA NA
2008-02-05 01:00:00 NA NA NA
2008-02-06 01:00:00 NA NA NA
2008-02-07 01:00:00 NA NA NA
2008-02-08 01:00:00 NA NA NA
2008-02-11 01:00:00 NaN NaN NaN
2008-02-12 01:00:00 NaN NaN NaN
2008-02-13 01:00:00 NaN NaN NaN
2008-02-14 01:00:00 NaN NaN NaN
2008-02-15 01:00:00 NaN NaN NaN
2008-02-18 01:00:00 NaN NaN NaN
2008-02-19 01:00:00 NaN NaN NaN
2008-02-20 01:00:00 NaN NaN NaN
2008-02-21 01:00:00 NaN NaN NaN
2008-02-22 01:00:00 NaN NaN NaN
2008-02-25 01:00:00 NaN NaN NaN
计算平均成对相关性的函数似乎在整个时间序列上都能正常工作:
cor.mean(mtrx)
[1] 0.34918
所以问题似乎与rollapply
。
我的问题
我做错了什么以及如何解决这个问题?谢谢
答案 0 :(得分:4)
以不同方式使用rollapply
怎么样?由于您没有提供完整的数据集,请在此演示我的意思:
set.seed(123)
m <- matrix(rnorm(100), ncol = 10)
rollapply(1:nrow(m), 5, function(x) cor.mean(m[x,]))
[1] -0.080029692 -0.038168840 -0.058443824 0.005699772 -0.014459878 -0.021569173
正如我刚才想到的那样,你也可以按原来的方式使用这个功能,但是设置by.column = FALSE
rollapply(m,width=5,FUN="cor.mean", by.column = FALSE)
[1] -0.080029692 -0.038168840 -0.058443824 0.005699772 -0.014459878 -0.021569173
检查结果是否符合您的预期