Obrigado Walmes!
Eu encontrei um post criado por você no "ridículas" e tentei adaptar para o meu problema.
Não tenho certeza se está adequado. Acho que não. O motivo é que encontrei interação dupla significativa entre "meio" e "tipo" e no desdobramento final, para identificar os níveis onde há diferença significativa, esta diferença não aparece ( "valor-p" sempre igual a 1).
Segue o CMR e agradeço mais uma vez a atenção.
https://www.dropbox.com/s/ci4u8c4vn4cmk4l/dados.txt?dl=0
require(multcomp)
require(doBy)

dados <- read.table("dados.txt",header=TRUE, sep="\t")
str(dados)
attach(dados)
xtabs(~genotipo+meio+tipo, dados)
## Interação.
dados$gmt <- interaction(genotipo, meio, tipo)
attach(dados)
levels(gmt)
#Modelo fatorial completo
m0 = glm(cbind(good=n_ex_ox, bad=n_explant-n_ex_ox)~genotipo*meio*tipo,family="quasibinomial", data=dados)
par(mfrow=c(2,2))
plot(m0)
anova(m0,test="F")
drop1(m0, test="F", scope=.~.)

#Modelo só com efeito de primeira grau
m1 <- update(m0, .~genotipo+meio+tipo)
anova(m1, m0,test="F")


## Modelo só com efeitos até segundo grau.
m2 <- update(m0, .~(genotipo+meio+tipo)^2)
anova(m2, test="F")
anova(m2, m0,test="F")
par(mfrow=c(2,2))
plot(m2)

##Obs: Estou estudando o modelo logístico com superdispersão constante para melhorar os resíduos deste modelo. Por enquanto vou utilizar o modelo completo

do.call(rbind, strsplit(levels(dados$gmt),"\\."))

M <- LSmatrix(m0, effect=c("tipo","meio"))
dim(M)
class(M)

grid <- attr(M, "grid")

## Matriz de contrastes 
## Antes executar a Função apc
apc <- function(pmc, lev=NULL){
  ## apc: all pairwise contrasts, pmc: popMatrix contrast
  nlev <- nrow(pmc)
  rn <- rownames(pmc)
  a <- attr(pmc, "grid")
  if(is.null(lev)){
      if(!is.null(a)){
          lev <- apply(a, 1, paste, collapse=":")
      } else if(!is.null(rn)){
          lev <- rn
      } else {
          lev <- as.character(1:nlev)
      }
  }
  cbn <- combn(seq_along(lev), 2)
  M <- pmc[cbn[1,],]-pmc[cbn[2,],]
  if(is.vector(M)) dim(M) <- c(1, length(M))
  rownames(M) <- paste(lev[cbn[1,]], lev[cbn[2,]], sep="-")
  M
}
#Matriz de contrastes entre níveis de `focus` dentro dos níveis de `split`.
split <- c("meio")
focus <- "tipo"
spl <- interaction(grid[,split])
i <- 1:nrow(grid)
l <- split(i, f=spl)
contr <- lapply(l,
                function(row){
                    ## Matriz de contrastes par a par.
                    a <- apc(M[row,], lev=levels(dados[,focus]))
                    ## Prefixo no nome das linhas.
                    rownames(a) <- paste(spl[row[1]],
                                         rownames(a), sep="/")
                    return(a)
                })
contr <- do.call(rbind, contr)

summary(glht(m0, linfct=contr),test=adjusted(type="fdr"))


Em 30 de outubro de 2014 10:22, walmes . <walmeszeviani@gmail.com> escreveu:
Minha sugestão ou modelo de trabalhar é considerar funções do pacote doBy com multcomp. Basicamente a doBy::LSmatrix() vai te gerar uma matriz que você vai converter em matriz de contrastes e passar para multcomp::glht(). A glht() admite objetos de classe lm, glm, lme. O detalhe para objetos glm é que as "médias" e comparações são na escala do preditor linear, ou seja, quando você pedir LSmeans() para um binomial não será retornado "média" mas sim o valor esperado de log(1/(1-p)) = X%*%beta, mas aí é só converter em probabilidade com a função inversa da função de ligação. Seguem links que podem servir de inspiração.

http://www.leg.ufpr.br/~walmes/analises/MESerafim/abacaxi/abacaxisolo.html
http://www.leg.ufpr.br/~walmes/cursoR/geneticaEsalq/script10.html

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