【问题标题】:R KNN imputation - function returning erroneous results & missing help pageR KNN 插补 - 返回错误结果和缺少帮助页面的函数
【发布时间】:2016-03-17 01:08:22
【问题描述】:

我正在尝试使用library(imputation)kNNImpute() 来估算R 中的一些缺失值。输入数据框是 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 行(第 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

谁能解释为什么会发生这种情况和/或如何解决这个问题?

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

【问题讨论】:

  • impute.prelim 定义完美,只是没有导出。试试imputation:::impute.prelim。不过,我同意将所有未成功估算为 0 的值至少应记录在案(我没有看到)。
  • 试试Amelia 或其他mi 包?
  • 我也找不到第 [24] 行函数所需的这两个内部函数的文档:pdist(第 40 行)和.dist.2dto1d(第 36 行)

标签: r knn


【解决方案1】:

解决方案:我使用与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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多