Comment tester si la variance expliquée par le premier facteur d'ACP diffère selon les conditions des mesures répétées?

8

Le contexte:

J'ai une étude où six variables numériques sont mesurées dans chacune des deux conditions expérimentales de mesures répétées (n = 200). Appelons les conditions et et les variables et . Théoriquement, je m'attends à ce que dans la condition plus de variance dans les variables soit expliquée par le premier facteur d'une analyse en composantes principales (ACP).ABA1,A2,...,A6B1,B2,...,B6B

Les valeurs typiques seraient:

  • Le premier facteur de PCA sur représente 30% de la varianceA1,...,A6
  • Le premier facteur de PCA sur représente 40% de la variance.B1,...,B6

Des questions:

  • Comment puis-je tester si cette différence est statistiquement significative?
  • Comment cela pourrait-il être mis en œuvre dans R?
Jeromy Anglim
la source

Réponses:

1

Juste une idée (peut-être idiote). Enregistrer la variable de scores de la première composante principale pour la condition A (PC1A) et la variable de scores de la première composante principale pour la condition B (PC1B). Les scores doivent être "bruts", c'est-à-dire leurs variances ou la somme des carrés égale à leurs valeurs propres. Utilisez ensuite le test de Pitman pour comparer les variances.

ttnphns
la source
1

Ai-je bien répondu? - Vous souhaitez tester s'il existe une différence statistiquement significative entre les deux conditions?

Perhabs vegan :: adonis () est quelque chose pour vous? Je ne sais pas si c'est ce que vous cherchez.

Il fonctionne sur la matrice de distance et compare les distances à l'intérieur d'une condition plus grandes qu'entre les conditions. Par exemple, dans un NMDS, vous verriez une séparation claire des deux conditions.

Voici un exemple de code:

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
EDi
la source
C'est plutôt cryptique. Pourriez-vous élaborer un peu?
whuber
@whuber: édité un peu. L'article d'Anderson mentionné dans les références d'Adonis est assez lisible.
EDi
1
J'apprécie ton effort. Je suis toujours confus parce que certaines des phrases semblent incohérentes (le «ne» semble particulièrement hors de propos) et une grande partie de la réponse n'a pas de lien clair avec la question: comment la «distance-matrice» est-elle liée à la matrice de covariance de PCA? "NMDS" fait-il référence à des MDS non métriques et si oui, qu'est-ce que cela a à voir avec PCA? Il semble que vous adoptiez une approche complètement différente. C'est bien, mais cela aiderait à expliquer d'où vous venez et pourquoi c'est applicable.
whuber
1

Test de permutation

Pour tester directement l'hypothèse nulle, utilisez un test de permutation.

Laissez le premier PC en état A Explique a<100% de variance, et le premier PC en état B Explique b<100%de variance. Votre hypothèse est queb>a, afin que nous puissions définir c=ba comme la statistique d'intérêt, et l'hypothèse est que c>0. L'hypothèse nulle à rejeter est quec=0.

Pour effectuer le test de permutation, prenez votre N=200+200 des échantillons des deux conditions, et les diviser au hasard en conditions A et B. Comme le fractionnement est aléatoire, il ne devrait pas y avoir de différence dans la variance expliquée après cela. Pour chaque permutation, vous pouvez calculerc, répétez ce processus plusieurs fois (par exemple, 10000) fois, et obtenir la distribution des c sous l'hypothèse nulle de ctrue=0. Comparer votre valeur empiriquec avec cette distribution donnera un p-valeur.

Bootstrapping

Pour obtenir l'intervalle de confiance sur c, utilisez le bootstrapping.

Dans l'approche d'amorçage, vous sélectionneriez au hasard N=200échantillons avec remplacement des échantillons existantsA et un autre N=200 de B. Calculercet répétez-le plusieurs fois (disons, 10000) fois. Vous allez obtenir une distribution bootstrap duc valeurs, et ses intervalles de centile vont correspondre aux intervalles de confiance de la valeur empirique c. Vous pouvez donc estimer lap-value en regardant quelle partie de cette distribution se situe au-dessus 0.

Le test de permutation est un moyen plus direct (et probablement moins reposant sur des hypothèses) de tester l'hypothèse nulle, mais le bootstrap a l'avantage supplémentaire de fournir un intervalle de confiance sur c.

amibe
la source
Le test de permutation semble être un moyen raisonnable de tester l'hypothèse nulle. Ma valeur par défaut serait probablement d'essayer une approche d'amorçage à la place où vous échantillonnez avec remplacement. Je pense que l'avantage d'une approche d'amorçage serait que vous obtiendriez également un intervalle de confiance sur la taille de la différence entre les deux variances. J'ai l'impression que vous n'obtiendrez pas cela avec l'approche par permutation.
Jeromy Anglim
@ Jeromy, vous avez tout à fait raison sur l'intervalle de confiance sur la différence. En fait, j'ai eu la partie bootstrapping écrite dans ma réponse pendant tout ce temps, jusqu'à ce que je la modifie hier lors de l'examen de ce fil. Comme vous l'avez mentionné maintenant, j'ai renvoyé le bootstrapping en ce moment (et j'ai également reformaté un peu la réponse). Regarde.
amoeba
0

Ce n'est qu'un aperçu de l'idée. La proportion de variance est définie comme

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

λisont les valeurs propres de la matrice de covariance. Maintenant, si nous utilisons à la place les valeurs propres de la matrice de corrélation,λ1+...+λ6=6, puisque la somme des valeurs propres d'une matrice est égale à la trace de la matrice, et pour les matrices de corrélation, la trace est la somme de celles.

Donc, si nous utilisons les matrices de corrélation, nous devons tester des hypothèses sur la différence de deux valeurs propres maximales d'échantillons de matrices de corrélation. Il est certainement possible de trouver dans la littérature la distribution asymptotique de la valeur propre maximale de la matrice de corrélation. Le problème se réduit donc à une sorte de test t apparié ou non apparié.

mpiktas
la source
1
Je soupçonne (sur la base de peu d'informations ;-) que la distribution asymptotique serait atteinte assez lentement pour de nombreuses distributions de données sous-jacentes. Plus important encore, la corrélation n'est tout simplement pas la covariance; L'ACP sur les deux peut différer radicalement, surtout lorsque les variances des variables diffèrent.
whuber