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值将使残差之一丢失。当我提取残差时,我可以清楚地看到第三个索引丢失。到目前为止一切顺利,这里没有任何抱怨。问题是对应的数字向量现在短了一项,所以第三个索引实际上是第四个。我怎样才能让 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 值恢复为残差的方法:

> 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

如果您正在根据回归结果进行预测,您可能需要na.action=na.excludelm. 请参阅帮助结果进行na.omit讨论。请注意,简单地指定na.exclude实际上并没有将 NA 值放回残差向量本身。

如先前答案中所述,resid(的同义词)提供了一个通用访问函数,如果在 中指定,residuals残差将包含所需的 NA 值。使用可能是更通用和更清洁的方法。在这种情况下,上述示例的代码将更改为: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 对象以使 lm.D9$residual 返回该结果是危险的。

于 2011-07-30T14:02:09.803 回答