4

私はプログラミングと R に非常に慣れていません。質問に対する答えを見つけようとしましたが、問題の一部は、何を検索すればよいか正確にわからないことです。

行列の行ごとに計算 (統計距離) を繰り返そうとしています。これが私がこれまでに持っているものです:

pollution1 <-as.matrix(pollution[,5:6])
ss <- var(pollution1)
ssinv <- solve(ss)
xbar <- colMeans(pollution1)
t(pollution1[1,]-xbar)%*%ssinv%*%(pollution1[1,]-xbar)

これは最初の統計的距離のみを取得しますが、すべてを取得するために別の行列行でこの行を再入力したくありません。

私が読んだことから、ループまたは使用する必要があるかもしれapply()ませんが、自分では成功していません。これに関するヘルプと、投稿する必要がないようにヘルプを検索する方法に関するアドバイスをいただければ幸いです。ありがとうございました。

4

2 に答える 2

3

mahalanobis次の関数を検討することもできます?mahalanobis

Sigma = 'cov' に関して、'x' とベクトル mu = 'center' のすべての行のマハラノビス距離の 2 乗を返します。これは (ベクトル 'x' に対して) 次のように定義されます。

                  D^2 = (x - mu)' Sigma^-1 (x - mu)

もちろん、使い方を覚えるのapplyもいいですが…

于 2012-12-01T21:19:30.340 に答える
2

使用するだけではどうですかapply

apply(pollution1, 1, function(i) t(i-xbar) %*% ssinv %*% (i-xbar))

また、例を再現可能にすると便利です。たとえば、次のようになります。

pollution1 = matrix(rnorm(100), ncol=2)
ss = var(pollution1)
ssinv = solve(ss)
xbar = colMeans(pollution1)
t(pollution1[1,]-xbar) %*% ssinv %*% (pollution1[1,]-xbar)
于 2012-12-01T20:48:53.580 に答える