Como testar se a variância explicada pelo primeiro fator do PCA difere nas condições de medidas repetidas?

8

Contexto:

Eu tenho um estudo em que seis variáveis ​​numéricas são medidas em cada uma das duas condições experimentais de medidas repetidas (n = 200). Vamos chamar as condições e e as variáveis e . Teoricamente, espero que, na condição mais variações nas variáveis ​​sejam explicadas pelo primeiro fator de uma análise de componentes principais (PCA).ABA1,A2,...,A6B1,B2,...,B6B

Os valores típicos seriam:

  • Primeiro fator de PCA em responde por 30% da variaçãoA1,...,A6
  • O primeiro fator do PCA em responsável por 40% da variação.B1,...,B6

Questões:

  • Como posso testar se essa diferença é estatisticamente significativa?
  • Como isso pode ser implementado no R?
Jeromy Anglim
fonte

Respostas:

1

Apenas uma ideia (talvez boba). Salve a 1ª variável de pontuação do componente principal para a condição A (PC1A) e a 1ª variável de pontuação do componente principal para a condição B (PC1B). As pontuações devem ser "brutas", ou seja, suas variações ou soma dos quadrados iguais aos seus valores próprios. Em seguida, use o teste de Pitman para comparar as variações.

ttnphns
fonte
1

Eu recebi sua resposta certa? - Você quer testar se há diferença estatisticamente significativa entre as duas condições?

Perhabs vegan :: adonis () é algo para você? Não sei se é isso que você está procurando.

Ele trabalha na matriz de distância e compara as distâncias dentro de uma condição que são maiores que as condições. Por exemplo, em um NMDS, você veria uma separação clara das duas condições.

Aqui está um exemplo de código:

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
fonte
Isso é um tanto enigmático. Você poderia elaborar um pouco?
whuber
@ whuber: editado um pouco. O artigo de Anderson mencionado nas referências de adonis é bastante legível.
Edi
1
Eu aprecio o seu esforço. Ainda estou confuso porque algumas das frases parecem inconsistentes (o "não" parece particularmente fora de lugar) e grande parte da resposta não tem uma conexão clara com a pergunta: como a "matriz de distância" está relacionada à matriz de covariância do PCA? "NMDS" se refere a MDS não métrico e, se sim, o que isso tem a ver com o PCA? Parece que você está adotando uma abordagem completamente diferente. Tudo bem, mas ajudaria a explicar de onde você é e por que é aplicável.
whuber
1

Teste de permutação

Para testar a hipótese nula diretamente, use um teste de permutação.

Deixe o primeiro PC na condição explicar da variação, e o primeiro PC na condição explique da variação. Sua hipótese é que , para que possamos definir como a estatística de interesse, e a hipótese é que . A hipótese nula a ser rejeitada é que .Aa<100%Bb<100%b>ac=bac>0c=0

Para realizar o teste de permutação, tomar o seu amostras a partir de ambas as condições, e aleatoriamente dividi-las em condições e . Como a divisão é aleatória, não deve haver diferença na variação explicada depois disso. Para cada permutação, você pode calcular , repetir esse processo várias vezes (digamos, ) e obter a distribuição de sob a hipótese nula de . Comparar seu valor empírico de com essa distribuição produzirá um valor- .N=200+200ABc10000cctrue=0cp

Bootstrapping

Para obter o intervalo de confiança em , use a inicialização.c

Na abordagem bootstrapping, você deve selecionar aleatoriamente amostras com reposição a partir das amostras existentes em e outro da . Calcule e repita-o várias vezes (digamos, ) novamente . Você obterá uma distribuição de inicialização dos valores de , e seus intervalos de percentis corresponderão aos intervalos de confiança do valor empírico . Portanto, você pode estimar o valor observando qual parte dessa distribuição está acima de .N=200AN=200Bc10000ccp0

O teste de permutação é uma maneira mais direta (e provavelmente menos dependente de quaisquer suposições) de testar a hipótese nula, mas o bootstrap tem um benefício adicional de gerar um intervalo de confiança em .c

ameba
fonte
O teste de permutação parece ser uma maneira razoável de testar a hipótese nula. Meu padrão provavelmente seria tentar uma abordagem de bootstrap em vez de uma amostra com substituição. Acho que o benefício de uma abordagem de bootstrap seria que você também recebesse um intervalo de confiança no tamanho da diferença entre as duas variações. Meu sentimento é que você não entenderia isso com a abordagem de permutação.
Jeromy Anglim
@ Jeromy, você está absolutamente certo sobre o intervalo de confiança na diferença. Na verdade, eu tive a parte do bootstrapping escrita na minha resposta esse tempo todo, até que eu a editei ontem ao revisar este tópico. Como você mencionou agora, retornei a inicialização novamente (e também reformatei um pouco a resposta). Dê uma olhada.
Ameba
0

Este é apenas um esboço da ideia. A proporção de variação é definida como

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

onde são os autovalores da matriz de covariância. Agora, se usarmos os autovalores da matriz de correlação, então , pois a soma dos autovalores de uma matriz é igual ao traço da matriz e, para matrizes de correlação, o traço é a soma de uns .λiλ1+...+λ6=6

Portanto, se usarmos as matrizes de correlação, precisamos testar hipóteses sobre a diferença de dois valores próprios máximos das matrizes de correlação da amostra. Certamente é possível encontrar na literatura a distribuição assintótica do valor eigen máximo da matriz de correlação. Portanto, o problema se reduz a algum tipo de teste t emparelhado ou não emparelhado.

mpiktas
fonte
1
Eu suspeito (com base em pouca informação ;-) que a distribuição assintótica seria alcançada lentamente para muitas distribuições de dados subjacentes. Mais importante, a correlação simplesmente não é a covariância; O PCA nos dois pode diferir radicalmente, especialmente quando as variações das variáveis ​​diferem.
whuber