PCAの第1因子によって説明される分散が反復測定条件間で異なるかどうかをテストする方法は?


8

環境:

2つの反復測定実験条件(n = 200)のそれぞれで6つの数値変数が測定される研究があります。条件を呼び出しましょうAおよびと変数および。理論的には、条件では、変数の分散が主成分分析(PCA)の最初の要素によって説明されるはずだと私は予想しています。BA1,A2,...,A6B1,B2,...,B6B

一般的な値は次のとおりです。

  • のPCAの第1因子は、分散の30%を占めますA1,...,A6
  • のPCAの第1因子は 、分散の40%を占めます。B1,...,B6

質問:

  • この違いが統計的に有意であるかどうかをどのようにテストできますか?
  • これはどのようにRに実装できますか?

回答:


1

たった1つの(多分ばかげた)アイデア。条件A(PC1A)の第1主成分スコア変数と条件B(PC1B)の第1主成分スコア変数を保存します。スコアは「生」、つまりその分散または平方和が固有値と等しいものでなければなりません。次に、ピットマンの検定を使用して分散を比較します。


1

正解しましたか?-2つの条件の間に統計的に有意な差があるかどうかをテストしますか?

Perhabs vegan :: adonis()はあなたのためのものですか?それがあなたの探しているものかどうかわからない。

これは距離行列で機能し、条件内の距離が条件間よりも大きいことを比較します。たとえば、NMDSでは、2つの条件が明確に分離されています。

ここにいくつかのサンプルコードがあります:

df <- data.frame(cond = rep(c("A", "B"), each = 100), 
 v1 <- jitter(rep(c(20, 100), each = 100)),
 v2 <- jitter(rep(c(0, 80), each = 100)),
 v3 <- jitter(rep(c(40, 5), each = 100)),
 v4 <- jitter(rep(c(42, 47), each = 100)),
 v5 <- jitter(rep(c(78, 100), each = 100)),
 v6 <- jitter(rep(c(10, 100), each = 100)))

# PCA
require(vegan)
pca <- rda(df[ ,-1], scale = TRUE)
ssc <- scores(pca, display = "sites")
ordiplot(pca, type = "n")
points(ssc[df$cond == "A", ], col = "red", pch = 16)
points(ssc[df$cond == "B", ], col = "blue", pch = 16)

# NMDS
nmds <- metaMDS(df[ ,-1], distance = "euclidian")
nmsc <- scores(nmds, display = "sites")
ordiplot(nmds, type = "n")
points(nmsc[df$cond == "A", ], col = "red", pch = 16)
points(nmsc[df$cond == "B", ], col = "blue", pch = 16)

# use adonis to test if there is a difference between the conditions
adonis(df[ ,-1] ~ df[ ,1], method = "euclidean")
## There is a statistically significant difference between the two conditions

これはかなり不可解です。もう少し詳しく説明してもらえますか?
whuber

@whuber:少し編集しました。アドニスの参考文献で言及されているアンダーソンの論文は非常に読みやすいです。
EDi、2011

1
あなたの努力に感謝します。いくつかのフレーズが一貫していないように見え(「そうではない」とは特に場違いに見えます)、答えの多くに質問との明確な関連性がないため、私はまだ混乱しています。 PCAの?「NMDS」は非メトリックMDSを指しますか。そうであれば、それはPCAとどのように関係していますか?まったく違うアプローチを取っているようです。これは問題ありませんが、どこから来たのか、なぜそれが適用されるのかを説明するのに役立ちます。
whuber

1

順列検定

帰無仮説を直接検定するには、順列検定を使用します。

最初のPCを状態にしましょう 説明する a<100 分散の状態、および状態の最初のPC B 説明する b<100分散の。あなたの仮説はb>a、定義できるので c=ba 興味のある統計として、そして仮説は c>0。棄却する帰無仮説はc=0

順列テストを実行するには、 N=200+200 両方の条件からのサンプル、およびそれらを条件にランダムに分割 そして B。分割はランダムであるため、その後の説明付き分散に違いはありません。順列ごとに、計算できますc、このプロセスを何度も繰り返します(たとえば、 10000)回、そしての分布を取得 c の帰無仮説の下で ctrあなたe=0。の経験値の比較c この分布では、 p-値。

ブートストラップ

の信頼区間を取得するには c、ブートストラップを使用します。

ブートストラップアプローチでは、ランダムに選択します N=200の既存のサンプルを置き換えたサンプル そして別の N=200 から B。計算するc、それを何度も繰り返します(ここでも、 10000)回。のブートストラップされたディストリビューションを取得しますc 値、およびそのパーセンタイル間隔は、経験値の信頼区間に対応します c。だからあなたは推定することができますpこの分布のどの部分が上にあるかを調べることによる価値 0

順列テストは、帰無仮説をテストするためのより直接的な(そしておそらくほとんどの仮定に依存しない)方法ですが、ブートストラップには、信頼区間を生成するという追加の利点があります。 c


順列検定は、帰無仮説を検定する合理的な方法のようです。私のデフォルトはおそらく、代わりにサンプリングしてブートストラップアプローチを試すことでしょう。ブートストラップアプローチの利点は、2つの分散の差のサイズに関する信頼区間も得られることだと思います。私の考えでは、順列アプローチではそれは得られないでしょう。
Jeromy Anglim、2015

@Jeromy、あなたは違いの信頼区間について絶対的に正しいです。実際、昨日このスレッドを確認して編集するまで、私はいつもブートストラップの部分を私の回答に書いていました。あなたが今それを述べたように、私は今すぐブートストラップを元に戻しました(そしてまた答えを少し再フォーマットしました)。見てください。
amoeba 2015

0

これは単なるアイデアの概要です。分散の割合は次のように定義されます

λ1λ1++λ6

どこ λ共分散行列の固有値です。ここで、代わりに相関行列の固有値を使用すると、λ1++λ6=6、行列の固有値の合計は行列のトレースに等しいため、相関行列の場合、トレースは1の合計です。

したがって、相関行列を使用する場合、サンプル相関行列の2つの最大固有値の差に関する仮説を検定する必要があります。文献で相関行列の最大固有値の漸近分布を見つけることは確かに可能です。したがって、問題は、ある種の対応のある、または対応のないt検定に減少します。


1
多くの基礎となるデータ分布では漸近分布への到達がかなり遅いと(あまり情報に基づいていないので;-)疑っています。さらに重要なことに、相関関係は単に共分散ではありません。特に変数の分散が異なる場合、2つのPCAは根本的に異なる可能性があります。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.