我有一个半稀疏矩阵。所有单元格的一半是空白的(na),所以当我尝试运行“小鼠”时,它会尝试对所有单元格进行操作。我只对其中的一个子集感兴趣。
问题:在下面的代码中,如何让“老鼠”只对前两列进行操作?是否有一种干净的方法可以使用 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])
我寻找答案的地方:
- 帮助文档(link)
- 当然是谷歌...
- https://stats.stackexchange.com/questions/99334/fast-missing-data-imputation-in-r-for-big-data-that-is-more-sophisticated-than-s
我认为您正在寻找的内容可以通过修改 mouse 函数的参数“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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)