3 回答

TA貢獻2041條經驗 獲得超4個贊
這是在您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貢獻1830條經驗 獲得超3個贊
在lm函數的公式中,不要使用datasetname $ variablename模式引用變量。而是使用variablename + variablename ...這不會拋出警告:'newdata'有nrow(測試)行,但找到的變量有nrow(train)行。

TA貢獻1801條經驗 獲得超16個贊
解決這個問題的方法是使用以下方法:
fitCar<-lm(mpg ~ wt, mtcars) #here you use x as a namepredict(fitCar,data.frame(wt=mean(mtcars$wt)), interval="confidence")
- 3 回答
- 0 關注
- 947 瀏覽
添加回答
舉報