R:加权估算/估算偏好

时间:2015-12-04 22:06:53

标签: r imputation

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

我看到kNNImpute()的插补函数的impute.fn参数和方法的knnImputation()都有meth。如何创建一个灵活且易于编辑的规则(例如,将其编写为类似的功能)?

1 个答案:

答案 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