假设我有一个包含多列的数据集,其中一列是gender
。据我所知,带有标准选项的knnImputation()
将计算所有变量被平等对待的度量,而我希望创建一些规则,例如,当具有相同的gender
强烈优先时搜索邻居(例如,gender
对总权重的影响更大,或者只选择性别相同的行(这可以通过拆分然后重新组合训练集和测试集来完成,但可能存在更简单的方法) )。
我看到kNNImpute()
的插补函数的impute.fn
参数和方法的knnImputation()
都有meth
。如何创建一个灵活且易于编辑的规则(例如,将其编写为类似的功能)?
答案 0 :(得分:1)
这不会进行变量选择,但是如果您在评论中建议使用仅具有匹配性别g
的行,则会使用kNN:
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