基于roll包的滚动回归:提取截距、Beta值并生成规范数据框
提取滚动回归的截距与系数数据框
首先,roll_lm返回的coefficients是一个三维数组,维度为**[窗口数, 系数类型, Y变量数]**,其中第一类系数是截距(Intercept),后续依次对应各个X变量的系数。我们可以通过索引提取对应部分并转换为数据框,再按要求命名列。
步骤1:提取截距数据框
# 提取所有Y变量的截距(三维数组第2维的第1个元素) intercept_df <- as.data.frame(model_output$coefficients[, 1, ]) # 按照"Y1 Intercept"格式重命名列 colnames(intercept_df) <- paste0( toupper(substr(names(y_var), 1, 1)), # 将原Y变量名首字母大写 substr(names(y_var), 2, nchar(names(y_var))), # 保留变量名剩余字符 " Intercept" )
步骤2:提取Beta系数数据框
对于单个X变量的场景:
# 提取所有Y变量的X1系数(三维数组第2维的第2个元素) beta_df <- as.data.frame(model_output$coefficients[, 2, ]) # 按照"Y1 Coef 1"格式重命名列 colnames(beta_df) <- paste0( toupper(substr(names(y_var), 1, 1)), substr(names(y_var), 2, nchar(names(y_var))), " Coef 1" )
扩展:处理多个X变量的情况
如果你的x_var包含多个X列(如X1、X2...Xn),可以通过循环批量提取并命名:
# 获取X变量的总数 num_x_vars <- ncol(x_var) # 初始化系数数据框 beta_df <- data.frame() for (i in 1:num_x_vars) { # 提取第i个X变量的系数(截距是第1个,X系数从第2个位置开始) current_coef <- as.data.frame(model_output$coefficients[, i + 1, ]) # 按"Y1 Coef i"格式命名列 colnames(current_coef) <- paste0( toupper(substr(names(y_var), 1, 1)), substr(names(y_var), 2, nchar(names(y_var))), " Coef ", i ) # 合并到总系数数据框 beta_df <- cbind(beta_df, current_coef) }
执行完上述代码后,intercept_df即为存储所有截距的data.frame,beta_df存储所有X变量的系数,列名完全符合你的命名规范。
内容的提问来源于stack exchange,提问作者Jak Carty
相关产品推荐
相关产品推荐

