Скользящая регрессия по нескольким столбцам

У меня проблема с поиском наиболее эффективного способа расчета скользящей линейной регрессии для объекта xts с несколькими столбцами. Я искал и читал несколько предыдущих вопросов здесь, в stackoverflow.

Этот вопрос и ответ близки, но, на мой взгляд, недостаточны, поскольку я хочу рассчитать множественные регрессии с неизменной зависимой переменной во всех регрессиях. Я попытался воспроизвести пример со случайными данными :

require(xts)
require(RcppArmadillo)  # Load libraries

data <- matrix(sample(1:10000, 1500), 1500, 5, byrow = TRUE)  # Random data
data[1000:1500, 2] <- NA  # insert NAs to make it more similar to true data
data <- xts(data, order.by = as.Date(1:1500, origin = "2000-01-01"))

NR <- nrow(data)  # number of observations
NC <- ncol(data)  # number of factors
obs <- 30  # required number of observations for rolling regression analysis
info.names <- c("res", "coef")

info <- array(NA, dim = c(NR, length(info.names), NC))
colnames(info) <- info.names

. Массив создается для хранения множественных переменных (остатков, коэффициентов и т. д. )по времени и по факторам.

loop.begin.time <- Sys.time()

for (j in 2:NC) {
  cat(paste("Processing residuals for factor:", j), "\n")
  for (i in obs:NR) {
    regression.temp <- fastLm(data[i:(i-(obs-1)), j] ~ data[i:(i-(obs-1)), 1])
    residuals.temp <- regression.temp$residuals
    info[i, "res", j] <- round(residuals.temp[1] / sd(residuals.temp), 4)
    info[i, "coef", j] <- regression.temp$coefficients[2]
  } 
}

loop.end.time <- Sys.time()
print(loop.end.time - loop.begin.time)  # prints the loop runtime

Как показывает цикл, идея состоит в том, чтобы запускать скользящую регрессию из 30 наблюдений с data[, 1]в качестве зависимой переменной (фактор )каждый раз против одного из других факторов. Мне нужно сохранить 30 остатков во временном объекте, чтобы стандартизировать их, поскольку fastLmне вычисляет стандартизированные остатки.

Цикл выполняется чрезвычайно медленно и становится громоздким, если количество столбцов (факторов )в объекте xts увеличивается примерно до 100 -1000 столбцов заняли бы целую вечность. Я надеюсь, что у кого-то есть более эффективный код для создания скользящих регрессий по большому набору данных.

7
задан Community 23 May 2017 в 11:44
поделиться