3 回答
TA贡献1827条经验 获得超9个赞
这是在您data和您之间使用不同名称的问题,newdata而不是使用向量或数据帧之间的问题。
当您使用该lm函数拟合模型然后用于predict进行预测时,predict尝试在您的上查找相同的名称newdata。在您的第一个案例名称x冲突,mtcars$wt因此您得到警告。
在这里看到我说的一个例子:
这是你做的,没有得到错误:
a <- mtcars$mpg
x <- mtcars$wt
#here you use x as a name
fitCar <- lm(a ~ x)
#here you use x again as a name in newdata.
predict(fitCar, data.frame(x = mean(x)), interval = "confidence")
fit lwr upr
1 20.09062 18.99098 21.19027
在这种情况下,您可以使用名称x来拟合模型,并使用您的名称x进行预测newdata。这样你就不会得到任何警告,而这正是你所期望的。
让我们看看当我适应模型时将名称更改为其他内容时会发生什么:
a <- mtcars$mpg
#name it b this time
b <- mtcars$wt
fitCar <- lm(a ~ b)
#here I am using name x as previously
predict(fitCar, data.frame(x = mean(x)), interval = "confidence")
fit lwr upr
1 23.282611 21.988668 24.57655
2 21.919770 20.752751 23.08679
3 24.885952 23.383008 26.38890
4 20.102650 19.003004 21.20230
5 18.900144 17.771469 20.02882
Warning message:
'newdata' had 1 row but variables found have 32 rows
我现在做的唯一的事情就是更改名称x拟合模型的时候b,然后预测使用该名称x的newdata。正如您所看到的,我遇到了与您的问题相同的错误。
希望现在很清楚!
TA贡献1796条经验 获得超7个赞
在lm函数的公式中,不要使用datasetname $ variablename模式引用变量。而是使用variablename + variablename ...这不会抛出警告:'newdata'有nrow(测试)行,但找到的变量有nrow(train)行。
TA贡献1868条经验 获得超4个赞
解决这个问题的方法是使用以下方法:
fitCar<-lm(mpg ~ wt, mtcars) #here you use x as a namepredict(fitCar,data.frame(wt=mean(mtcars$wt)), interval="confidence")
- 3 回答
- 0 关注
- 1817 浏览
添加回答
举报