Ste*_*owe 6 r prediction predict dataframe lm
我正在尝试使用R来创建线性模型并使用它来预测某些值.主题是棒球统计数据.如果我这样做:
obp <- lm(offense$R ~ offense$OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")
Run Code Online (Sandbox Code Playgroud)
我收到错误:警告消息:'newdata'有1行,但找到的变量有20行.
但是,如果我这样做:
attach(offense)
obp <- lm(R ~ OBP)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")
Run Code Online (Sandbox Code Playgroud)
它按预期工作,我得到一个结果.两者有什么区别?如果我只打印OBP并攻击$ OBP,它们看起来一样.
在第一种情况下,如果您打印模型,则会得到此信息:
Call:
lm(formula = offense$R ~ offense$OBP)
Coefficients:
(Intercept) offense$OBP
-0.1102 0.5276
Run Code Online (Sandbox Code Playgroud)
但在第二个,你得到这个:
Call:
lm(formula = R ~ OBP)
Coefficients:
(Intercept) OBP
-0.1102 0.5276
Run Code Online (Sandbox Code Playgroud)
看一下系数的名称.当您创建新数据时newdata=data.frame(OBP=0.5),对第一个模型没有意义,因此忽略newdata并且您只能获得训练数据的预测值.使用时offense$R ~ offense$OBP,公式每侧只有两个向量,没有与a关联的名称data.frame.
最好的方法是:
obp = lm(R ~ OBP, data=offense)
predict(obp, newdata=data.frame(OBP=0.5), interval="predict")
Run Code Online (Sandbox Code Playgroud)
你会得到正确的结果,预测OBP=0.5.