我正在尝试使用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
的预测。