Boa noite Walmes, obrigado pela pronta resposta!

É provável que não estejamos falando do mesmo tipo de ANCOVA (Análise de 
covariância). No entanto, como você está anos luz a frente, solucione algumas 
dúvidas primeiro para que eu não fale besteira. Eu não entendi a seguinte 
pedaço de frase:``você deve definir antecipadamente em que nível(is) de x quer 
comparar níveis de F.'' O tipo de ANCOVA que estou falando, não tem sentido 
comparar níveis de um grupo para um determinado nível de covariável, afinal de 
contas ela é quantitativa e sua inclusão foi muito bem explicada por você nos 
trechos acima. O fato de incluirmos a interação entre a covariável e o fator é 
devido a intenção de avaliar se será necessário ajustar as médias considerandos 
slopes diferentes (caso dê significativo), ou se considera um slope comum na 
correção das médias. Até cheguei cogitar de no ítem `` médias populacionais 
marginais em x=0.5'', você ter considerado x=0.5 como um slope comum para ajuste
 das médias, mais pelos resultados, creio que não foi essa a intenção. Vamos 
pegar o gancho do seu CRM, e discutindo ao longo das análises para que eu possa 
me fazer entender.

Considerando já todo o enredo brilhantemente explicado por ti de acordo com o 
CRM temos o seguinte modelo:

ac0 <- glm(y~F*x, data=da, family=poisson)
anova(ac0, test="Chisq")

De acordo com os resultados, há a necessidade de se ajustar as médias 
considerando uma regressão diferente para cada grupo. E de fato, os slopes são 
diferentes estimados para cada grupo.

Graficamente, de fato:

require(lattice)
xyplot(y~x, groups=F, data=da, type="a")

Analiticamente, de fato:

slopes <- list()
for(i in 1:5){
    slopes[[i]] <- coef(glm(y ~ x, data=subset(da,F==i)))[2]
}
slopes

Segundo a literatura, o ideal é que ao se comparar as médias, estas devem estar 
ajustadas para as covariáveis (caso ela for significativa é claro). Então ao 
invés de eu comparar estas médias:

with(da, tapply(y, F, mean))

e devo comparar estas médias:

novamedia_F1 <- with(da,mean(y[F==1])) - 
(exp(as.numeric(slopes[1]))*(with(da,mean(x[F==1]))-mean(da$x)))
novamedia_F2 <- with(da,mean(y[F==2])) - 
(exp(as.numeric(slopes[2]))*(with(da,mean(x[F==2]))-mean(da$x)))
novamedia_F3 <- with(da,mean(y[F==3])) - 
(exp(as.numeric(slopes[3]))*(with(da,mean(x[F==3]))-mean(da$x)))
novamedia_F4 <- with(da,mean(y[F==4])) - 
(exp(as.numeric(slopes[4]))*(with(da,mean(x[F==4]))-mean(da$x)))
novamedia_F5 <- with(da,mean(y[F==5])) - 
(exp(as.numeric(slopes[5]))*(with(da,mean(x[F==5]))-mean(da$x)))

rbind(novamedia_F1,novamedia_F2,novamedia_F3,novamedia_F4,novamedia_F5)

E a grande pergunta: Como eu posso fazer isso no R?


 

\begin{signature}
<<>>=
Prof. Dr. Ivan Bezerra Allaman
Universidade Estadual de Santa Cruz
Departamento de Ciências Exatas e Tecnológicas
Ilhéus/BA - Brasil
Fone: +55 73 3680-5596
E-mail: [email protected]/[email protected]
@
\end{signature}


________________________________
 De: Walmes Zeviani <[email protected]>
Para: [email protected]; Ivan Bezerra Allaman <[email protected]> 
Enviadas: Quarta-feira, 9 de Maio de 2012 16:05
Assunto: Re: [R-br] Teste de médias em GLMM com covariável!
 

Ivan,

Vamos primeiro primeiro apodar as arestas a fim de fazer a coisa rolar. Você 
tem um experimento com um fator de 5 níveis nominais, denominado de F. Cada 
animal é uma unidade experimental do qual se observa uma resposta y e uma 
covariável x. Acredita-se que x afeta y e portanto quer-se remover esse efeito 
para poder estudar a variação explicada por F. Pode-se supor que F e x tenham 
efeitos aditivos (sem interação) ou pode-se assumir que existe interação. Na 
ausência de interação as diferenças entre níveis de F são as mesmas sem 
importar o nível de x, mas o mesmo não vale para presença de interação, de 
forma que, você deve definir antecipadamente em que nível(is) de x quer 
comparar níveis de F. Não sei o CMR é exatamente o que você tem, pois o CMR não 
parece ser um caso de modelo misto porque animal é a unidade experimental e não 
um fator de agrupamento (embora para Poisson este seja um modelo estimável), 
enfim... vou
 considerar um glm fixo, daí é só fazer as devidas extensões para o glmm.

da <- data.frame(F=gl(5,20), x=runif(5*20))
da$Ey <- with(da, exp(1+as.numeric(F)/2+(as.numeric(F)-2)/3*x))
da$y <- with(da, rpois(F, lambda=exp(1+as.numeric(F)/2+(as.numeric(F)-2)/3*x)))
with(da, tapply(y, F, mean))

require(lattice)
xyplot(y~x, groups=F, data=da, type="a")

ac0 <- glm(y~F*x, data=da, family=poisson)
anova(ac0, test="Chisq")
betas <- coef(ac0)

require(doBy)
# médias populacionais marginais em x=0.5
mpm <- popMatrix(ac0, effect="F", at=list(x=0.5))
mpm%*%betas
exp(mpm%*%betas)

# diferença nas médias populacionais marginais duas à duas
nlevels(da$F)
comp <- t(combn(1:nlevels(da$F), 2))
rownames(comp) <- apply(comp, 1, paste, collapse="-")

dmpm <- t(apply(comp, 1, function(vs) mpm[vs[1],]-mpm[vs[2],]))
rownames(dmpm) <- rownames(comp)

apply(dmpm, 1, function(x) x%*%betas)

require(multcomp)
summary(glht(ac0, linfct=mpm))  # médias populacionais marginais
summary(glht(ac0, linfct=dmpm)) # contraste entre as médias populacionais 
marginais

# na verdade isso não é a média, mas sim o exp() disso

E é isso aí Ivan. Esse procedimento aí que fiz foi o que deixou um determinado 
software famoso por dar esses resultados aos usuários. Trata-se de algo que, 
depois de fazer pela primeira vez e entender, passa a ser trivial.

À 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: [email protected]
twitter: @walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================
_______________________________________________
R-br mailing list
[email protected]
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.

Responder a