You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:36:27