Como executar ANOVA bidirecional em dados sem normalidade nem igualdade de variância em R?

16

Estou trabalhando na minha tese de mestrado no momento e planejei executar as estatísticas com o SigmaPlot. No entanto, depois de passar algum tempo com meus dados, cheguei à conclusão de que o SigmaPlot pode não ser adequado para o meu problema (posso estar enganado) e iniciei minhas primeiras tentativas no R, o que não facilitou exatamente.

O plano era executar uma simples ANOVA DE DUAS VIAS nos meus dados, o que resulta de 3 proteínas diferentes e 8 tratamentos diferentes naquelas, então meus dois fatores são proteínas e tratamentos. Eu testei a normalidade usando ambos

> shapiro.test(time)

e

> ks.test(time, "norm", mean=mean(time), sd=sqrt(var(time)))

Nos dois casos (talvez não seja surpreendente), acabei com uma distribuição não normal.

O que me deixou com as primeiras perguntas de qual teste usar para igualdade de variâncias. eu vim com

> chisq.test(time)

e o resultado foi que também não tenho igualdade de variação nos meus dados.

Tentei diferentes transformações de dados (log, centro, padronização), as quais não resolveram meus problemas com as variações.

Agora estou sem saber como conduzir a ANOVA para testar quais proteínas e quais tratamentos diferem significativamente um do outro. Encontrei algo sobre um teste de Kruskal-Walis, mas apenas por um fator (?). Também descobri coisas sobre classificação ou randamização, mas ainda não como implementar essas técnicas em R.

Alguém tem uma sugestão do que devo fazer?

Edit: obrigado por suas respostas, estou um pouco impressionado com a leitura (parece que está ficando cada vez mais em vez de menos), mas é claro que continuarei.

Aqui está um exemplo dos meus dados, conforme sugerido (lamento muito pelo formato, não consegui descobrir outra solução ou local para colocar um arquivo. Ainda sou novo em tudo isso.):

protein treatment   time  
A   con 2329.0  
A   HY  1072.0  
A   CL1 4435.0  
A   CL2 2971.0  
A   CL1-HY sim  823.5  
A   CL2-HY sim  491.5  
A   CL1+HY mix  2510.5  
A   CL2+HY mix  2484.5  
A   con 2454.0  
A   HY  1180.5  
A   CL1 3249.7  
A   CL2 2106.7  
A   CL1-HY sim  993.0  
A   CL2-HY sim  817.5  
A   CL1+HY mix  1981.0  
A   CL2+HY mix  2687.5  
B   con 1482.0  
B   HY  2084.7  
B   CL1 1498.0  
B   CL2 1258.5  
B   CL1-HY sim  1795.7  
B   CL2-HY sim  1804.5  
B   CL1+HY mix  1633.0  
B   CL2+HY mix  1416.3  
B   con 1339.0  
B   HY  2119.0  
B   CL1 1093.3  
B   CL2 1026.5  
B   CL1-HY sim  2315.5  
B   CL2-HY sim  2048.5  
B   CL1+HY mix  1465.0  
B   CL2+HY mix  2334.5  
C   con 1614.8  
C   HY  1525.5  
C   CL1 426.3  
C   CL2 1192.0  
C   CL1-HY sim  1546.0  
C   CL2-HY sim  874.5  
C   CL1+HY mix  1386.0  
C   CL2+HY mix  364.5  
C   con 1907.5  
C   HY  1152.5  
C   CL1 639.7  
C   CL2 1306.5  
C   CL1-HY sim  1515.0  
C   CL2-HY sim  1251.0  
C   CL1+HY mix  1350.5  
C   CL2+HY mix  1230.5
Sabine
fonte
2
Parece que você está bem no seu caminho com R, mas sinto que suas dificuldades podem não estar relacionadas com R. Talvez você precise consultar um estatístico primeiro para entender o problema, só então você resolveria isso praticamente. Sua pergunta atual é bastante elaborada e pode impedir as pessoas de darem um trato nela. Para a parte técnica, veja alguns sites: ats.ucla.edu/stat/R/seminars/Repeated_Measures/… e personalidade-project.org/R/r.anova.html
Roman Luštrik
4
Uma alternativa muito boa para os testes de classificação é usar ANOVAs de permutação ( uvm.edu/~dhowell/StatPages/More_Stuff/Permutation%20Anova/… ). Com essa abordagem, a heterocedasticidade não importa. A principal razão pela qual as pessoas usam testes de classificação é porque são muito mais fáceis computacionalmente. Isso não importa mais. Temos R e computadores eficientes ...
Mikko
1
O que é resposta? Observe que, na verdade, não nos importamos se a resposta é normalmente de distribuição - queremos verificar se os resíduos da análise são aproximadamente normais com variações semelhantes. Mas se houver realmente um efeito de tratamento, não esperamos que a resposta seja normalmente distribuída marginalmente.
Dason
1
Observarei que peguei os dados que você postou e executou a anova bidirecional e fiz um teste de shapiro wilks nos resíduos e isso deu um valor de p de 0,5022, o que não implica muita preocupação.
Dason
1
A normalidade @Sabine geralmente não é uma grande preocupação com o que se refere à ANOVA, mas suas amostras devem ser da mesma população, o que significa que igualdade de variância é a mais importante suposição após a randomização, é claro. Você deve fazer algo, se suas variações não são aproximadamente igual (tentar ?bartlett.test)
Mikko

