여러 열이있는 xts 개체에 대해 롤링 선형 회귀를 계산하는 가장 효율적인 방법을 찾는 데 문제가 있습니다. 내가 검색하고 스택 오버 플로우에 대한 몇 가지 이전의 질문을 읽었습니다.여러 열에 대한 롤링 회귀
이 question and answer은 모든 회귀에서 변하지 않은 종속 변수로 여러 회귀를 계산하려는만큼 충분하지 않습니다. I는 임의의 데이터가 예를 재생 시도 :
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
종속 변수 (요인) 다른 요인 중 하나에 대한 모든 시간과 같은 data[, 1]
와 30 명 관찰 롤링 회귀를 실행하는 것입니다. fastLm
은 표준화 된 잔차를 계산하지 않으므로 임시 객체에 30 개의 잔류 물을 저장해야합니다.
루프가 매우 느리고 xts 개체의 열 수 (요소)가 약 100 - 1,000 열로 증가하면 매우 어려워집니다. 큰 데이터 세트에서 롤백 회귀를 생성하는 데 더 효율적인 코드가 있기를 바랍니다.
회귀를 두 번 실행하지 않아도 2 배 빨라질 수 있습니다 ... 나는 귀하의 질문에 편집했습니다. –
물론 가능합니다! 유럽에서 늦었습니다. 조슈아 감사합니다. 변경 사항의 성능이 2-2.5 배 향상되었습니다. 그러나이 코드는 매일 2500 회의 관측치와 약 1,000 가지 요인의 데이터 세트에 대해 적절한 성능을 갖고 있다고 생각하십니까? 또는 위의 방법과 비교하여 rollapply를 사용하여 성능이 향상되었음을 알고 있습니까? 데이터 세트가 매우 커지면 재귀 적 최소 제곱 필터 또는 관련 항목을 적용해야합니다. –