2015-10-23 45 views
1

我已閱讀關於命名變量的其他帖子,並嘗試實現答案,但仍然爲我想運行現有模型的新數據獲取太多值。這裏是工作示例代碼:r預測函數返回太多的值

set.seed(123) 
mydata <- data.frame("y"=rnorm(100,mean=0, sd = 1),"x"=c(1:100)) 

mylm <- lm(y ~ x, data=mydata) 

# ok so mylm is a model on 100 points - lets look at it and the data 
par(mfrow=c(2,2)) 
plot(mylm) 
par(mfrow=c(1,1)) 
predvals <- predict(mylm, data=mydata) 
plot(mydata$x,mydata$y) 
lines(predvals) 

這裏沒有驚喜 - 通過生成點的直線 - 都是100個觀察值。現在我生成20個具有完全相同名稱的新數據,當我通過predict()運行新數據時,我期望得到20分,而我得到100分。我錯過了什麼?讓我瘋狂....

newdata <- data.frame("y"=rnorm(20,mean=0, sd = 1), "x"=c(1:20)) 
predvals <- predict(mylm, data=newdata) 
length(newdata$y) 
length(predvals)  

# quick -not elegant - way to look at it: 
plot(predvals) 
lines(newdata$x,newdata$y) 

我需要告訴predict()只使用20點或類似的東西嗎?

回答

3

你的問題在predvals <- predict(mylm, data=newdata)

正確的電話是predict(mylm, newdata=newdata)。 R中的predict()函數採用命名參數newdata,而不是data。哈哈!

+1

哈!我知道我錯過了一些明顯的東西!非常感謝 - 這會讓我的週末變得更加快樂! – chris

+1

樂意幫忙!這發生在我們最好的:) – David

+0

謝謝!我遇到了同樣的問題,很高興在這裏找到答案。 – jochen