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

R语言predict函数返回全部拟合值而非单值的问题咨询

R语言lm预测返回所有拟合值而非单个预测值

问题情况

用lm()拟合线性模型后,预测单个数值时返回了训练数据的所有拟合值,复制课程代码、更换数据源均出现同样问题。期望输出为单个预测值(如手动计算的4.134015)。

错误代码及运行结果

错误代码:

DF1 <- read.table("linear.txt",header=T)
model <- lm(DF1$Payment~DF1$Claim)
newdata <-data.frame(Claim=4.5)
predict(model,newdata)

运行结果:

> DF1 <- read.table("linear.txt",header=T)
> DF1
   Claim Payment
1    2.1    2.18
2    2.4    2.06
3    2.5    2.54
4    3.2    2.61
5    3.6    3.67
6    3.8    3.25
7    4.1    4.02
8    4.2    3.71
9    4.5    4.38
10   5.0    4.45
> model <- lm(DF1$Payment~DF1$Claim)
> newdata <-data.frame(Claim=4.5)
> predict(model,newdata)
       1        2        3        4        5        6 
2.016478 2.281170 2.369401 2.987016 3.339938 3.516400 
       7        8        9       10 
3.781092 3.869323 4.134015 4.575168 
Warning message:
'newdata' had 1 row but variables found have 10 rows 

期望输出:

model$coefficients[1]+model$coefficients[2]*4.5
(Intercept) 
   4.134015 

解决方法

修改lm()的调用方式,通过data参数关联数据框,让模型识别变量名:

DF1 <- read.table("linear.txt",header=T)
# 使用data参数指定数据框,公式中直接写变量名
model <- lm(Payment~Claim, data = DF1)
newdata <- data.frame(Claim=4.5)
predict(model, newdata)

运行后会得到预期的单个预测值:

1 
4.134015 

原因说明

当使用lm(DF1$Payment~DF1$Claim)时,模型的公式接收的是独立向量,而非数据框中的变量名。predict()在newdata中找不到名为DF1$Claim的变量(newdata只有Claim),因此默认使用训练数据的自变量计算所有拟合值,同时抛出警告提示数据行数不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:52:19