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

R语言:如何正确处理colmeans结果以传入lm的predict函数获5个预测值?

问题解决:用列均值获取5个线性回归预测值

问题根源

你的模型中,自变量是每行10-14列的均值(单个数值变量),但你传入predict()的newdata存在两个核心问题:

  1. 变量名不匹配:模型里的自变量被自动命名为rowMeans(df[, c(10:14)]),你的newdata没有对应名称的变量,导致predict()直接使用原数据的自变量计算,输出原数据行数(300+)的结果。
  2. 数据结构错误:你传入的是转置后的列均值结构,不符合predict()要求的「每行对应一个预测输入」的数据框格式。

解决方案

方法1:先给自变量命名,重新拟合模型(推荐)

先在数据框中新增一列存储每行的10-14列均值,用规范的变量名拟合模型,后续预测更清晰:

# 新增列存储每行的10-14列均值
df$row_avg <- rowMeans(df[, 10:14], na.rm = TRUE)
# 拟合线性模型
fit <- lm(Y ~ row_avg, data = df)

# 计算10-14列的列均值(共5个值)
col_avgs <- colMeans(df[, 10:14], na.rm = TRUE)
# 构建符合要求的newdata:数据框,列名和模型自变量一致
new_data <- data.frame(row_avg = col_avgs)
# 生成5个预测值
predict(fit, newdata = new_data)

方法2:不重新拟合,匹配原模型的变量名

如果不想重新拟合模型,可以先查看原模型的自变量名称,再构建对应列名的newdata:

# 查看模型的自变量名称(输出的第二个元素)
names(coef(fit))
# 示例输出:"(Intercept)" "rowMeans(df[, c(10:14)])"

# 计算列均值
col_avgs <- colMeans(df[, 10:14], na.rm = TRUE)
# 构建newdata,列名必须和模型自变量完全一致
new_data <- data.frame(`rowMeans(df[, c(10:14)])` = col_avgs)
# 生成预测值
predict(fit, newdata = new_data)

说明

两种方法都能得到5个基于列均值的预测值,方法1的变量名更直观,后续维护和扩展更方便。

内容的提问来源于stack exchange,提问作者Ricardo Francois

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:06:20