0

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

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

4

1 回答 1

1

这不会进行变量选择,但它将使用 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
于 2015-12-04T22:42:34.360 回答