Anova multiponto de medidas repetidas não paramétricas em R?

16

A pergunta a seguir é um daqueles grails sagrados para mim há algum tempo, espero que alguém possa oferecer um bom conselho.

Desejo executar uma multiova anova de medidas repetidas não paramétricas usando R.

Venho pesquisando e lendo on-line há algum tempo e até agora consegui encontrar soluções para apenas alguns dos casos: teste de friedman para uma maneira não paramétrica de medidas repetidas anova, regressão ordinal com {car} função Anova para função não-paramétrica de várias maneiras anova e assim por diante. As soluções parciais NÃO são o que estou procurando neste tópico de perguntas. Resumi minhas descobertas até agora em um post publicado há algum tempo (intitulado: Medidas repetidas ANOVA com R (funções e tutoriais) , caso isso ajudasse alguém)


Se o que eu leio online for verdadeiro, essa tarefa poderá ser realizada usando um modelo misto de regressão ordinal (também conhecido como: Modelo de Probabilidades Proporcionais).

Encontrei dois pacotes que parecem relevantes, mas não consegui encontrar nenhuma vinheta sobre o assunto:

Sendo novo no assunto, eu esperava algumas orientações das pessoas daqui.

Existe algum tutorial / leitura sugerida sobre o assunto? Melhor ainda, alguém pode sugerir um código de exemplo simples para executar e analisar isso em R (por exemplo: "medidas repetidas não paramétricas multiway anova")?

Tal Galili
fonte
Tal, posso perguntar se você encontrou uma solução para isso? Estou com o mesmo problema e as respostas abaixo podem ser úteis para ajudar a encontrar uma resposta, mas na verdade não fornecem uma resposta definitiva. Eu tenho 9 DVs ordinais e 2 pontos no tempo, e estou procurando o mesmo teste que você queria realizar.
Torvon
1
Oi Torvon. Eu nunca encontrei uma solução. Acho que os testes de permutação serão a rota mais segura, mas nunca tive tempo para sentar e fazê-lo funcionar. Se sim, por favor, volte a postar sua resposta. Cheers, T
Tal Galili
Obrigado pela sua resposta rápida. Vou ter que resolver isso e avisá-lo.
Torvon 06/07/2013

Respostas:

8

O pacote ez , do qual sou o autor, tem uma função chamada ezPerm () que calcula um teste de permutação, mas provavelmente não faz interações corretamente (a documentação admite isso). A versão mais recente possui uma função chamada ezBoot (), que permite fazer a reamostragem de autoinicialização que leva em consideração medidas repetidas (reamostrando assuntos e depois dentro dos sujeitos), usando meios tradicionais de célula como estatística de previsão ou usando modelagem de efeitos mistos para fazer previsões para cada célula no design. Ainda não tenho certeza de quão "não paramétricos" são os ICs de autoinicialização das previsões do modelo de efeitos mistos; minha intuição é que eles possam ser razoavelmente considerados não paramétricos, mas minha confiança nessa área é baixa, pois ainda estou aprendendo sobre modelos de efeitos mistos.

Mike Lawrence
fonte
Olá Mike. Obrigado pela resposta e pelo seu pacote - é realmente ótimo!
Tal Galili
@ Mike, seu pacote parece ser o único que funciona para projetos mistos de múltiplos fatores. A aovpalternativa - do lmpermpacote órfão - produz grandes variações para os valores de p, veja isso . Tenho algumas perguntas: Onde posso encontrar referências bibliográficas para a implementação ezPerm? Como posso interpretar que a função provavelmente não faz interações corretamente ? O que poderia ser um teste post-hoc nesse caso? Obrigado!
Toto_tico 11/11/2015
@ Mike, algo como ezPerm( data = DATA, dv = DV, wid = WID, within = interaction(A,B), perms = 1e3)faria sentido verificar novamente se a interação é significativa?
Toto_tico 11/11/2015
5

Em caso de dúvida, inicialize! Realmente, não conheço um procedimento fixo para lidar com esse cenário.

O bootstrapping é uma maneira geralmente aplicável de gerar alguns parâmetros de erro a partir dos dados disponíveis. Em vez de confiar nas premissas paramétricas típicas, os procedimentos de bootstrap aproveitam as características da amostra para gerar uma distribuição empírica com a qual as estimativas da amostra podem ser comparadas.

O Google Scholar é ouro ... já foi feito antes ... pelo menos uma vez.

Lunneborg, Clifford E .; Tousignant, James P .; 1985 "Bootstrap de Efron com aplicação ao projeto de medidas repetidas". Pesquisa Comportamental Multivariada; 85, abr. 20 Edição 2, p161, 18p

Brett
fonte
1
Obrigado pela liderança Brett! Gostaria de saber se alguém conseguiu implementá-lo agora no R (acho que não).
Tal Galili
1
Certo. O R tem muitas rotinas para ajudar com o bootstrap e outros métodos de randomização, mas não sei se você encontrará algo específico para esse problema.
Brett
Primeira frase muito boa. Espero que não seja protegido por direitos autorais, porque pretendo usá-lo: D
gui11aume
0

Há um "truque" mencionado em alguns fóruns e listas de discussão - eu também o encontrei mencionado no livro de Joop Hox "Multilevel Analysis" (segunda edição, 2010), pp. 189.

A idéia é: você reformata seus dados longos em um conjunto de dados longo e longo, no qual cria um novo DV que inclui todas as suas respostas de DV e usa uma variável de índice que contém informações sobre a natureza dos DVs para prever esse resultado.

Vamos supor que você tenha 9 sintomas de depressão (ordinal), 2 pontos de medição e 300 indivíduos. Portanto, enquanto você tem 300 linhas em seu conjunto de dados normal e em seu longo conjunto de dados, 600 linhas, esse novo conjunto de dados terá 9 (sintomas) x 2 (tempo) x 300 (assuntos).

A nova variável DV "sintomas" agora contém a gravidade dos participantes em 9 sintomas, as variáveis ​​"índice" contêm as informações sobre a natureza do sintoma (1 a 9) e as duas variáveis ​​"tempo" e "tempo" ID do usuário".

Agora você pode usar o ordinalpacote para executar isso.

data<-read.csv("data_long_long.csv", head=T)

data$symptoms <- factor(data$symptoms)
data$time <- factor(data$time)
data$index <-factor(data$index)

m1<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)

No meu caso específico, eu estava interessado em saber se havia uma interação significativa entre índice e tempo, então executei um modelo adicional e os comparei:

m2<-clmm2(symptoms ~ index+time, random=UserID, data = data, Hess=TRUE, nAGQ=10)
anova(m1,m2)

O CLMM2 usa um modelo de interceptação aleatória (que seja do meu conhecimento, o pacote ordinalnão faz inclinações aleatórias); se você não usar um modelo de interceptação aleatória, poderá executar os modelos usando o CLM, por exemplo:

m3<-clm(symptoms ~ index+time, data = data)
Torvon
fonte
1
não são m1 e m2 exatamente iguais, talvez você quis dizer clmm2(symptoms ~ index*time, random=UserID, data = data, Hess=TRUE, nAGQ=10) anova(m1,m2). Você sabe por acaso como expressar isso com a nova função clmm? Não tenho certeza sobre a notação.
Toto_tico