缺失机制和缺失率

时间:2015-12-12 09:41:42

标签: r simulation missing-data

如果我有两个变量和九个实例,我想在缺失率(5%.15%)下对我的数据应用缺失机制,如(MCAR,MAR,NMAR):

Aj <- c(48,75,83,58,83,32,45,50,86)
As <- c(24,30,31,35,60,76,81,82,88)

如下:

对于模拟MAR,我们首先将变量随机分成对 (Aj,As),1≤j,s≤r,其中Aj是变量 引入了哪些缺失值,As是变量 这影响了Aj的缺失。鉴于一对 变量(Aj,As)和缺失率α,我们首先分割实例 根据它们的值将它们分成两个大小相等的子集 在As。如果变量As是数字,我们会找到 As的中位数然后将所有实例分配到 根据天气情况,两个子集实例更大 值比中位数As。例如,我们可以让实例 其中As的值低于中位数60(实例 数字1-5)缺少4α的概率,即 也就是说,Pr(Aj =缺失|As≤60)=4α。

我在R

中编写了缺少机制的代码
ifelse(As<=median(As),Aj==NA,Aj)
[1] NA NA NA NA NA 32 45 50 86

我的问题是如何在R中为此代码添加丢失率(例如5%)或上述示例和插图的其他代码。

1 个答案:

答案 0 :(得分:0)

这个单行程会让你以alpha的速度失踪:

ifelse( (As <= median(As)) & (runif(length(As)) < alpha), NA, Aj)

如果您希望观察到的速率接近alpha(您需要弄清楚如何处理舍入),您可以执行以下操作:

 Aj <- c(48,75,83,58,83,32,45,50,86)
 As <- c(24,30,31,35,60,76,81,82,88)

 # missingness rate
 alpha <- 0.05

 # create subset less than the median
 b <- ifelse( As <= median(As) , NA, Aj) 

 # get the size of that subset (not known before hand due to tie handling)
 n.b <- sum(is.na(b))
 b.small <- Aj[is.na(b)]

 # sample from the small subset at a fixed rate, setting sampled to NA
 b.small[ sample(1:n.b, size=ceiling(n.b * alpha)) ] <- NA
 b[is.na(b)] <- b.small

 # b is now Aj with missingness

输出应类似于

 [1] 48 NA 83 58 83 32 45 50 86