【问题标题】:passive imputation syntax for MICE package in RR中MICE包的被动插补语法
【发布时间】:2021-11-23 21:06:59
【问题描述】:

假设我们有一个数字变量age,它有时会丢失。在使用它来预测其他变量时,我们希望允许非线性,因此我们创建了age_factor。我们应该被动地估算age_factorhttps://www.gerkovink.com/miceVignettes/Passive_Post_processing/Passive_imputation_post_processing.html

但是语法如何工作?比如:

method["age_factor"] <- "~ 18_34 if age <= 34,
                           35_49 if age <= 49... "

谢谢!

【问题讨论】:

    标签: r missing-data imputation r-mice


    【解决方案1】:

    使用接近你所写的语法:

    method["age_factor"] <- "~ ifelse(is.na(age), NA,  
       ifelse(age < 20, 'under 20', 
       ifelse(age < 25, '20 to 24', 
       ifelse(age < 35, '25 to 34',
       '35 and over'))))"
    

    NB 我在可能的结果中包含了 NA,因为插补有时会返回 NA。 (另外,您需要将因子级别名称括在 引号中,因为整个表达式都用双引号括起来,否则 R 会认为您的 age_factor 代码过早结束。)

    但是——在这种情况下,我会避免使用 ifelse(),而是更喜欢 cutr::smart_cut() 的简单性和对难以发现的语义错误的抵抗力:

    require(cutr)
    cuts <- c(-Inf, 20, 25, 35, Inf)
    imp$age_factor <- with(imp, smart_cut(age, cuts, 
        labels = c('under 20', '20 to 24', '25 to 34', '35 and over'), output = "factor"))
    

    NB 参数 output = "factor" 会给你一个无序的因子;您可以将其设置为其他值,例如有序因子、整数等

    输入愉快! :-)

    【讨论】:

      【解决方案2】:

      为什么你不能那样做:

      age_factor <- function(x){
           if (x <= 34) {
               y <- "18_34"
           } else {
               y <- "35_49"
           }
      return(y)    
      }
      
      age_factor(32)
      [1] "18_34"
      

      【讨论】:

      • 但是如何在mice() 中传递给method 呢?
      • @Shira 我帮不了你,但是......看那里:researchgate.net/post/… 你也可以在这里找到 van Buuren 教授,在 StackOverflow 或通过电子邮件与他联系。我希望,他能给你一个答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多