【问题标题】:Creating training dataset with .mids object in R在 R 中使用 .mids 对象创建训练数据集
【发布时间】:2016-05-04 11:05:43
【问题描述】:

我有缺少组件的数据,所以我运行了鼠标算法(来自包mice)。该函数返回一个 .mids 对象,我想将其拆分为训练和测试数据集以评估模型拟合度。我希望训练和测试数据也是 .mids 形式,以便它们可以与各种其他功能(例如 pool)结合,以根据鲁宾规则调整标准误差。

这是我的尝试,我只是从数据中删除行以获得训练集:

library(mice)
data <- mice(nhanes,m=2,maxit=5,seed=1)

set.seed(2)
rand <- (1:nrow(nhanes))*rbinom(nrow(nhanes),size=1,prob=0.7)
train <- data
train$data <- train$data[rand,]

但是,如果我尝试使用这些数据运行模型:

pool(with(train, lm(bmi ~ chl + age)))

我遇到一个错误,指出它正在尝试将 9 行替换为 7 行(可能是因为我在没有调整其他内容的情况下减少了 train$data 中的行数)。

任何帮助将不胜感激。

【问题讨论】:

    标签: r training-data r-mice


    【解决方案1】:

    一种方法是遍历complete 数据集,然后将mira 类分配给列表,这应该允许pooling。 (这确实是 mice:::with.mids 所做的)

    没有抽样的例子

    library(mice)
    
    imp <- mice(nhanes,m=2, maxit=5, seed=1)
    
    # With in-built pooling
    pool(with(imp, lm(bmi ~ chl + age)))
    
    # Pooled coefficients:
    # (Intercept)         chl         age 
    # 21.38496144  0.05975537 -3.40773396 
    # 
    # Fraction of information about the coefficients missing due to nonresponse: 
    # (Intercept)         chl         age 
    #   0.6186312   0.1060668   0.7380962 
    
    # looping manually
    mod <- list(analyses=vector("list", imp$m))
    
    for(i in 1:imp$m){
      mod$analyses[[i]] <- lm(bmi ~ chl + age, data=complete(imp, i))
    }
    
    class(mod) <- c("mira", "matrix")
    pool(mod)
    
    # Pooled coefficients:
    # (Intercept)         chl         age 
    # 21.38496144  0.05975537 -3.40773396 
    # 
    # Fraction of information about the coefficients missing due to nonresponse: 
    # (Intercept)         chl         age 
    #   0.6186312   0.1060668   0.7380962 
    

    看起来不错,所以添加一个采样程序

    mod <- list(analyses=vector("list", imp$m))
    
    set.seed(1)
    for(i in 1:imp$m){
      rand <- (1:nrow(nhanes))*rbinom(nrow(nhanes),size=1,prob=0.7)
      mod$analyses[[i]] <- lm(bmi ~ chl + age, data=complete(imp, i)[rand,])
    }
    
    class(mod) <- c("mira", "matrix")
    pool(mod)
    
    # Pooled coefficients:
    # (Intercept)         chl         age 
    # 21.72382272  0.06468044 -4.23387415 
    # 
    # Fraction of information about the coefficients missing due to nonresponse: 
    # (Intercept)         chl         age 
    #   0.1496987   0.4497024   0.6101340 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2020-10-21
      • 2015-12-27
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多