Wie kann getestet werden, ob sich die durch den ersten Faktor der PCA erklärte Varianz unter den Bedingungen wiederholter Messungen unterscheidet?


8

Kontext:

Ich habe eine Studie, in der sechs numerische Variablen in jeweils zwei experimentellen Bedingungen mit wiederholten Messungen gemessen werden (n = 200). Nennen wir die Bedingungen und und die Variablen A_1, A_2, ..., A_6 und B_1, B_2, ..., B_6 . Theoretisch erwarte ich, dass in Bedingung B eine größere Varianz in den Variablen durch den ersten Faktor einer Hauptkomponentenanalyse (PCA) erklärt werden sollte.AB.EIN1,EIN2,...,EIN6B.1,B.2,...,B.6B.

Typische Werte wären:

  • Der erste Faktor der PCA für EIN1,...,EIN6 macht 30% der Varianz aus
  • Der erste Faktor der PCA für B.1,...,B.6 macht 40% der Varianz aus.

Fragen:

  • Wie kann ich testen, ob dieser Unterschied statistisch signifikant ist?
  • Wie könnte dies in R implementiert werden?

Antworten:


1

Nur eine (vielleicht dumme) Idee. Speichern Sie die Bewertungsvariable für die 1. Hauptkomponente für Bedingung A (PC1A) und die Bewertungsvariable für die 1. Hauptkomponente für Bedingung B (PC1B). Die Bewertungen sollten "roh" sein, dh ihre Varianzen oder Quadratsummen entsprechen ihren Eigenwerten. Verwenden Sie dann den Pitman-Test , um die Varianzen zu vergleichen.


1

Habe ich deine Antwort richtig verstanden? - Sie möchten testen, ob zwischen den beiden Bedingungen ein statistisch signifikanter Unterschied besteht?

Perhabs vegan :: adonis () ist etwas für dich? Ich weiß nicht, ob du danach suchst.

Es arbeitet mit der Distanzmatrix und vergleicht Entfernungen innerhalb einer Bedingung, die größer sind als zwischen Bedingungen. Zum Beispiel würden Sie in einem NMDS eine klare Trennung der beiden Bedingungen sehen.

Hier ist ein Beispielcode:

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

Das ist ziemlich kryptisch. Könnten Sie etwas näher darauf eingehen?
whuber

@whuber: ein bisschen bearbeitet. Das in den Referenzen von adonis erwähnte Papier von Anderson ist gut lesbar.
EDi

1
Ich schätze Ihre Bemühungen. Ich bin immer noch verwirrt, weil einige der Phrasen inkonsistent erscheinen (das "nicht" sieht besonders fehl am Platz aus) und ein Großteil der Antwort keinen klaren Zusammenhang mit der Frage hat: Wie hängt die "Distanzmatrix" mit der Kovarianzmatrix zusammen? von PCA? Bezieht sich "NMDS" auf nicht metrisches MDB und wenn ja, was hat das mit PCA zu tun? Es scheint, als würden Sie einen völlig anderen Ansatz verfolgen. Dies ist in Ordnung, aber es würde helfen zu erklären, woher Sie kommen und warum es anwendbar ist.
whuber

1

Permutationstest

Verwenden Sie einen Permutationstest, um die Nullhypothese direkt zu testen.

EINein<100%.B.b<100%.b>einc=b- -einc>0c=0

N.=200+200EINB.c10000cctrue=0cp

Bootstrapping

c

N.=200EINN.=200B.c10000ccp0

c


Der Permutationstest scheint ein vernünftiger Weg zu sein, um die Nullhypothese zu testen. Mein Standard wäre wahrscheinlich, stattdessen einen Bootstrapping-Ansatz zu versuchen, bei dem Sie ein Beispiel mit Ersatz erstellen. Ich denke, der Vorteil eines Bootstrapping-Ansatzes wäre, dass Sie auch ein Konfidenzintervall für die Größe der Differenz zwischen den beiden Varianzen erhalten. Mein Gefühl ist, dass Sie das mit dem Permutationsansatz nicht bekommen würden.
Jeromy Anglim

@ Jeromy, Sie haben absolut Recht mit dem Konfidenzintervall für die Differenz. Tatsächlich hatte ich die ganze Zeit über den Bootstrapping-Teil in meiner Antwort geschrieben, bis ich ihn gestern beim Überprüfen dieses Threads herausgearbeitet habe. Wie Sie es jetzt erwähnt haben, habe ich das Bootstrapping jetzt wieder zurückgegeben (und auch die Antwort ein wenig neu formatiert). Schau mal.
Amöbe

0

Dies ist nur ein Überblick über die Idee. Der Varianzanteil ist definiert als

λ1λ1+...+λ6,

λichλ1+...+λ6=6

Wenn wir also die Korrelationsmatrizen verwenden, müssen wir Hypothesen über die Differenz zweier maximaler Eigenwerte von Probenkorrelationsmatrizen testen. In der Literatur ist es sicherlich möglich, die asymptotische Verteilung des maximalen Eigenwerts der Korrelationsmatrix zu finden. Das Problem reduziert sich dann auf eine Art gepaarten oder ungepaarten T-Test.


1
Ich vermute (basierend auf nicht vielen Informationen ;-), dass die asymptotische Verteilung für viele zugrunde liegende Datenverteilungen eher langsam erreicht wird. Noch wichtiger ist, dass die Korrelation einfach nicht die Kovarianz ist; Die PCA auf beiden kann sich radikal unterscheiden, insbesondere wenn sich die Varianzen der Variablen unterscheiden.
whuber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.