如果我有两个变量和九个实例,我想在缺失率(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%)或上述示例和插图的其他代码。
答案 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