根据 R 中其他变量的概率创建 MAR 机制分配变量的一部分缺失

问题描述

在 R 中,我想创建一个包含 10% 缺失数据且缺失数据为 MAR 的变量。

例如让 stage 是一个二元变量(即 stage = {0,1})。它被完全观察到。但是,我想指定 10% 的观测值缺失,它们缺失的概率由其他变量的分布给出。

请参阅下面的代码获取数据:

# Set the seed
set.seed(1234)

# Number of observations
n <- 1000

# Create age variable
age <- 100*rbeta(1000,10,5)

# Create sex variable
sex <- rbinom(1000,1,0.45)

# Create comorbidity variable
cmb <- rbinom(1000,prob=plogis(0 - 2*(age/100)))

# Create stage variable
stage <- rbinom(1000,size=1,prob=plogis(0 + 0.9*(age/100) + 0.6*(cmb)))

如何分配 10% 的阶段变量缺失,而缺失值的概率取决于年龄和合并症?

我也希望能够轻松更改缺失数据的比例。

提前致谢!

解决方法

我可能找到了一个冗长的方法......

创建一个 ID 变量:

id <- 1:n

创建数据框:

df <- data.frame(id,age,sex,cmb,stage)

创建将成为舞台但缺少 10% 的变量的名称

df$stage.mar10 <- df$stage

在数据框中的 ID 中,以与年龄和合并症相关的概率抽样 10%(即 n*0.1),并将其保存为一个名为 stage.mar10.id 的向量

stage.mar10.id <- sample(df$id,n*0.1,prob = plogis(-2.5 + 0.8*(df$age/100) + 0.2*df$cmb))

创建一个循环来循环遍历与数据框中匹配的样本 ID。对于匹配的每个 ID,分配 stage.mar10 变量以取值 NA

for (i in 1:(n*0.1)) {
      df$stage.mar10[df$id==stage.mar10.id[i]] <- NA 
}

检查它是否有效:

table(df$stage.mar10)
summary(df$stage.mar10)