NMAR 的意思是“不随机丢失”,因此这意味着您的丢失数据存在某种模式。 NMAR 没有指定该模式将是什么,只是有一个。
这对数据分析来说是一个挑战,因为这意味着缺失数据与完整数据的分布不同,因此根据观察值(例如通过估算中位数)来估算缺失值是很危险的。
即使是像老鼠这样复杂的缺失数据插补包(在上面的评论中提到)也是为插补 MAR(随机缺失)或 MCAR(完全随机缺失)的数据而设计的。
要模拟 NMAR 数据,您只需为缺失数据指定一个分布,该分布不同于示例中用于生成数据的分布。有无数种方法可以做到这一点。
如果我正确理解您的描述,您希望使低于或高于中值的 5-10% 的值丢失。这行代码在任何高于中位数的值上都有 5% 的可能性:
Aj[Aj > median(Aj)] = ifelse(sample(c(T, F), length(Aj[Aj > median(Aj)]), replace=T, prob=c(0.05, 0.95)), NA, Aj[Aj > median(Aj)])
这行代码获取高于中位数的 Aj 值,然后 ifelse() 使用样本来选择第一个选项(T 的可能性为 5%)或第二个选项(F 的可能性为 95% )。如果为 T,则将该值替换为 NA。如果为 F,则保留原始值。