首页 > 解决方案 > 为什么 R 会删除一些残差以及如何避免它?

问题描述

我在 R 中创建线性模型并测试它们的模型假设。

我注意到,当我创建我的模型时,R 删除了一些残差,给出了这个:

(2 observations deleted due to missingness)

由于 x 和 y 的长度不同,这使我无法检查自变量和残差之间的关系以及任何进一步的分析。

编辑: 当我创建线性模型时,删除了 2 个残差,因此我无法将残差与数据集中的自变量相关联

您对如何解决此问题有任何想法吗?

标签: r

解决方案


运行时R 不会删除残差lm()。相反,它不能为模型中有任何缺失数据的样本创建残差(也不能在分析中实际使用它们)。因此,summary(model_5)输出会通知您某些样本(观察值)无法使用(即被删除)。

当残差和自变量的长度存在差异时,为了在残差和自变量之间建立相关性,并且由于某种原因我们无法找到要从数据集中删除的缺失数据(例如,如果dataset[!complete.cases(dataset), ]不工作),我们首先需要找出另一种方法来查找模型中保留/删除哪些观察结果。为此,我们也许可以依赖观察 ID 或数据集的行名。

例子

# sample data
set.seed(12345)
dataset <- data.frame(indep_var = c(NA, rnorm(9)), dep_var = c(rnorm(9), NA))
dataset$index <- rownames(dataset)

# model residuals
resid <- lm(data=dataset, dep_var ~ indep_var)$residuals
dataset.resid <- data.frame(index = names(resid), resid)

# join or match the residuals and the variables by their observation identifier
cor.data <- dplyr::inner_join(dataset.resid, dataset, by = "index")

# correlation analysis
cor.test(~ resid + indep_var, cor.data)

请注意,这names(resid)是模型中使用的观测值的行名dataset。任何未使用或来自(由于缺失)rownames(dataset)的观察/行将不包含在.datasetnames(resid)


推荐阅读