R函数中的Bhattacharya距离错误

时间:2016-01-30 07:15:02

标签: r distance distribution normal-distribution

当使用库(“fps”)中可用的bhattacharya.dist()函数时,我们遇到了一个错误,它在为两个相同的分布计算这个距离时给出了-Inf。 (在这种情况下,正确的值为零)。 这是因为函数中两个大值的相乘。我已经发布了旧代码和代码以及下面的修复程序。

有些专家可以验证这是否正确,并建议如何将此修复程序引起该库的所有者的注意并分发出来等。请注意,我对R和统计等非常新。因此我我担心这个修复可能会有一些问题。

我已经用不同大小的矩阵运行了一些测试并看到了预期的结果。但诚然,(由于我缺乏软件开发技能),它无法接近彻底的测试。

OLD ROUTINE

  

bhattacharyya.dist

function (mu1, mu2, Sigma1, Sigma2) 
{
    aggregatesigma <- (Sigma1 + Sigma2)/2
    d1 <- mahalanobis(mu1, mu2, aggregatesigma)/8
    d2 <- log(det(as.matrix(aggregatesigma))/sqrt(det(as.matrix(Sigma1)) * 
        det(as.matrix(Sigma2))))/2
    out <- d1 + d2
    out
}

BUG FIX的新常规

bhattacharyyaDistance = function (mu1, mu2, Sigma1, Sigma2) 
{
  aggregatesigma <- (Sigma1 + Sigma2)/2;
  d1 <- mahalanobis(mu1, mu2, aggregatesigma)/8;
  #d2 <- log(det(as.matrix(aggregatesigma))/sqrt(det(as.matrix(Sigma1)) * 
  #                                                det(as.matrix(Sigma2))))/2;
  d2 <- log((det(as.matrix(aggregatesigma))/sqrt(det(as.matrix(Sigma1)))) 
                                            / sqrt(det(as.matrix(Sigma2))))/2;

  out <- d1 + d2;
  return(out);
};

0 个答案:

没有答案