Ich habe eine xts der jährlichen Daten. Ich versuche, die Rangkorrelation zwischen jedem Jahr zu erhalten. Zum Beispiel ist dies eine Teilmenge meiner xts:Wie berechnet man die rollende Korrelation zwischen Zeilen in einem xts?
> yearlyRanks[16:20,45:55]
35881 35880 42261 33445 46087 31486 8981 7687 8203 8202 41383
2009-12-31 8 9 19 8 18 18 16 4 16 16 20
2010-12-31 4 3 20 6 19 2 17 17 17 17 21
2011-12-31 3 4 21 3 20 1 18 18 18 18 22
2012-12-31 6 6 22 5 21 19 19 19 19 19 4
2013-12-31 7 7 3 4 22 20 20 20 20 20 2
Ich mag würde die Korrelation zwischen den Reihen in jedem Jahr mit dem Vorjahr kennen. (Der Versuch, zu sagen, wie gut diese Rangposition dieses Jahr von der letztjährigen vorhergesagt wurde.)
Ich versuche, diese zu nutzen:
yearlyCors <- rollapplyr(coredata(yearlyRanks), width = 2, function(x) cor(x[1], x[2], use = 'n'))
Aber es dauert ewig, und es scheint nicht zu funktionieren. Ich denke, es ist, weil ich es eine Reihe von 2 Zeilen übergeben, so will es 2 Werte zurückgeben, aber ich erwarte nur 1. (Ist das sinnvoll?)
Irgendwelche Ideen, wie ich das tun würde?
EDIT:
Nur klar sein, das ist, was ich von dieser Teilmenge wünschen würde:
> test <- yearlyRanks[16:20,45:55]
> c(cor(test[1,], test[2,]), cor(test[2,], test[3,]), cor(test[3,], test[4,]), cor(test[4,], test[5,]))
[1] 0.4679246 0.9930253 0.4854528 0.7193598
EDIT:
Was ich will, ist die diag() + 1 der Korrelationsmatrix. Hier ist die Korrelationsmatrix (der transponieren):
> cor(t(test))
2009-12-31 2010-12-31 2011-12-31 2012-12-31 2013-12-31
2009-12-31 1.00000000 *0.4679246* 0.4716995 0.3722922 0.08786426
2010-12-31 0.46792463 1.0000000 *0.9930253* 0.4654688 0.17192856
2011-12-31 0.47169948 0.9930253 1.0000000 *0.4854528* 0.20237689
2012-12-31 0.37229225 0.4654688 0.4854528 1.0000000 *0.71935975*
2013-12-31 0.08786426 0.1719286 0.2023769 0.7193598 1.00000000
Sie können die Sterne-Werte zu sehen sind die, die ich will. Gibt es eine Möglichkeit, auf diag + 1 zuzugreifen (wenn Sie folgen)?
Slick Verwendung von 'rollapply' - thx zum Teilen – FXQuantTrader