Me gustaría generar matrices de covarianza (y vectores promedio) usando una ventana móvil. Pero en todos mis intentos, rollapply
apila las matrices de covarianza de cov
y se queda sin espacio preasignado (por ejemplo, si mis datos originales tienen 40 observaciones, entonces rollapply
no puede devolver más de 40 filas).¿Puede una devolución de rollapply una lista de matrices?
¿Hay alguna manera de que pueda obtener rollapply
para devolver una lista de matrices? O para devolver un data.frame
que es más grande que el data.frame
original, que puedo dividir manualmente en una lista? Mi objetivo final es tomar un panel, dividir el panel en una lista de data.frame
s individuales, calcular las covarianzas y los medios para cada marco de datos, luego usar estas listas de covarianzas y medias aguas abajo para compararlas con un grupo de individuos.
Aquí hay algunos códigos. Mi problema es que my.fun
no devolverá los datos de todas las calucificaciones de la matriz de covarianza. ¿Es mi mejor opción codificar mi propio rollapply
? O mi propio cov
que devuelve un vector que vuelvo a convertir en una matriz? ¡Gracias!
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)
¿Puedes intentar hacer tu objetivo más claro? Covarianzas entre qué exactamente? No aparece en el código ¿Y cuántos grupos imaginaste que data.list tiene? Esto produce una serie de zoológico: 'my.fun (data.list [[1]])'. ¿Es eso lo que esperabas del grupo sic == 1? –
@DWin Me gustaría una matriz de covarianza para cada sic para cada año en función de una ventana móvil de 10 años. No hay nada sagrado en tener un objeto 'zoo' aquí, ya estaba familiarizado con cómo usar un' rollapply' para generar un escalar. –