我的数据中的缺失是否完全随机分布?

机器算法验证 r 缺失数据
2022-03-19 20:51:01

我有一个大型数据集,其中包含儿童在算术任务上的分数,可能由于儿童的年龄而存在大量缺失值?我的假设是缺失不是完全随机的,而是随机的。我需要做CFA并且想知道我是否需要以年龄为条件?我知道 SPSS 17 有一个缺失值分析,但我的数据在 R 中并且非常大。我想在 R 中进行缺失值分析,但找不到可以执行此操作的包。有人知道吗?

3个回答

正如@Dirk Eddelbuettel 已经提到的,您的问题不是很清楚。事实上,我认为你在问两个问题。第一个问题与您的 M(C)AR 假设有关。第二个问题是关于(一个)适当的 R 包。

(1) MAR的“测试”

要测试年龄是否对分数变量的缺失有影响,您可以运行一个简单的逻辑回归模型,将年龄作为预测变量。您的响应变量为 0:未丢失分数,1:未丢失分数(另请参阅 @mbq 的答案和 @Macro 的评论)。假设年幼的孩子更有可能不报告数学成绩,我们预计年龄会产生显着的负面影响。

## Make up some data
set.seed(2)
## Younger children are more likely to not report math scores, 
## so I use a Poisson distribution to model that behaviour
missData <- rpois(10000, 10)
dfr <- data.frame(score=rnorm(100), age=sample(6:15, 100, replace=TRUE))
dfr <- dfr[order(dfr$age), ]
dfr$agemiss <- sort(sample(missData, 100, replace=TRUE))
dfr$miss <- ifelse(dfr$agemiss == dfr$age, 1, 0)                  

## Run the logistic regression with age as predictor
> summary(glm(miss ~ age, data=dfr, family=binomial))

[...]

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   5.9729     1.4946   3.996 6.43e-05 ***
age          -0.7997     0.1760  -4.544 5.53e-06 ***
---
[...]

(2)(部分)缺失数据相关的R包

其中一些包还具有探索缺失模式的功能(例如,missing.pattern.plot()mi包中)。

据我了解您的问题,您想调查数据中的缺失值是否由于某种模式而出现。在这种情况下,您不需要任何“缺失值分析”——这与检查分数是否大于 0.7 或其他问题相同。只需将您的数据集转换为两类因子(缺失、非缺失)并寻找相关性。

你的问题有点难以解读。处理缺失数据的一种方法是插补——关于这方面的大量文献以及CRAN已经庞大且不断增长的软件包集,因此您可能希望从那里开始。