'R','鼠标',缺少变量插补-如何仅在稀疏矩阵中执行一列

Eng*_*ica 1 r r-mice imputation

我有一个半稀疏的矩阵。所有单元格中有一半是空白(na),所以当我尝试运行“鼠标”时,它将尝试对所有单元格起作用。我只对一个子集感兴趣。

问题:在下面的代码中,如何使“小鼠”仅在前两列上运行?有没有一种干净的方法使用行滞后或行前导来做到这一点,以便上一行的内容可以帮助修补当前行中的孔?

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])
Run Code Online (Sandbox Code Playgroud)

我一直在寻找答案的地方:

Lik*_*iky 5

我认为您正在寻找的内容可以通过修改鼠标功能的参数“ 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)
Run Code Online (Sandbox Code Playgroud)