ペアワイズマハラノビス距離
共変量のn×pn×pn \times p行列の観測の各ペア間のRのサンプルマハラノビス距離を計算する必要があります。効率的な解決策が必要です。つまり、n(n−1)/2n(n−1)/2n(n-1)/2距離のみが計算され、C / RCpp / Fortranなどで実装することが望ましいです。母共分散行列ΣΣ\Sigmaは未知であり、サンプル共分散を使用すると仮定しますその場所のマトリックス。 Rのペアワイズマハラノビス距離を計算するための「コンセンサス」方法がないように思われるため、この質問に特に興味distがありcluster::daisyます。つまり、関数にも関数にも実装されていません。このmahalanobis関数は、プログラマーの追加作業なしにペアワイズ距離を計算しません。 これはすでにここでRのペアワイズマハラノビス距離を求められましたが、そこでの解は間違っているようです。 これは正しいですが、ひどく非効率です(n × nn×nn \times n距離が計算されるため): set.seed(0) x0 <- MASS::mvrnorm(33,1:10,diag(c(seq(1,1/2,l=10)),10)) dM = as.dist(apply(x0, 1, function(i) mahalanobis(x0, i, cov = cov(x0)))) これはCで自分でコーディングするのに十分簡単ですが、この基本的なものには既存のソリューションがあるはずです。あるの? 不足している他のソリューションがあります:n (n − 1 )/ 2個の一意の距離のみが必要な場合、n × n距離をHDMD::pairwise.mahalanobis()計算します。有望に思えますが、に依存するパッケージから関数を取得したくないので、コードを実行する他の人の能力が大幅に制限されます。この実装が完全でない限り、自分で作成したいです。この機能の経験はありますか?n × nn×nn \times nn (n − 1 )/ 2n(n−1)/2n(n-1)/2compositions::MahalanobisDist()rgl