2016-12-13 35 views
0

Rao QEは、重み付きユークリッド距離行列です。私はd_ijsの要素のベクトルをデータテーブルdtに持ちます。要素ごとに1つの列があります(xがあるとします)。 pは最後の列です。 nrow = Sです。二重合計は、距離行列の左下(または対称であるため右上)の要素です。 Formula for Rao's QERaoの二次エントロピーを計算する

私は重み付けされていない距離行列しか必要としない場合は、単にx列に対してdist()を実行できます。どのようにp_iとp_jの積でd_ijsに重み付けをしますか?

例データセットは、で、foodQ.ratioという列にpsがあります。

+0

はい。 dは対称である。 – JerryN

+0

Rao二次エントロピー関数を探している場合は、次のリンクから "Rao"を検索してみてください。 – David

+0

csvファイルには56個の要素が含まれています(リンク:http://finzi.psych.upenn.edu/search.html)。行(そのうち1つはヘッダー)と21個の列があります。 dfという名前のdata.frameに変換する場合、最後の列(p値を含む)を削除し、dist(df)を実行すると、距離行列が返されます。 – JerryN

答えて

1

生ユークリッド距離行列についてはまだdistで始まります。それをDとする。 R - How to get row & column subscripts of matched elements from a distance matrixから読むと、Rの「dist」オブジェクトは実際の行列ではなく、1次元配列です。だからD <- as.matrix(D)を使用して、それを以下の通常の行列として変換してください。

さて、pは重みのベクトルで聞かせて、RaoのQEはちょうど二次形式q'Dq/2されています、私が最も効率的な方法ですべてを

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

注意致しておりません。私は、その下三角部分だけでなく、Dを完全に使って対称行列 - ベクトル乗算D %*% pを実行しました。しかし、Rには三角行列 - ベクトル乗算を行うルーチンはありません。だから私は2を除算するよりもフルバージョンを計算します。

これは必要な計算量を2倍にします。また、Dをフルマトリクス化するとメモリコストが2倍になります。しかし、あなたの問題が中小規模の場合、これは絶対にうまくいきます。大きな問題の場合、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に私のコードを使用して、マハラノビス距離行列を高速に計算してください。

+0

マハラノビス距離コードへのリンクは、あなたが意味するものではないようです。 – JerryN

+0

マハラノビスのリンクはプロローグに関する話題になります(プロローグでZ = [_G305]のような結果はどうなりますか?) – JerryN

関連する問題