在R中扩大窗口数据集的PCA。

问题描述 投票:0回答:1

我试图对数据的扩展窗口进行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循环,但当循环到达最后一点时,所有的值最终将被完整的数据集取代。

任何关于如何进行的建议将是有帮助的。谢谢。

r for-loop pca
1个回答
0
投票

想通了这个问题。请看下面的代码。如果有什么错误或更有效的方法,请告诉我。

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.