9

そのため、R の断面回帰NAの残差の値に問題があります。lm

問題はNA値そのものではなく、R がそれらを提示する方法です。

例えば:

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

この単純な例では、NA値によって残差の 1 つが失われます。残差を抽出すると、3 番目のインデックスが欠落していることがはっきりとわかります。これまでのところ、ここで苦情はありません。問題は、対応する数値ベクトルが 1 項目短くなったため、3 番目のインデックスが実際には 4 番目になることです。R にこれらの残差を返すようにするにはどうすればよいですか。つまり、NAインデックスをスキップする代わりに明示的に表示するにはどうすればよいですか?

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

個々の残差をすべて追跡する必要があるため、代わりにこの方法でそれらを抽出できれば、私の人生はずっと楽になります。

4

3 に答える 3

16

私はこのグーグルをもう少し深く見つけました。withのresid関数は、行く方法です。lmna.action=na.exclude

于 2011-07-30T11:11:35.960 に答える
4

さらに別のアイデアは、 への入力として提供されるデータ フレームに関連付けられた行名を利用することlmです。その場合、残差はソース データの名前を保持する必要があります。あなたの例から残差にアクセスすると、 の場合は -5.3061303 、 の場合はtest$residuals["4"]NAの値が得られますtest$residuals["3"]

ただし、これはあなたの質問に正確に答えるものではありません。NA値を残差に戻すという点で、あなたが求めたことを正確に行うための1つのアプローチを以下に示します。

> 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

回帰結果に基づいて予測を行う場合は、 in を指定することをお勧めしna.action=na.excludeますlm。ディスカッションについては、ヘルプ結果を参照してくださいna.omit。単純に指定na.excludeしても、実際には NA 値が残差ベクトル自体に戻されるわけではないことに注意してください。

以前の回答で述べたように、resid(の同義語) は、で指定されているresiduals場合、残差に目的の NA 値が含まれる汎用アクセス関数を提供します。Usingはおそらくより一般的で、よりクリーンなアプローチです。その場合、上記の例のコードは次のように変更されます。na.excludelmresid

> 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)
于 2011-07-30T21:13:33.770 に答える
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$residual がその結果を返すように lm オブジェクトを直接変更するのは危険だと思います。

于 2011-07-30T14:02:09.803 に答える