计算Rao的二次熵

时间:2016-12-13 00:50:47

标签: r euclidean-distance weighted

Rao QE是加权欧几里德距离矩阵。我有一个数据表dt中d_ijs元素的向量,每个元素一列(比如说有x个)。 p是最后一栏。 nrow = S.双和是针对距离矩阵的左下角(或右上角,因为它是对称的)元素。 Formula for Rao's QE

如果我只需要一个未加权的距离矩阵,我可以简单地在x列上做dist()。如何用p_i和p_j的乘积加权d_ijs?

示例数据集位于https://github.com/GeraldCNelson/nutmod/blob/master/RaoD_example.csv,其中的ps名为foodQ.ratio。

1 个答案:

答案 0 :(得分:1)

对于原始欧几里德距离矩阵,您仍然以dist开头。设为D。正如您将从R - How to get row & column subscripts of matched elements from a distance matrix中读到的那样,&#34; dist&#34;对象不是真正的矩阵,而是一维数组。因此,首先要D <- as.matrix(D) or D <- dist2mat(D)将其转换为完整的矩阵。

现在,让p成为权重的向量, Rao的QE只是二次形式 q'Dq / 2

c(crossprod(p, D %*% p)) / 2

注意,我没有以最有效的方式做所有事情。我使用完整的D %*% p而不仅仅是它的下三角形部分执行了对称矩阵向量乘法D。但是,R没有例行三角矩阵向量乘法。所以我计算完整版本而不是除以2。

这是必要的计算量的两倍;同样,使D完整矩阵使内存成本翻倍。但如果您的问题是中小型,这绝对没问题。对于大问题,如果您是R和C向导,请调用BLAS例程dtrmv或甚至dtpmv进行三角矩阵向量计算。

<强>更新

我刚刚找到了这篇简单的论文:Rao's quadratic entropy as a measure of functional diversity based on multiple traits,用于定义和使用Rao的EQ。它提到我们可以用马哈拉诺比斯距离代替欧氏距离。如果我们想要这样做,请使用Mahalanobis distance of each pair of observations中的代码快速计算马哈拉诺比斯距离矩阵。