c00*_*ter 9 regression r missing-data
所以我在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
Run Code Online (Sandbox Code Playgroud)
在这个简单的例子中,一个NA值会使其中一个残差丢失.当我提取残差时,我可以清楚地看到第三个索引丢失.到目前为止这么好,这里没有抱怨.问题是相应的数字向量现在是一个较短的项目,所以第三个索引实际上是第四个.我怎样才能让R返回这些残差,即明确显示NA而不是跳过索引?
test$residuals
# 1 2 3 4 5
# 0.2757677 -0.5772193 NA -5.3061303 4.5102816
Run Code Online (Sandbox Code Playgroud)
我需要跟踪所有个体残差,这样如果我能用这种方式提取它们会让我的生活更轻松.
另一个想法是利用与作为 的输入提供的数据框关联的行名称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
Run Code Online (Sandbox Code Playgroud)
如果您要根据回归结果进行预测,您可能需要na.action=na.exclude在 中指定lm。请参阅帮助结果na.omit进行讨论。请注意,简单地指定na.exclude实际上并不会将 NA 值放回到残差向量本身中。
正如之前的答案中所述,resid( 的同义词residuals)提供了一个通用访问函数,其中如果na.exclude在 中指定,则残差将包含所需的 NA 值lm。使用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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9424 次 |
| 最近记录: |