Ajuda para realizar post-hoc em Anova de Medidas repetidas.

Ola, pessoal eu estou apanhando aqui para conseguir realizar uma analise de contrastes pra poder dizer que os resultados do Dia 1 são iguais do Dia 2, ai so no Dia 3 começa a aumentar. Eu vi um exemplo usando a função gls do pacote nlme, mas não consegui reproduzir pra conseguir verificar o que falo acima. Se alguém puder indicar um tutorial ou algum texto não muito complicado sobre como avaliar contrastes para anova de medidas repetidas, muito me ajudaria. Segue um exemplo dos dados: #Criandos dados set.seed(1) Resposta<-c(rnorm(20,2),rnorm(10,5),rnorm(20,5),rnorm(10,8)) Perigo<-rep(c("Baixo","Alto"),each=30) Id<-c(rep(1:10,3),rep(11:20,3)) Dia<-rep(rep(1:3,each=10),2) dados<-data.frame(cbind(Perigo,Dia,Id,Resposta)) dados$Resposta<-as.numeric(levels(dados$Resposta))[dados$Resposta] #Olhando os dados com um grafico str(dados) library(lattice) xyplot(Resposta~Dia|Perigo,data=dados, pch=16, col="black", cex=1.3, strip=strip.custom(bg="white"),type=c("p","a"),scale=list(tck=c(1,0),alternating=1)) #Anova de medidas repetidas modelo<-aov(Resposta~Perigo*Dia+Error(Id),data=dados) summary(modelo) -- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056

Augusto, Com a função aov() você não está apropriadamente ajustando um modelo para contemplar as medidas repetidas. A aov() implica em uma estrutura simétrica composta. É mais realista usar uma estrutura de covariância entre as observações na qual a correlação diminua com o intervalo de separação (temporal, espacial). Você pode ajustar um modelo linear assim com a nlme::gls() declarando alguma estrutura de correlação para o argumento correlation= dessa função. Veja ?corClasses. Para aplicar o teste você pode usar a gmodels::estimable(), gmodels::fit.contrast(), contrast::contrast(), multcomp::glht(). Não tenho certeza se todas tem métodos para objetos da classe gls. Uma pergunta para estimular o pensamento: se você pode assumir que a correlação diminui continuamente com o intervalo de tempo, para quê fazer teste de média se você pode também modelar a sua resposta como uma função contínua no tempo? À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Ola pessoal. Estou aqui ainda muito confuso com o que estou fazendo. Alguém poderia dar uma olhadinha pra ver se estou no caminho certo? E outra coisa eu não consigo arrumar a matriz de contrastes para testar o que eu quero. Segue um cmr do que to fazendo. E boa sexta feira a todos :) #Criandos dados set.seed(1) Resposta<-c(rnorm(20,2),rnorm(10,5),rnorm(20,5),rnorm(10,8)) Perigo<-rep(c("Baixo","Alto"),each=30) Id<-c(rep(1:10,3),rep(11:20,3)) Dia<-rep(rep(1:3,each=10),2) dados<-data.frame(cbind(Perigo,Dia,Id,Resposta)) dados$Resposta<-as.numeric(levels(dados$Resposta))[dados$Resposta] str(dados) #Olhando os dados com um grafico library(lattice) xyplot(Resposta~Dia|Perigo,data=dados, pch=16, col="black", cex=1.3, strip=strip.custom(bg="white"),type=c("p","a"),scale=list(tck=c(1,0),alternating=1)) #Anova de medidas repetidas modelo<-aov(Resposta~Perigo*Dia+Error(Id),data=dados) summary(modelo) #Legal é diferente os dias e o tratamento, mas quão diferente? #tentando avaliar isso. #arrumando os dados pra usar a função gls library(nlme) dados.gls<-groupedData(Resposta~as.numeric(Perigo)*as.numeric(Dia)|Id,data=dados) #testando os varios modelos de estrutura de variancia-covariancia #Modelo Compound Symmetry fit.cs<-gls(Resposta~Perigo*Dia,data=dados.gls, corr=corCompSymm(,form=~1|Id)) summary(fit.cs) #Modelo Unstructured fit.un<-gls(Resposta~Perigo*Dia,data=dados.gls, corr=corSymm(form=~1|Id),weights=varIdent(form=~1|Dia)) summary(fit.un) #Modelo Autoregressive fit.ar1<-gls(Resposta~Perigo*Dia,data=dados.gls, corr=corAR1(,form=~1|Id)) summary(fit.ar1) #Modelo Autoregressive with heterogeneous variances fit.arh1<-gls(Resposta~Perigo*Dia,data=dados.gls, corr=corAR1(,form=~1|Id),weight=varIdent(form=~1|Dia)) summary(fit.arh1) #Comparando os modelos anova(fit.cs, fit.un) #pq aqui ele nao faz teste? anova(fit.cs, fit.ar1) anova(fit.cs, fit.arh1) #Compound Symetry é o melhor pois é mais simples e ninguem foi muito diferente #no AIC, ou seja ele é mais simples e explica bem e "ninguem" é diferente dele. #So que o que vejo é comparar tudo com o Alto dia 1 summary(fit.cs) #O valor do intercept é referente a media do alto Perigo do dia 1 certo? # todos os valores são comparados com ele... aggregate(dados$Resposta,list(dados$Perigo,dados$Dia),mean) #logo o perigo baixo do dia(PerigoBaixo) 1 é diferente. #Perigo alto dia 2(Dia2) é igual #mas dia 3 é diferente, o perigo baixo dia 2 não deveria ser diferente #e o PerigoBaixo:Dia3 igual? #aqui ja me perdi e nao entendo o que ta acontecendo #E Eu queria comparar os dias 1 entre eles, os dias 2 entre eles #e os dias 3 entre eles.. #Tipo perigos no dia 1, perigos nos dia 2 e nos dia 3, tem como mudar #a matriz de contrastes pra adaptar a essa pergunta? contrasts(dados$Dia) Em 22 de novembro de 2011 16:35, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Augusto,
Com a função aov() você não está apropriadamente ajustando um modelo para contemplar as medidas repetidas. A aov() implica em uma estrutura simétrica composta. É mais realista usar uma estrutura de covariância entre as observações na qual a correlação diminua com o intervalo de separação (temporal, espacial). Você pode ajustar um modelo linear assim com a nlme::gls() declarando alguma estrutura de correlação para o argumento correlation= dessa função. Veja ?corClasses. Para aplicar o teste você pode usar a gmodels::estimable(), gmodels::fit.contrast(), contrast::contrast(), multcomp::glht(). Não tenho certeza se todas tem métodos para objetos da classe gls. Uma pergunta para estimular o pensamento: se você pode assumir que a correlação diminui continuamente com o intervalo de tempo, para quê fazer teste de média se você pode também modelar a sua resposta como uma função contínua no tempo?
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056

