3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是在您data和您之間使用不同名稱的問題,newdata而不是使用向量或數(shù)據(jù)幀之間的問題。
當(dāng)您使用該lm函數(shù)擬合模型然后用于predict進(jìn)行預(yù)測時(shí),predict嘗試在您的上查找相同的名稱newdata。在您的第一個(gè)案例名稱x沖突,mtcars$wt因此您得到警告。
在這里看到我說的一個(gè)例子:
這是你做的,沒有得到錯(cuò)誤:
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進(jìn)行預(yù)測newdata。這樣你就不會(huì)得到任何警告,而這正是你所期望的。
讓我們看看當(dāng)我適應(yīng)模型時(shí)將名稱更改為其他內(nèi)容時(shí)會(huì)發(fā)生什么:
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
我現(xiàn)在做的唯一的事情就是更改名稱x擬合模型的時(shí)候b,然后預(yù)測使用該名稱x的newdata。正如您所看到的,我遇到了與您的問題相同的錯(cuò)誤。
希望現(xiàn)在很清楚!

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
在lm函數(shù)的公式中,不要使用datasetname $ variablename模式引用變量。而是使用variablename + variablename ...這不會(huì)拋出警告:'newdata'有nrow(測試)行,但找到的變量有nrow(train)行。

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
解決這個(gè)問題的方法是使用以下方法:
fitCar<-lm(mpg ~ wt, mtcars) #here you use x as a namepredict(fitCar,data.frame(wt=mean(mtcars$wt)), interval="confidence")
- 3 回答
- 0 關(guān)注
- 1937 瀏覽
添加回答
舉報(bào)