'R'、'mice'、缺少变量插补 - 如何在稀疏矩阵中只做一列

'R', 'mice', missing variable imputation - how to only do one column in sparse matrix

我有一个半稀疏矩阵。所有单元格的一半是空白的 (na) 所以当我尝试 运行 时 'mice' 它会尝试对所有单元格进行处理。我只对其中的一部分感兴趣。

问题:在下面的代码中,如何让"mice"只对前两列进行操作?有没有一种干净的方法可以使用 row-lag 或 row-lead 来做到这一点,以便前一行的内容可以帮助修补当前行中的漏洞?

set.seed(1)

#domain
x <- seq(from=0,to=10,length.out=1000)

#ranges
y <- sin(x) +sin(x/2) + rnorm(n = length(x))
y2 <- sin(x) +sin(x/2) + rnorm(n = length(x))

#kill 50% of cells
idx_na1 <- sample(x=1:length(x),size = length(x)/2)
y[idx_na1] <- NA

#kill more cells
idx_na2 <- sample(x=1:length(x),size = length(x)/2)
y2[idx_na2] <- NA

#assemble base data
my_data <- data.frame(x,y,y2)

#make the rest of the data
for (i in 3:50){


     my_data[,i] <- rnorm(n = length(x))
     idx_na2 <- sample(x=1:length(x),size = length(x)/2)
     my_data[idx_na2,i] <- NA

}

#imputation
est <- mice(my_data)

data2 <- complete(est)

str(data2[,1:3])

我寻找答案的地方:

我不太清楚你的问题。你是说你只想对两列进行操作?在这种情况下 mice(my_data[,1:2]) 将起作用。或者您想使用所有数据但只填充某些列的缺失值?为此,我只需按照以下几行创建一个指标矩阵:

isNA <- data.frame(apply(my_data, 2, is.na))
est <- mice(my_data)

mapply(function(x, isna) {
  x[isNA == 1] <- NA
  return(x)
}, <each MI mice return object column-wise>,  isNA)

对于你的最后一个问题,"can I use mice for rolling data imputation?"我认为答案是否定的。但是你应该仔细检查文档。

我想你要找的东西可以通过修改 mice 函数的参数 "where" 来完成。参数 "where" 等于一个矩阵(或数据框),其大小与您正在执行插补的数据集相同。默认情况下,"where" 参数等于 is.na(data):当数据集中缺少值时,单元格等于 "TRUE" 的矩阵,否则等于 "FALSE" .这意味着默认情况下,数据集中的每个缺失值都将被估算。现在,如果您想更改此设置并仅估算数据集特定列(在我的示例第 2 列中)中的值,您可以这样做:

# Define arbitrary matrix with TRUE values when data is missing and FALSE otherwise
A <- is.na(data)
# Replace all the other columns which are not the one you want to impute (let say column 2)
A[,-2] <- FALSE 
# Run the mice function
imputed_data <- mice(data, where = A)

代替 where 参数,更快的方法可能是 使用 method 参数 。对于要跳过的 columns/variables,您可以将此参数设置为 ""。缺点是该方法的自动确定将不起作用。所以:

imp <- mice(data,
            method = ifelse(colnames(data) == "your_var", "logreg", ""))

但是你可以从the documentation获得默认方法:

defaultMethod

... By default, the method uses pmm, predictive mean matching (numeric data) logreg, logistic regression imputation (binary data, factor with 2 levels) polyreg, polytomous regression imputation for unordered categorical data (factor > 2 levels) polr, proportional odds model for (ordered, > 2 levels).