我试图对数据的扩展窗口进行PCA,并在扩展窗口回归中使用这些主成分来生成预测。因为我必须为多个模型做这个工作,所以我写了一个简单的PCA函数。请看下面的代码
comp_fc <- function(data_input = NULL, dep_var = NULL, type = NULL){
pca_comp <- prcomp(data_input, center = TRUE, scale = TRUE)
sum_pca <- summary(pca_comp)
print(sum_pca$importance)
pca_comp <- zoo(pca_comp$x, rownames(pca_comp$x))
reg_exp <- roll_regres(dep_var ~ pca_comp[,1] + pca_comp[,2], width = 157, do_downdates = FALSE, do_compute = c("sigmas", "r.squareds", "1_step_forecasts"))
return(reg_exp$one_step_forecasts)
}
我想在计算PCA时加入扩展窗口法。我尝试使用for循环,但当循环到达最后一点时,所有的值最终将被完整的数据集取代。
任何关于如何进行的建议将是有帮助的。谢谢。
想通了这个问题。请看下面的代码。如果有什么错误或更有效的方法,请告诉我。
comp_fc <- function(data_input = NULL, dep_var = NULL, type = NULL){
pca_exp <- list()
for(i in 157:nrow(data_input)){
pca_comp <- prcomp(data_input[1:i, ], center = TRUE, scale = TRUE)
pca_comp <- zoo(pca_comp$x, rownames(pca_comp$x))
reg_model <- lm(dep_var[1:nrow(pca_comp), ] ~ pca_comp[,1] + pca_comp[,2])
#forecast using regression
reg_fc <- as.data.frame(predict(reg_model))
reg_fc <- zoo(reg_fc, as.Date(rownames(reg_fc)))
#Add last period forecast value to list
pca_exp[[i]] <- reg_fc[i, ]
}
exp_fc <- do.call(rbind, pca_exp)
return(exp_fc)
}