Я хотел бы сгенерировать ковариационные матрицы (и средние векторы), используя скользящее окно. Но во всех моих попыток rollapply
складывает ковариационные матрицы из cov
и исчерпает предварительно выделенное пространство (например, если мои исходные данные содержат 40 наблюдений, то rollapply
не может возвращает более 40 строк).
Есть ли способ заставить rollapply
вернуть список матриц? Или вернуть data.frame
, который больше, чем исходный data.frame
, который я могу вручную разделить на список? Моя конечная цель - взять панель, разделить панель на список отдельных data.frame
s, вычислить скользящие ковариации и средние значения для каждого фрейма данных, а затем используйте эти списки ковариаций и средних значений ниже по течению для сравнения с группой отдельных лиц
Вот некоторый код Моя проблема в том, что my.fu n
не будет возвращать данные всех вычислений ковариационной матрицы. Является ли мой лучший вариант для моего собственного rollapply
? Или мой собственный cov
, который возвращает вектор, который я конвертирую обратно в матрицу? Спасибо!
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)