Desdobramento de vários níveis dentro de um fator

Caros Listeiros, Estou tentando utilizar a função apc do Walmes para fazer um desdobramento de 26 níveis dentro de um fator, a função dele ajuda muita a fugir da montagem manual de contrastes, funcionou muito bem para interações duplas e triplas, mas para investigar um nível não estou conseguindo, já quebrei a cabeça e quando chego no momento de montar os níveis dentro dele mesmo quando tento criar o objeto contr recebo a mensagem: Erro em pmc[cbn[1, ], ] : número incorreto de dimensões Baseado no CRM abaixo alguém pode me ajudar? Obrigado ##----------------------------------------------------------------------------- require(multcomp) require(doBy) require(latticeExtra) ## apc: build all pairwise comparisons matrix by a LSmatrix. source("apc.r") ##----------------------------------------------------------------------------- d <- data.frame(a=factor(sample(c(paste("Tratamento_",letters,sep="")), 1000, rep=TRUE))) xtabs(~a, d) d$y <- rpois(nrow(d), lambda=10) ## Interação. d$a.int <- interaction(d$a) levels(d$a.int) ## O padrão de funcionamento faz assim, o primeiro fator troca níveis ## dentro do segundo que troca níveis dentro do terceiro, etc, veja. do.call(rbind, strsplit(levels(d$a.int), "\\.")) ## Sabendo disso você pode passar da a, b e c na forma que lhe for mais ## conveniente. Por outro lado, é desperdício de tempo operar assim ## porque eu considero mais fácil declarar o modelo fatorial, usar a ## LSmatrix para gerar a matriz de contraste e usá-la. g0 <- glm(y~a, family="poisson", data=d) g1 <- glm(y~0+d$a.int, family="poisson", data=d) M <- LSmatrix(g0, effect=c("a")) M ## As estimativas das médias (na escala do preditor linear). data.frame(g0=M%*%coef(g0), g1=coef(g1)) ## Combinações de níveis correspondentes as médias. str(M) grid <- attr(M, "grid") ## Matriz de contrastes entre níveis de `focus` dentro dos níveis de ## `split`. trat <- "a" trat <- "a" 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(d[,trat])) ## Prefixo no nome das linhas. rownames(a) <- paste(spl[row[1]], rownames(a), sep="/") return(a) }) contr <- do.call(rbind, contr) contr ## Constrastes. summary(glht(g0, linfct=contr), test=adjusted(type="fdr")) -- ====================================================================== 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 ====================================================================== --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com

Alexandre, No seu CMR tem-se um fator apenas. Você não precisa de "a" e "a.int", eles são iguais. Será que não é a versão da apc que você tem? Ela tem sido aprimorada, está no meu pacote wzRfun, disponível do www.github.com/walmes/wzRfun. A mais recente tá assim: ## wzRfun::apc apc <- function (lfm, lev = NULL) { nlev <- nrow(lfm) rn <- rownames(lfm) a <- attr(lfm, "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 <- lfm[cbn[1, ], ] - lfm[cbn[2, ], ] if (is.vector(M)) dim(M) <- c(1, length(M)) rownames(M) <- paste(lev[cbn[1, ]], lev[cbn[2, ]], sep = "-") return(M) } À disposição. Walmes.

Obrigado Walmes, mas os contrastes não pareceram ficar muito corretos, sendo meu CRM corrigido: ##----------------------------------------------------------------------------- require(multcomp) require(doBy) require(latticeExtra) require(wzRfun) ##----------------------------------------------------------------------------- d <- data.frame(a=factor(sample(c(paste("Tratamento_",letters,sep="")), 1000, rep=TRUE))) xtabs(~a, d) d$y <- rpois(nrow(d), lambda=10) ##Niveis levels(d$a) ## O padrão de funcionamento faz assim, o primeiro fator troca níveis ## dentro do segundo que troca níveis dentro do terceiro, etc, veja. do.call(rbind, strsplit(levels(d$a), "\\.")) ## Sabendo disso você pode passar da a, b e c na forma que lhe for mais ## conveniente. Por outro lado, é desperdício de tempo operar assim ## porque eu considero mais fácil declarar o modelo fatorial, usar a ## LSmatrix para gerar a matriz de contraste e usá-la. g0 <- glm(y~a, family="poisson", data=d) g1 <- glm(y~0+d$a, family="poisson", data=d) M <- LSmatrix(g0, effect=c("a")) M ## As estimativas das médias (na escala do preditor linear). data.frame(g0=M%*%coef(g0), g1=coef(g1)) ## Combinações de níveis correspondentes as médias. str(M) grid <- attr(M, "grid") ## Matriz de contrastes entre níveis de `focus` dentro dos níveis de ## `split`. trat <- "a" spl <- interaction(grid[,trat]) i <- 1:nrow(grid) l <- split(i, f=spl) contr <- lapply(l, function(row){ ## Matriz de contrastes par a par. a <- apc(M[,i], lev=levels(d[trat,])) ## Prefixo no nome das linhas. rownames(a) <- paste(spl[row[1]], rownames(a), sep="/") return(a) }) contr <- do.call(rbind, contr) contr ## Constrastes. summary(glht(g0, linfct=contr), test=adjusted(type="fdr")) On 12/02/2015 13:00, walmes . wrote:
Alexandre,
No seu CMR tem-se um fator apenas. Você não precisa de "a" e "a.int <http://a.int>", eles são iguais. Será que não é a versão da apc que você tem? Ela tem sido aprimorada, está no meu pacote wzRfun, disponível do www.github.com/walmes/wzRfun <http://www.github.com/walmes/wzRfun>. A mais recente tá assim:
## wzRfun::apc apc <- function (lfm, lev = NULL) { nlev <- nrow(lfm) rn <- rownames(lfm) a <- attr(lfm, "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 <- lfm[cbn[1, ], ] - lfm[cbn[2, ], ] if (is.vector(M)) dim(M) <- c(1, length(M)) rownames(M) <- paste(lev[cbn[1, ]], lev[cbn[2, ]], sep = "-") return(M) }_ _ À 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.
-- ====================================================================== 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 ====================================================================== --- Este email foi escaneado pelo Avast antivírus. http://www.avast.com
participantes (2)
-
ASANTOS
-
walmes .