Ich möchte Kovarianzmatrizen (und Mittelwertvektoren) mit einem Rollfenster erzeugen. Aber in allen meinen Versuchen stapelt rollapply
die Kovarianzmatrizen von cov
und läuft aus vor-zugeteiltem Speicherplatz (z. B. wenn meine ursprünglichen Daten 40 Beobachtungen haben, kann rollapply
nicht mehr als 40 Zeilen zurückgeben).Kann Rolllapply eine Liste von Matrizen zurückgeben?
Gibt es eine Möglichkeit, dass ich rollapply
erhalten kann, um eine Liste von Matrizen zurückzugeben? Oder eine data.frame
zurückgeben, die größer ist als die ursprüngliche data.frame
, die ich manuell in eine Liste aufteilen kann? Mein Endziel ist es, ein Panel zu nehmen, das Panel in eine Liste von Individuen einzuteilen, die rollenden Kovarianzen und Mittel für jeden Datenrahmen zu berechnen, dann diese Listen von Kovarianzen und Mitteln stromabwärts zu verwenden, um mit einer Menge Individuen zu vergleichen.
Hier ist ein Code. Mein Problem ist, dass my.fun
keine Daten von allen Kovarianzmatrix-Kalkulationen zurückgibt. Ist meine beste Option, meine eigene rollapply
zu codieren? Oder meine eigene cov
, die einen Vektor zurückgibt, den ich zurück in eine Matrix umwandeln? Vielen Dank!
library("zoo")
data.df <- data.frame(sic = rep(1:10, each = 40),
year = rep(1:40, len = 10*40),
one = rnorm(10*40),
two = 2*rnorm(10*40),
three = 3*rnorm(10*40))
data.list <- split(data.df, data.df$sic)
data.list <- lapply(data.list, zoo)
my.fun <- function(x) {
x <- x[, c("one", "two", "three")]
rollapply(x,
width = 10,
FUN = cov,
by.column = F,
align = "right")
}
cov.list <- lapply(data.list, FUN = my.fun)
Können Sie versuchen, Ihr Ziel klarer zu machen? Kovarianzen zwischen was genau? Es erscheint nicht im Code Und wie viele Gruppen haben Sie sich vorgestellt, dass data.list hat? Daraus entsteht eine Zoo-Serie: 'my.fun (data.list [[1]])'. Hast du das von der sic == 1-Gruppe erwartet? –
@DWin Ich möchte eine Kovarianzmatrix für jedes sic für jedes Jahr basierend auf einem 10-Jahres-Moving-Fenster. Es gibt nichts Heiliges daran, ein "Zoo" -Objekt hier zu haben, ich war gerade schon damit vertraut, wie man ein 'rollapply' verwendet, um einen Skalar zu erzeugen. –