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
假设我有一个包含多列的数据集,其中一列是 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