Vorrei generare matrici di covarianza (e media) utilizzando una finestra a rotazione. Ma in tutti i miei tentativi, rollapply
impila le matrici di covarianza da cov
e esaurisce lo spazio pre-allocato (ad es., Se i miei dati originali hanno 40 osservazioni, allora rollapply
non può restituire più di 40 righe).È possibile rollopply restituire un elenco di matrici?
C'è un modo per ottenere rollapply
per restituire un elenco di matrici? O per restituire un data.frame
che è più grande dell'originale data.frame
, che posso dividere manualmente in un elenco? Il mio obiettivo finale è quello di prendere un pannello, dividere il pannello in un elenco di singoli data.frame
s, calcolare le covarianze e i mezzi a rotazione per ciascun frame di dati, quindi utilizzare questi elenchi di covarianze e mezzi a valle per confrontarli con un gruppo di individui.
Ecco un codice. Il mio problema è che my.fun
non restituirà i dati da tutti i calibri di matrice di covarianza. È la mia migliore opzione per codificare il mio rollapply
? O il mio cov
che restituisce un vettore convertito in una matrice? Grazie!
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)
Puoi provare a rendere più chiaro il tuo obiettivo? Covarianze tra cosa esattamente? Non appare nel codice E quanti gruppi hai immaginato che data.list abbia? Questo produce una serie di zoo: 'my.fun (data.list [[1]])'. È quello che ti aspettavi dal gruppo sic == 1? –
@DWin Vorrei una matrice di covarianza per ogni sic per ogni anno in base a una finestra mobile di 10 anni. Non c'è nulla di sacro nell'avere un oggetto 'zoo' qui, avevo già familiarità con l'uso di un' rollapply' per generare uno scalare. –