Augusto, Você deve crias os contrastes de Tukey. Não há função para isso. Você deve criar exatamente da maneira como você quer comparar, ou seja, pelas suas explicações, comparar níveis de B (pairwise) fixando níveis de A. Combinando as funções que o R possui (combn, apply, contrast, multcomp) a tarefa fica simples. da <- expand.grid(A=gl(3,1), B=gl(4,4)) da$y <- rnorm(nrow(da)) require(nlme) m0 <- gls(y~A*B, da) anova(m0) # comparar níveis (pairwise) de B fixando nível de A (contrastes de Tukey) choose(nlevels(da$B), 2) # número de comparações cpr <- combn(nlevels(da$B), 2); cpr # as comparações Blev <- levels(da$B) Alev <- levels(da$A) cpr.names <- paste("B", cpr[1,], "-", "B", cpr[2,], sep="") require(contrast) cpr.list <- lapply(cpr.list, t) cpr.list # matriz de contrastes de Tukey entre B fixando A c0 <- apply(cpr, 2, function(i){ c1 <- contrast(m0, list(A=Alev[1], B=Blev[i[1]]), list(A=Alev[1], B=Blev[i[2]])) c1$X }) colnames(c0) <- paste("A", Alev[1], "/", cpr.names, sep="") c0 require(multcomp) glht(m0, linfct=t(c0)) # repetir para os demais níveis de A À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Omg. Vida difícil. Não consigo instalar o pacote 'contrast" Como foi comentado em outro e-mail, ele necessita do pacote Design, que foi descontinuado. Ai eu fui la e baixei a ultima versão no link do R que o Benilton comentou no outro e-mail Ai quando vou instalar a partir do zip da o seguinte erro: ##########################################################################
utils:::menuInstallLocal() Erro em read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) : não é possível abrir a conexão Além disso: Mensagens de aviso perdidas: 1: In unzip(zipname, exdir = dest) : erro 1 na extração a partir de arquivo zip 2: In read.dcf(file.path(pkgname, "DESCRIPTION"), c("Package", "Type")) : não foi possível abrir o arquivo comprimido 'Design_2.3-0.tar.gz/DESCRIPTION', motivo provável 'No such file or directory' #######################################################################################################
Mas esse arquivo DESCRIPTION ta la dentro do arquivo compactado do pacote, eu fui la olhar, não sei o que acontece. Dei um sys.info() pra ver se ajudo. ###
Sys.info() sysname release "Windows" "7" version nodename "build 7601, Service Pack 1" "AUGUSTO_NOTE" machine login "x86" "Augusto Notebook" user effective_user "Augusto Notebook" "Augusto Notebook" ###
To vendo que ta chegando a hora de mudar pro linux... Em 25 de novembro de 2011 10:56, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Augusto,
Você deve crias os contrastes de Tukey. Não há função para isso. Você deve criar exatamente da maneira como você quer comparar, ou seja, pelas suas explicações, comparar níveis de B (pairwise) fixando níveis de A. Combinando as funções que o R possui (combn, apply, contrast, multcomp) a tarefa fica simples.
da <- expand.grid(A=gl(3,1), B=gl(4,4)) da$y <- rnorm(nrow(da))
require(nlme)
m0 <- gls(y~A*B, da) anova(m0)
# comparar níveis (pairwise) de B fixando nível de A (contrastes de Tukey) choose(nlevels(da$B), 2) # número de comparações cpr <- combn(nlevels(da$B), 2); cpr # as comparações
Blev <- levels(da$B) Alev <- levels(da$A) cpr.names <- paste("B", cpr[1,], "-", "B", cpr[2,], sep="")
require(contrast)
cpr.list <- lapply(cpr.list, t) cpr.list # matriz de contrastes de Tukey entre B fixando A
c0 <- apply(cpr, 2, function(i){ c1 <- contrast(m0, list(A=Alev[1], B=Blev[i[1]]), list(A=Alev[1], B=Blev[i[2]])) c1$X }) colnames(c0) <- paste("A", Alev[1], "/", cpr.names, sep="") c0
require(multcomp) glht(m0, linfct=t(c0)) # repetir para os demais níveis de A
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Grato Augusto C. A. Ribas Site Pessoal: http://augustoribas.heliohost.org Lattes: http://lattes.cnpq.br/7355685961127056

Eu uso Linux e minha instalação do Design (a partir do arquivo tar.gz) não apresentou problemas. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
participantes (2)
-
Augusto Ribas
-
Walmes Zeviani