Forneça um código R que permita realizar uma ANOVA entre sujeitos com -3, -1, 1, 3 contrastes. Entendo que há um debate sobre o tipo apropriado de soma de quadrados (SS) para essa análise. No entanto, como o tipo padrão de SS usado no SAS e SPSS (Tipo III) é considerado o padrão na minha área. Assim, eu gostaria que os resultados dessa análise correspondessem perfeitamente ao que é gerado por esses programas estatísticos. Para ser aceita, uma resposta deve chamar diretamente aov (), mas outras respostas podem ser votadas (especialmente se forem fáceis de entender / usar).
sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
Edit: Por favor, note que o contraste que estou solicitando não é um simples contraste linear ou polinomial, mas é um contraste derivado de uma previsão teórica, ou seja, o tipo de contraste discutido por Rosenthal e Rosnow.
fonte
Respostas:
A soma dos quadrados do tipo III para ANOVA está prontamente disponível através da
Anova()
função do pacote veicular .A codificação de contraste pode ser feita de várias maneiras, usando
C()
acontr.*
família (como indicado por @nico) ou diretamente acontrasts()
função / argumento. Isso está detalhado no §6.2 (pp. 144-151) da Estatística Moderna Aplicada com S (Springer, 2002, 4ª ed.). Observe queaov()
é apenas uma função de invólucro para alm()
função. É interessante quando se deseja controlar o termo de erro do modelo (como em um projeto dentro do assunto), mas, caso contrário, ambos produzem os mesmos resultados (e seja qual for a forma como você se encaixa no seu modelo, você ainda pode gerar ANOVA ou LM- como resumos comsummary.aov
ousummary.lm
).Não tenho o SPSS para comparar as duas saídas, mas algo como
vale a pena tentar em primeira instância.
Sobre a codificação de fatores no R vs. SAS: R considera o nível de linha de base ou referência como o primeiro nível em ordem lexicográfica, enquanto o SAS considera o último. Portanto, para obter resultados comparáveis, você precisa usar
contr.SAS()
ou aorelevel()
seu fator R.fonte
Anova(lm(DV ~ C(IV, c(-3,-1,1,3),1), data=sample.data), type="III")
deveria ser melhor. Por favor, deixe-me saber se isso está bem com você.Isso pode parecer um pouco de autopromoção (e acho que sim). Mas desenvolvi um pacote lsmeans para R (disponível no CRAN), projetado para lidar exatamente com esse tipo de situação. Aqui está como isso funciona para o seu exemplo:
Você pode especificar contrastes adicionais na lista, se quiser. Neste exemplo, você obterá os mesmos resultados com o contraste polinomial linear interno:
Para confirmar isso, observe que a
"poly"
especificação direciona a chamadapoly.lsmc
, o que produz estes resultados:Se você deseja fazer um teste conjunto de vários contrastes, use a
test
função comjoint = TRUE
. Por exemplo,Isso produzirá um teste "tipo III". Ao contrário
car::Anova()
, ele será feito corretamente, independentemente da codificação de contraste usada no estágio de ajuste do modelo. Isso ocorre porque as funções lineares que estão sendo testadas são especificadas diretamente, e não implicitamente, através da redução do modelo. Uma característica adicional é que um caso em que os contrastes que estão sendo testados são linearmente dependentes é detectado e a estatística de teste correta e os graus de liberdade são produzidos.fonte
Você pode dar uma olhada nesta postagem do blog:
Obter os mesmos resultados de ANOVA em R e no SPSS - as dificuldades com as somas de quadrados Tipo II e Tipo III
( Spoiler: adicione
options(contrasts=c("contr.sum", "contr.poly"))
no início do seu script)fonte
Quando você está fazendo contrastes, está fazendo uma combinação linear específica declarada de médias de células no contexto do termo de erro apropriado. Como tal, o conceito de "Tipo de SS" não tem significado para contrastes. Cada contraste é essencialmente o primeiro efeito usando um SS Tipo I. "Tipo de SS" tem a ver com o que é parcial ou explicado pelos outros termos. Para contrastes, nada é dividido ou contabilizado. O contraste permanece por si só.
fonte
O fato de os testes do tipo III serem usados no seu local de trabalho é o mais fraco dos motivos para continuar usando-os. O SAS causou grandes danos às estatísticas nesse sentido. A exegese de Bill Venables, mencionada acima, é um ótimo recurso. Apenas diga não ao tipo III; baseia-se em uma noção defeituosa de equilíbrio e tem menor poder devido ao peso tolo das células no caso de desequilíbrio.
Uma maneira mais natural e menos propensa a erros de obter contrastes gerais e de poder descrever o que você fez é fornecida pela função do
rms
pacote R.contrast.rms
Os contrastes podem ser muito complexos, mas para o usuário são muito simples porque são declarados em termos de diferenças nos valores preditivos. Testes e contrastes simultâneos são suportados. Ele lida com efeitos de regressão não lineares, efeitos de interação não lineares, contrastes parciais, todo tipo de coisa.fonte
Experimente o comando Anova na biblioteca de carros. Use o argumento type = "III", pois o padrão é o tipo II. Por exemplo:
fonte
Também autopromotora, escrevi uma função para exatamente isso: https://github.com/samuelfranssens/type3anova
Instale da seguinte maneira:
Você também precisará ter o
car
pacote instalado.fonte