R:加权 imputation/imputation 偏好

R: weighted imputation/imputation preferences

假设我有一个包含多列的数据集,其中一列是 gender。据我了解,knnImputation() 与标准选项将计算指标,其中所有变量都被平等对待,而我希望创建一些规则,例如,当强烈希望具有相同的 gender 时搜索邻居(例如,gender 对总权重有更大的影响,或者只选择具有相同性别的行(这可以通过拆分然后重新组装训练和测试集来完成,但也许存在更简单的方法) ).

我看到 kNNImpute() 具有用于插补函数的 impute.fn 参数,knnImputation() 具有用于方法的 meth 参数。我怎样才能创建这样一个灵活且易于编辑的规则(例如,写成类似的功能)?

这不会进行变量选择,但它将使用 kNN 仅使用具有匹配性别的行进行估算 g 正如您在评论中所建议的那样:

Sys.setenv("PKG_CXXFLAGS"="-std=c++0x") # needed for the lambda functions in Rcpp
# install/load package, create example data
devtools::install_github("alexwhitworth/imputation")
library(imputation)

set.seed(1345)
g <- sample(c("M", "F"), 100, replace=T)
a <- matrix(rnorm(1000), ncol=10)
a[a>1.5] <- NA
df <- data.frame(a,g)

# subset by gender, exclude character column from kNN (which doesn't 
# handle character variables)
df_f <- kNN_impute(df[df$g == "F", 1:10], k= 3, q= 2, check_scale = FALSE, parallel= FALSE)
df_m <- kNN_impute(df[df$g == "M", 1:10], k= 3, q= 2, check_scale = FALSE, parallel= FALSE)

# recombine. Can use rownames as key
df2 <- data.frame(rbind(df_f$x, df_m$x))
df2 <- df2[order(as.integer(rownames(df2))),]
df2$g <- df$g