Walmes,

    Foi muito esclarecedor, mas suscitou novas dúvidas quando trabalho com GLM e são duas, sendo: 1) a ordem dos coeficientes em glm e a ordem dos níveis da interação e  2) se eu tivesse um fatorial 2x3x2, sendo as minhas indagações levantadas no CRM abaixo,

#1) Ordem dos coeficientes em glm e a ordem dos níveis da interação

#CRM

require(multcomp)
require(doBy)
require(lattice)

## Dados artificiais - Status (Atacado x Sadio) x Idade(48 x 72)
d <- data.frame(a=factor(sample(c('atacado','sadio'), 100, rep=TRUE)),
                b=factor(sample(c('48','72'), 100, rep=TRUE)))

beta <- c(1,1.2,1,-0.9)
d$y <- rpois(nrow(d), lambda=exp(X%*%beta))

## Crio a interação.
d$ab <- interaction(d$a, d$b)

## Ordem dos níveis
levels(d$ab)

## Ajuste do GLM
glmRes <- glm(y~0+ab, family="poisson", data=d)
coef(glmRes)


Minha dúvida é sempre que ajustar um glm a ordem dos coeficientes, vai ser a mesma que a dos meus levels(d$ab) de forma que a parametrização de meu contraste for o for o primeiro nível "atacado.48"e o segundo "sadio.48" vou especificar o contrate (1, -1, 0, 0) e a matriz resultante vai retornar a média e para os outros níveis sucessivamente?


#2)Se eu tivesse um fatorial 2x3x2

## Dados artificiais - Status (Atacado x Sadio) x Idade(48 x 72 x 96) x Clone (TY01 e VM06)
d <- data.frame(a=factor(sample(c('atacado','sadio'), 100, rep=TRUE)),
                b=factor(sample(c('48','72','96'), 100, rep=TRUE)),
                c= factor(sample(c('TY01','VM06'), 100, rep=TRUE)))

xtabs(~a+b+c, d)
beta <- c(1,1.2,1,-0.9)
d$y <- rpois(nrow(d), lambda=exp(X%*%beta))

## Interação
d$abc<-interaction(d$a, d$b, d$c)

## Ajuste do GLM
glmRes2<- glm(y~0+abc, family="poisson", data=d)
coef(glmRes)

## Especifico os contrastes desejados, neste caso "atacado.48.TY01" e "sadio.48.TY01" (primeiro nível com o segundo)
cntrMat <-   rbind("atacado.48.TY01-sadio.48.TY01"=c(1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))

summary(glht(glmRes2, linfct=mcp(abc=cntrMat)), test=adjusted("none"))


E pergunto se esta especificação de coeficientes esta correta no caso de um fatorial 2x3x2, imaginado a análise em one-way?


Novamente obrigado,

-- 
======================================================================
Alexandre dos Santos
Proteção Florestal 
IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
Campus Cáceres
Caixa Postal 244
Avenida dos Ramires, s/n
Bairro: Distrito Industrial 
Cáceres - MT                      CEP: 78.200-000
Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
e-mails:alexandresantosbr@yahoo.com.br 
        alexandre.santos@cas.ifmt.edu.br 
Lattes: http://lattes.cnpq.br/1360403201088680                   
======================================================================



Em 08/05/2014 08:27, walmes . escreveu:
Alexandre,

Precisa tomar cuidado com a parametrização usualmente imposta em modelo lineares e generalizados para estimar os parâmetros. No R o primeiro nível, por padrão, é assumido como tendo efeito zero, é o contraste tipo tratamento (contr.treatment). É preciso reconhecer isso para montar as matrizes de contraste corretamente. No código abaixo ilustra um pouco disso.

##-----------------------------------------------------------------------------

require(multcomp)
require(doBy)
require(lattice)

## Dados artificiais - Status (Atacado x Sadio) x Idade(48 x 72)
d <- data.frame(a=factor(sample(c('atacado','sadio'), 100, rep=TRUE)),
                b=factor(sample(c('48','72'), 100, rep=TRUE)))
xtabs(~a+b, d)

## Crio a interação.
d$ab <- interaction(d$a, d$b)

X <- model.matrix(~ab, d)
colnames(X)
beta <- c(1,1.2,1,-0.9)

d$y <- rpois(nrow(d), lambda=exp(X%*%beta))

xyplot(y~a, groups=b, data=d, jitter.x=TRUE, type=c("p","a"))

## Ajusto o GLM de Poisson.
glmRes <- glm(y~ab, family="poisson", data=d)
coef(glmRes)

## Para específicar contrastes tem que tomar cuidado com a
## parametrização.

## Específicos os contrastes desejados.
cntrMat <-   rbind("atacado.48-sadio.48"=c(1, -1,  0,  0),
                   "atacado.72-sadio.72"=c(0,  0,  1, -1),
                   "atacado.48-atacado.72"=c(1, 0, 0, -1),
                   "sadio.48-sadio.72"=c(0, 1, 0,  -1))

## Testo os contrastes com função glht do pacote multcomp.
summary(glht(glmRes, linfct=mcp(ab=cntrMat)), test=adjusted("none"))

summary(glht(glmRes, linfct=cntrMat, alternative="two.sided"),
         test=adjusted("none"))

## Pela sua lógica, usando essa matriz deveria retornar as médias (na
## escala do preditor linear) para cada tratamento. Mas não são as médias.
M <- diag(4)
summary(glht(glmRes, linfct=mcp(ab=M)), test=adjusted("none"))
summary(glht(glmRes, linfct=M), test=adjusted("none"))
coef(glmRes)

## Matriz com o coeficientes, já respeitando a parametrização, para
## obter as médias ajustadas na escala do preditor linear
M <- LSmatrix(glmRes, effect="ab")
summary(glht(glmRes, linfct=M), test=adjusted("none"))

## Estimado vs paramétrico.
M%*%coef(glmRes)
M%*%beta

## Se quer facilitar a especificação dos constrastes, declare o modelo
## sem restrições, por exemplo, usando y~0+ab na fórmula.

glmRes <- glm(y~0+ab, family="poisson", data=d)
coef(glmRes)

cntrMat <-   rbind("atacado.48-sadio.48"=c(1, -1,  0,  0),
                   "atacado.72-sadio.72"=c(0,  0,  1, -1),
                   "atacado.48-atacado.72"=c(1, 0, 0, -1),
                   "sadio.48-sadio.72"=c(0, 1, 0,  -1))

summary(glht(glmRes, linfct=mcp(ab=cntrMat)), test=adjusted("none"))
summary(glht(glmRes, linfct=cntrMat), test=adjusted("none"))

##-----------------------------------------------------------------------------

À disposição.
Walmes.


_______________________________________________
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.