问题描述
在 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)