Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用{mice}包中的as.mids()时,插补数属性错误?_R_R Mice - Fatal编程技术网

R 使用{mice}包中的as.mids()时,插补数属性错误?

R 使用{mice}包中的as.mids()时,插补数属性错误?,r,r-mice,R,R Mice,我对R比较陌生,对论坛也绝对陌生,所以我可能不知道一些发帖规则(要友善) 我遇到的问题与Stef van Buuren的mice包中的as.mids()函数有关:使用它时,新mids对象中的数据很好,但属性中的插补数是原来的+1 示例(使用原始as.mids()示例和mice包中的数据): imp感谢您提出这个问题。下面工作示例中的函数as.mids2()生成所需的mids对象 as.mids2 <- function(data2, .imp=1, .id=2){ ini <

我对R比较陌生,对论坛也绝对陌生,所以我可能不知道一些发帖规则(要友善)

我遇到的问题与Stef van Buuren的mice包中的as.mids()函数有关:使用它时,新mids对象中的数据很好,但属性中的插补数是原来的+1

示例(使用原始as.mids()示例和mice包中的数据):


imp感谢您提出这个问题。下面工作示例中的函数
as.mids2()
生成所需的
mids
对象

as.mids2 <- function(data2, .imp=1, .id=2){
    ini <- mice(data2[data2[, .imp] == 0, -   c(.imp, .id)], m =   max(as.numeric(levels(data2[,  .imp]))), maxit=0)
    names  <- names(ini$imp)
    if (!is.null(.id)){
        rownames(ini$data) <- data2[data2[, .imp] == 0, .id]
    }
    for (i in 1:length(names)){
        for(m in 1:(max(as.numeric(levels(data2[,  .imp]))))){
            if(!is.null(ini$imp[[i]])){
                 indic <- data2[, .imp] == m &  is.na(data2[data2[, .imp]==0, names[i]])
                ini$imp[[names[i]]][m] <- data2[indic, names[i]]
            }
        } 
    }
    return(ini)
}

require(mice)
imp <- mice(nhanes)
com <- complete(imp, "long", include = TRUE)

imp2 <- as.mids2(com)
com2 <- complete(imp2, "long", include = TRUE)
all(na.omit(com == com2))
as.2
fit <- with(imp, lm(bmi ~ age))
round(summary(pool(fit)), 2)
fit2 <- with(test, lm(bmi ~ age))
round(summary(pool(fit2)), 2).
function (data, .imp = 1, .id = 2) 
{
  ini <- mice(data[data[, .imp] == 0, -c(.imp, .id)], m = max(as.numeric(data[, 
                                                                              .imp])), maxit = 0)
  names <- names(ini$imp)
  if (!is.null(.id)) {
    rownames(ini$data) <- data[data[, .imp] == 0, .id]
  }
  for (i in 1:length(names)) {
    for (m in 1:(max(as.numeric(data[, .imp])) - 1)) {
      if (!is.null(ini$imp[[i]])) {
        indic <- data[, .imp] == m & is.na(data[data[, 
                                                     .imp] == 0, names[i]])
        ini$imp[[names[i]]][m] <- data[indic, names[i]]
      }
    }
  }
  return(ini)
}
as.mids.mod <- function(data, .imp = 1, .id = 2){
  ini <- mice(data[data[, .imp] == 0, -c(.imp, .id)], m = (max(as.numeric(data[, .imp])) -1), maxit = 0)
  names <- names(ini$imp)
  if (!is.null(.id)) {
    rownames(ini$data) <- data[data[, .imp] == 0, .id]
  }
  for (i in 1:length(names)) {
    for (m in 1:(max(as.numeric(data[, .imp])) - 1)) {
      if (!is.null(ini$imp[[i]])) {
        indic <- data[, .imp] == m & is.na(data[data[, .imp] == 0, names[i]])
        ini$imp[[names[i]]][m] <- data[indic, names[i]]
      }
    }
  }
  return(ini)
imp <- mice(boys, print = FALSE, maxit = 1)
data <- complete(imp, action = "long", include = TRUE)
test <- as.mids(data)
test2 <- as.mids.mod(data)

fit <- with(imp, lm(bmi ~ age))
round(summary(pool(fit)), 2)
fit3 <- with(test2, lm(bmi ~ age))
round(summary(pool(fit3)), 2)
as.mids2 <- function(data2, .imp=1, .id=2){
    ini <- mice(data2[data2[, .imp] == 0, -   c(.imp, .id)], m =   max(as.numeric(levels(data2[,  .imp]))), maxit=0)
    names  <- names(ini$imp)
    if (!is.null(.id)){
        rownames(ini$data) <- data2[data2[, .imp] == 0, .id]
    }
    for (i in 1:length(names)){
        for(m in 1:(max(as.numeric(levels(data2[,  .imp]))))){
            if(!is.null(ini$imp[[i]])){
                 indic <- data2[, .imp] == m &  is.na(data2[data2[, .imp]==0, names[i]])
                ini$imp[[names[i]]][m] <- data2[indic, names[i]]
            }
        } 
    }
    return(ini)
}

require(mice)
imp <- mice(nhanes)
com <- complete(imp, "long", include = TRUE)

imp2 <- as.mids2(com)
com2 <- complete(imp2, "long", include = TRUE)
all(na.omit(com == com2))