2013-09-28 94 views
5

我有一個多元迴歸模型。我想將原始data.frame的擬合值和殘差添加爲兩個新列。我怎樣才能做到這一點?我在R型是這樣的:在R中,如何將擬合值列添加到原始數據框?

BD_lm <- lm(y ~ x1+x2+x3+x4+x5+x6, data=BD) 
summary(BD) 

我也得到了擬合值

BD_fit<-fitted(BD_lm) 

但我想這個BD_fit值添加作爲我的原始數據BD列。我不知道如何。當我試圖撥打BD_fit時,它給了我很多數字。我正在運行一個大型的數據集,所以很難在這裏列出所有的數據集。

+0

歡迎來到SO。請閱讀[this](http://meta.stackoverflow.com/help/how-to-ask)和[this](http://stackoverflow.com/questions/5963269/how-to-make-a-great -r重現-示例/ 5963610#5963610)。也請告訴我們你已經嘗試過了。謝謝。 – Henrik

+0

查看本文相關經驗證的帖子,有助於您在迴歸使用總數據的子集時處理預測值的有用信息:https://stats.stackexchange.com/questions/11000/how-does-r-handle-missing-values- in-lm –

回答

12

假設:

fm <- lm(demand ~ Time, BOD) 

那就試試這個:

cbind(BOD, resid = resid(fm), fitted = fitted(fm)) 

或本:

BOD$resid <- resid(fm) 
BOD$fitted <- fitted(fm) 

新增:

如果您有值那麼您的擬合值和殘差將與您的數據的行數不同,這意味着上述不起作用。在這種情況下使用:na.exclude這樣的:

BOD$demand[3] <- NA # set up test data 
fm <- lm(demand ~ Time, BOD, na.action = na.exclude) 

na.exclude會自動墊的預測殘差和具有NA值,使得它們具有相同的長度與原始數據。現在,以前的行應該工作。

+0

我嘗試了你的建議,但是我得到一個錯誤:「data.frame中的錯誤(...,check.names = FALSE): 參數意味着行數不同:355027,53467」The 355027 is the我原始數據的行數和53467,我不確定它是什麼。也許問題是我的擬合值與原始數據不一樣?我仍在試圖弄清楚。 – titi

+0

閱讀此:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

@titi你有缺失的數值在BD?對於任何缺少值的記錄,您都不會得到預測結果,這會使擬合值的向量比原始數據幀更短。 –

0

儘管沒有詳細瞭解您的情況,但添加到數據框非常簡單。你可以僅僅指剛添加新列,像這樣:

df <- data.frame(var1=1:10) 
df$var2 <- 11:20 

你只需要確保您的附加數據列具有相同的長度與原有的。否則,您將無法將它們添加到數據框中。

0
BD_fit<-data.frame(BD_fit) 
BD$fit<-BD_fit[1] 
相關問題