R语言:如何正确处理colmeans结果以传入lm的predict函数获5个预测值?
问题解决:用列均值获取5个线性回归预测值
问题根源
你的模型中,自变量是每行10-14列的均值(单个数值变量),但你传入predict()的newdata存在两个核心问题:
- 变量名不匹配:模型里的自变量被自动命名为
rowMeans(df[, c(10:14)]),你的newdata没有对应名称的变量,导致predict()直接使用原数据的自变量计算,输出原数据行数(300+)的结果。 - 数据结构错误:你传入的是转置后的列均值结构,不符合
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
相关产品推荐
相关产品推荐

