R KNN插补 - 函数返回错误结果&缺少帮助页面

时间:2013-11-29 23:16:28

标签: r knn

我正试图使用​​Rlibrary(imputation)kNNImpute()中估算一些缺失值。输入数据帧是44行13个变量。在2列中有30个完整的观测值和14个缺失值的观测值。

代码说它正在贬低所有缺失的值;但是,它将最后4个值归为0。从我对代码的阅读来看,这似乎是一个基于使用0作为错误默认值的缺陷。我的代码:

# impute data
library(imputation)
knn_data <- kNNImpute(x, k= 5)

# examine kNNImpute code
kNNImpute

kNNImpute代码:见第4,8行,第24行开始,第2行第4行(第48行):

[4]  prelim = impute.prelim(x)
[8]  x.missing = prelim$x.missing
[24] x.missing.imputed = t(apply(x.missing, 1, function(i) {...}
[48] x[missing.matrix2] = 0

??impute.prelim不返回任何结果(缺少帮助页面)。所以,我无法检查这段代码。

但是,kNNImpute的程序流程似乎是

[4]  # run a (seemingly undefined) screening function
[8]  # pull in the missing rows for later imputation
[24] # run imputation function
[48] # based on line [4] output, impute all "error rows"  == 0

任何人都可以解释为什么会发生这种情况和/或如何解决这个问题?

仅供参考 - 我已通过电子邮件向软件包作者发送了此页面的链接。

1 个答案:

答案 0 :(得分:0)

解决方案:我使用与kNNImpute()函数相同的代码来估算4个不正确估算的值。

impute.fn <- function(scores, distances, raw_dist) {
  knn.values <- scores[c(as.integer(names(distances)))]
  knn.weights <- 1 - (distances / max(raw_dist))
  weighted.mean(knn.values, knn.weights)
}

# impute errors - rows 41-44 are improperly imputed 
  # rows 1-30 have non missing avlues
#---------------------------------------------------------
x.dist <- as.matrix(dist(x))
dist_41 <- x.dist[41, c(1:30)][order(x.dist[41, c(1:30)])]
...

# fix impute - column 1
x$ABC[41] <- impute.fn(x$ABC, dist_41[1:5], dist_41)
...

包装作者(或其他)的适当答案仍然会受到赞赏。

注意:我已经为wKNN重新编写了imputation个包。可以在此处找到改进的包:imputaton