Respostas:

12

Isso pode ser mais um comentário do que uma resposta, mas não se encaixa como um comentário. Podemos ajudá-lo aqui, mas isso pode levar algumas iterações; precisamos de mais informações.

Primeiro, qual é a sua variável de resposta?

Segundo, observe que a distribuição marginal de sua resposta não precisa ser normal, mas sim a distribuição condicional no modelo (isto é, os resíduos) - não está claro que você examinou seus resíduos. Além disso, normalidade é a suposição menos importante de um modelo linear (por exemplo, uma ANOVA); os resíduos podem não precisar ser perfeitamente normais. Testes de normalidade geralmente não valem a pena (veja aqui uma discussão sobre CV), os gráficos são muito melhores. Eu tentaria um qq-plot de seus resíduos. Em Risso é feito com qqnorm(), ou tente qqPlot()nacarpacote. Também vale a pena considerar a maneira pela qual os resíduos não são normais: a assimetria é mais prejudicial do que a curtose excessiva, principalmente se as inclinações alternam as direções entre os grupos.

Se realmente há um problema que vale a pena se preocupar, uma transformação é uma boa estratégia. Tomar o log de seus dados brutos é uma opção, mas não a única. Observe que centralizar e padronizar não são realmente transformações nesse sentido. Você quer olhar para a família Box & Cox de transformações de poder . E lembre-se, o resultado não precisa ser perfeitamente normal, apenas o suficiente.

Em seguida, não sigo o uso do teste do qui-quadrado para homogeneidade de variância, embora possa estar perfeitamente correto. Eu sugiro que você use o teste de Levene (use leveneTest()in car). A heterogeneidade é mais prejudicial que a não normalidade, mas a ANOVA é bastante robusta se a heterogeneidade for menor. Uma regra prática padrão é que a maior variação de grupo pode ser até quatro vezes a menor sem apresentar problemas graves. Uma boa transformação também deve abordar a heterogeneidade.

Se essas estratégias forem insuficientes, eu provavelmente exploraria uma regressão robusta antes de tentar uma abordagem não paramétrica.

Se você puder editar sua pergunta e falar mais sobre seus dados, talvez seja possível atualizá-la para fornecer informações mais específicas.

- Reinstate Monica
fonte
Quanto ao meu segundo ponto, escrevi recentemente uma resposta aqui que pode ajudar a tornar esse problema mais claro. Você pode querer ler.
gung - Restabelece Monica
8

( observação: esta resposta foi postada antes da pergunta ser migrada e mesclada do SO, portanto, foram adicionados detalhes à pergunta que não são abordados aqui. Muitos são abordados nos comentários e na resposta por @gung).

Existem muitas abordagens diferentes, e essa questão foi abordada em outras partes deste site. Aqui está uma lista de algumas abordagens, com links para outras perguntas no site e algumas referências:

  1. A transformação de poder Box-Cox pode normalizar resíduos que estão em uma escala não linear
  2. A ANOVA nos dados classificados é muito fácil, mas reduziu o poder e é difícil de interpretar. Vejo Conover e Iman, (1981)
  3. Modelo de logística ordinal de probabilidades proporcionais
  4. Testes de Permutação ( Anderson e ter Braak 2003 ), implementados e descritos por Anderson e como adonisfunção no pacote R Vegan
  5. Bootstrapping
  6. Modelagem bayesiana hierárquica ( Gelman 2005 )
David LeBauer
fonte
+1, esta é uma boa lista de algumas opções disponíveis para explorar.
gung - Restabelece Monica
Abaixo estão os comentários trocados originalmente no Stack Overflow, perdidos de alguma forma durante a migração. Consulte meta.stats.stackexchange.com/q/1157/930 .
chl
Você sabe se há alguma implementação das idéias de Anderson e Braak? - Henrik 16 de maio às 15:15
chl
@ Henrik, há uma implementação no FORTRAN Anderson 2005 que está disponível através da função R adonisno Veganpacote R / David 16 de maio às 16:20
chl
Obrigado. adonisparece funcionar mesmo com dvs. univariados No entanto, sinto que ele usa algo como somas de quadrados do tipo 1 à medida que recebo a mensagem Terms added sequentially (first to last)sempre que a executa. Você já usou ou pode dizer algo sobre isso? - Henrik 16 de maio às 17:03
chl