【问题标题】:Assigning a proportion of a variable to be missing based on the probability of other variables (creating a MAR mechanism) in R根据 R 中其他变量的概率(创建 MAR 机制)分配要缺失的变量比例
【发布时间】:2021-07-30 13:21:52
【问题描述】:

在 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,1,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% 的阶段变量缺失,缺失值的概率取决于年龄和合并症?

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

提前致谢!

【问题讨论】:

    标签: r missing-data


    【解决方案1】:

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

    创建一个 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。对于每个匹配的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2022-07-15
      相关资源
      最近更新 更多