2011-07-30 93 views
8

所以我有在R.如何處理R中迴歸中的殘差?

問題在lm橫截面迴歸殘差的一些問題,一些NA價值並不在於NA值本身,它的[R呈現它們的方式。

例如:

test$residuals 
#   1   2   4   5 
# 0.2757677 -0.5772193 -5.3061303 4.5102816 
test$residuals[3] 
#  4 
# -5.30613 

在這個簡單的例子,一個NA值會使殘差的一個失蹤。當我提取殘差時,我可以清楚地看到第三個索引缺失。到目前爲止這麼好,沒有投訴在這裏。問題是相應的數字向量現在縮短了一個項目,所以第三個索引實際上是第四個。我如何讓R返回這些殘差,即明確顯示NA而不是跳過索引?

test$residuals 
#   1   2   3   4   5 
# 0.2757677 -0.5772193   NA -5.3061303 4.5102816 

我需要跟蹤的所有個人殘差所以它讓我的生活更容易,如果我可以這樣,而不是提取它們。

回答

11

我剛剛發現this使用google搜索了一下。需要resid功能lmna.action=na.exclude是要走的路。

1

這是一個在lm幫助頁面上稍加修改的示例。這是殘留的定義的直接應用:

## Annette Dobson (1990) "An Introduction to Generalized Linear Models". 
## Page 9: Plant Weight Data. 
# Two NA's introduced 
weight <- c(4.17,5.58,NA,6.11,4.50,4.61,5.17,4.53,5.33,5.14, 
4.81,4.17,4.41,3.59,5.87,3.83,6.03,NA,4.32,4.69) 
group <- gl(2,10,20, labels=c("Ctl","Trt")) 
lm.D9 <- lm(weight ~ group) 
rr2 <- weight- predict(lm.D9, na.action=na.pass) 
Warning message: 
In weight - predict(lm.D9, na.action = na.pass) : 
    longer object length is not a multiple of shorter object length 
> rr2 
[1] -0.8455556 0.5644444   NA 1.0944444 -0.5155556 -0.4055556 0.1544444 
[8] -0.4855556 0.3144444 0.5044444 0.1744444 -0.4655556 -0.2255556 -1.0455556 
[15] 1.2344444 -0.8055556 1.3944444   NA -0.6955556 -0.3255556 

我認爲這將是危險的,直接修改LM對象,以便lm.D9 $殘留都將返回一個結果。

3

還有一種想法是利用與作爲lm的輸入提供的數據幀相關聯的行名稱。在這種情況下,殘差應保留源數據中的名稱。訪問示例中的殘差將爲test$residuals["4"]提供值-5.3061303,併爲test$residuals["3"]提供NA值。

但是,這並不完全回答你的問題。一種方法準確地做你的要求在獲得NA值回殘差項如下所示:

> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA) 
> Z<-lm(y~x,data=D) 
> D[names(Z$residuals),"residual"]<-Z$residuals 
> D 
    x y residual 
1 NA 2.1  NA 
2 2 3.2 -0.28 
3 3 4.9  0.55 
4 4 5.0 -0.22 
5 5 6.0 -0.09 
6 6 7.0  0.04 

如果您是基於迴歸結果做預測,可能要在lm指定na.action=na.exclude 。有關討論,請參閱na.omit的幫助結果。請注意,只需指定na.exclude實際上並不會將NA值重新放入殘差向量本身。

正如在現有答案注意到,resid(同義詞residuals)提供了一個通用的訪問功能,其中殘差將包含如果na.excludelm指定的所需NA的值。使用resid可能是更通用和更清潔的方法。在這種情況下,上述示例的代碼將更改爲:

> D<-data.frame(x=c(NA,2,3,4,5,6),y=c(2.1,3.2,4.9,5,6,7),residual=NA) 
> Z<-lm(y~x,data=D,na.action=na.exclude) 
> D$residuals<-residuals(Z) 
相關問題