2011-07-30 4 views
8

だから私はR.Rの回帰における残差のNAsをどのように扱うのですか?

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値は、残差のいずれかが欠けて行くようになります。残差を抽出すると、3番目の指標がはっきりとわかることがわかります。これまでのところ、とても良い、ここでの苦情はありません。問題は、対応する数値ベクトルが1項目短くなり、3番目のインデックスが実際に4番目であることです。どのようにしてRにこれらの残差を返すことができますか?つまり、インデックスをスキップする代わりに明示的にNAを表示しますか?

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

私はこの方法の代わりにそれらを取り出すことができれば、それは私の人生ははるかに容易になるだろうように、すべての個々の残差を追跡する必要があります。

答えて

11

ちょっと深くグーグルでグーグルが見つかったばかりです。thislmresidの機能はna.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.D9 $の残留は、その結果を返しますように、直接のLMオブジェクトを変更するために危険なことだと思う:これは、残留の定義を直接適用です。

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 

あなたは回帰結果に基づいて予測を行っている場合は、lmna.action=na.excludeを指定することもできます。詳細はna.omitのヘルプ結果を参照してください。単にna.excludeを指定しても、実際にNA値は残差ベクトル自体に戻されません。

前の回答で述べたように、residresidualsの同義語)は、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) 
関連する問題