【问题标题】:factors levels and zero variances因子水平和零方差
【发布时间】:2016-11-11 10:18:59
【问题描述】:

我在使用 klaR 包运行朴素贝叶斯时遇到此错误。

我想共享数据以进行复制,但这样做有一些限制,而且由于我不确定发生了什么,我无法创建一个可以重新创建自己的数据集。我希望读过这篇文章的人之前可能遇到过并克服了这个错误。

这是错误:

Error in if (any(temp)) stop("Zero variances for at least one class in variables: ",  : 
      missing value where TRUE/FALSE needed

我已经在网上找到了一些关于此的帖子: herehere

据我所知,我的数据中有一些级别有 1 个或 0 个实例。

问题是我找不到任何东西。我试过这个:

sapply(df, function(x) table(x))

查看是否有任何返回的表显示零或一的实例,但有近 400 个虚拟变量,我看不到任何 - 至少有几个我可以看到的 0 或 1 因子水平的实例。

是否可以告诉 R 突出显示导致问题的级别?我不确定我的下一步行动,因为我找不到任何可能是罪魁祸首的关卡。

【问题讨论】:

  • 零方差也意味着,您可以拥有相同的数字但多次?!这有帮助吗?
  • 该错误来自您的代码还是功能代码?无论哪种情况,which(is.na(temp)) 都可以帮助您找到问题。
  • @sebastian-c 它来自函数代码,因此不确定如何访问变量 temp。它来自基于 Niave Bayes 的 KlaR 包的这个 step model

标签: r naivebayes


【解决方案1】:

问题在于正在测试的条件下,您可以通过以下方式重现错误:

if (NA) {
    print("ERROR")
}

您可以将其更正为 anyNA(temp)any(is.na(temp))

如果错误确实在方差消息中,您可以使用sapply(df, function(x){length(table(x)) == 1} 对其进行测试。

【讨论】:

  • 感谢您的回答。实际上,变量 temp 是包中的一个神秘变量,我自己从未创建过它。我按照您的建议尝试了 sapply(df, function(x){length(table(x)) == 1},它返回了一个 TRUE 或 FALSE 列表。然后我在这个列表上做了一个表(称为 ind)(grepl(" TRUE", ind)) 和 FALSE 的所有值。所以看起来我所有的关卡都有多个值,所以只是不确定为什么 r 会抛出这个错误
  • 无论您对数据做什么都不能解决问题,无论您的数据如何变化,都会执行测试。尝试向包维护者提出问题,或者如果它是开放的并且可以纠正错误。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 2012-07-20
  • 2012-02-06
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多