我正在尝试使用R创建一个线性模型,并使用它来预测一些值。主题是棒球统计数据。如果我这样做:

obp <- lm(offense$R ~ offense$OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")


我收到错误消息:警告消息:“ newdata”有1行,但是找到的变量有20行。

但是,如果我这样做:

attach(offense)
obp <- lm(R ~ OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")


它按预期工作,我得到了一个结果。两者有什么区别?如果我只打印OBP和encen $ OBP,它们看起来是一样的。

最佳答案

在第一种情况下,如果打印模型,则会得到以下信息:

Call:
lm(formula = offense$R ~ offense$OBP)

Coefficients:
(Intercept)  offense$OBP
    -0.1102       0.5276


但是在第二个中,您得到以下信息:

Call:
lm(formula = R ~ OBP)

Coefficients:
(Intercept)          OBP
    -0.1102       0.5276


查看系数的名称。当使用newdata=data.frame(OBP=0.5)创建新数据时,这对于第一个模型而言实际上没有任何意义,因此将忽略新数据,并且仅使用训练数据获得预测值。使用offense$R ~ offense$OBP时,公式的每一侧只有两个向量,没有与data.frame关联的名称。

最好的方法是:

obp = lm(R ~ OBP, data=offense)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")


然后您将获得正确的结果,即OBP=0.5的预测。

08-24 15:52