Como realizar uma ANOVA mista de 4 por 4 com contrastes entre e dentro dos sujeitos usando R?

11

Usuário iniciante de R aqui lutando com uma ANOVA de medidas repetidas.

Eu tenho um conjunto de dados que consiste em um fator entre sujeitos com 4 níveis (codificado em uma única variável chamada 'grupos') e um fator dentro de sujeitos com 4 níveis (codificado em quatro variáveis ​​separadas 'DV1', 'DV2' e 'DV3 ',' DV4 ').

Eu tenho os seguintes objetivos:

  1. Execute uma ANOVA geral de medidas repetidas.
  2. Compare grupos usando contrastes personalizados (como em um comando LMATRIX no SPSS).
  3. Compare diferentes níveis de DV usando contrastes personalizados (como em um comando MMATRIX no SPSS).
  4. Faça uma combinação de 2) e 3) simultaneamente, para comparar apenas alguns grupos em determinados níveis do fator dentro dos sujeitos.
  5. Execute um conjunto de contrastes que NÃO somam zero.

Sei que posso fazer isso no SPSS sem grandes problemas, mas não consigo ter uma idéia clara de como fazer isso na R. Vi como partes disso podem funcionar em pacotes diferentes, mas não o tenho. visto até agora como isso poderia funcionar dentro de um procedimento ou um conjunto de procedimentos relacionados em R.

aquadhere
fonte

Respostas:

18

Um esboço de uma solução (para outra, veja abaixo):

  1. Os dados precisam estar no formato longo (ou seja, no valor por linha) em vez de no formato amplo como no SPSS (ou seja, um assunto por linha), consulte o pacote de remodelação, ou ?reshape. Isso inclui que precisa haver uma variável indicando o identificador do sujeito (ou seja, o ID do sujeito).
  2. Todos os fatores (incluindo o identificador do sujeito) devem ser do fator de classe (executados strno seu quadro de dados para verificar isso). Se você não fizer isso, seus resultados estarão errados.
  3. Se você deseja obter somas de quadrados do tipo III, defina os contrastes padrão para efetuar a codificação:
    options(contrasts=c("contr.sum","contr.poly"))
  4. Especifique o modelo desejado com a lmepartir do nlmepacote (instale e carregue o pacote antecipadamente via install.packages("nlme")e library(nlme)) usando uma estrutura de correlação simétrica compund. Veja a resposta e especialmente meu comentário à resposta aceita para esta pergunta. No seu caso, isso poderia ser algo como (se você fornecesse dados de amostra, o que é altamente recomendado, você teria recebido o código correto):
    my.anova <- lme(dv ~ group*within, data = your.df, random = ~1|id, correlation = corCompSymm(form = ~1|id))
  5. Use a anovafunção genérica para obter a tabela anova (consulte ?anova.lme):
    anova(my.anova)
    Para obter somas de quadrados do tipo III, use o anovacomando com o argumento typedefinido como "marginal"(isso só funciona se os contrastes estiverem definidos para a codificação de efeitos, consulte o ponto 3):
    anova(my.anova, type = "marginal")
  6. O objeto ajustado do tipo lmeagora permite diversas funções para realizar contrastes. A solução mais flexível (mas não muito útil) é o Largumento em uma chamada para anova.lme(veja novamente ?anova.lme).
    Outras soluções também requerem um lmeobjeto ajustado como argumento:
    Também é muito flexível a estimablefunção do pacote gmodels . Este pacote também oferece a fit.contrastsfunção
    O pacote multcomp permite contrastes usando o ajuste de erro alfa (mas você só pode realizar contrastes usando um de seus fatores), usando a glhtfunção
    Uma abordagem nova e promissora é o pacote de contraste , no entanto, até agora, não parece privar todos os contrastes possíveis.

Uma solução alternativa é usar a ANOVA padrão por meio da combinação afexe lsmeansconforme descrito na afexvinheta .

Henrik
fonte
(+1) Resposta ótima e muito instrutiva. Aguardando a publicação do blog ...
chl
?anova.lmenão funciona para mim e a methods(anova)lista como uma função não visível.
John
@ John Você carregou nlmeantes? Caso contrário, execute library(nlme), deve funcionar. Se ainda não estiver funcionando, install.packages("nlme")primeiro.
Henrik
ah ... eu não tinha, aparentemente, apenas a lme4
John
@ Henrick, posso ir para a etapa 5, mas não consigo estabelecer contrastes comparando fatores específicos entre sujeitos em níveis específicos de fatores dentro do sujeito. Toda a documentação on-line que vi tem a ver com testar diferenças em diferentes níveis de fatores entre os sujeitos. Você tem algum código de exemplo? Eu posso apenas esperar pelo post do blog, se você for abordá-lo lá.
aquadhere