diff --git a/R/apc.R b/R/apc.R new file mode 100644 index 0000000000000000000000000000000000000000..151eea8f85a4d0abd01422a705a1f928a21d8fdd --- /dev/null +++ b/R/apc.R @@ -0,0 +1,89 @@ +#' @name apc +#' @export +#' @author Walmes Zeviani baseado na lista de discussão R-help. +#' @title Gera a Matriz de Constrates de Tukey +#' +#' @description Essa função retorna os contrastes de Tukeu entre médias +#' a partir da matriz que define as funções lineares dos +#' coeficientes do modelo para estimar a média de mínimos +#' quadrados. Essas matrizes podem ser utilizadas para fazer +#' contrastes entre médias por meio da função +#' \code{multcomp::glht()}. +#' +#' @param lfm Uma matriz de dimensões \eqn{k\times p} onde cada linha +#' tem os coeficientes correspondentes para estimar uma média. Essas +#' matrizes são facilmente obtidas com usando a função +#' \code{doBy::LSmatrix()}. +#' +#' @param lev Um vetor com os nomes dos níveis do fator para o qual +#' correspondem as linhas da matriz usada em \code{lfm}. Portanto, o +#' número de elementos do vetor deve ser igual ao número de linhas +#' da matriz. O valor default é \code{NULL} e então é usado o +#' \code{rownames()} da matriz. Se \code{rownames()} for +#' \code{NULL}, uma sequência de números começando em 1 é utilizada +#' para representar cada linha. +#' +#' @return Uma matriz \eqn{r\times p} cujas linhas estimam o contraste +#' entre cada possível par de médias, portanto \eqn{r} is +#' \eqn{{k}\choose{2}}. +#' +#' @seealso \code{\link[doBy]{LSmatrix}}. +#' @import doBy multcomp +#' @examples +#' +#' X <- diag(3) +#' rownames(X) +#' apc(X) +#' +#' rownames(X) <- LETTERS[nrow(X):1] +#' apc(X) +#' +#' apc(X, lev = LETTERS[1:nrow(X)]) +#' +#' #----------------------------------------- +#' # Usando para estimar as médias e contrates. +#' +#' xtabs(~tension + wool, data = warpbreaks) +#' +#' warpbreaks <- transform(warpbreaks, +#' trt = interaction(tension, wool)) +#' +#' m0 <- lm(log(breaks) ~ trt, data = warpbreaks) +#' anova(m0) +#' +#' library(doBy) +#' +#' L <- LSmatrix(m0, effect = "trt") +#' L +#' +#' K <- apc(L) +#' K +#' +#' library(multcomp) +#' +#' glht(m0, linfct = L) +#' glht(m0, linfct = K) +#' +#' aggregate(cbind(log(breaks)) ~ trt, data = warpbreaks, FUN = mean) +#' +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, MARGIN = 1, FUN = paste, collapse = ":") + } else if (!is.null(rn)) { + lev <- rn + } else { + lev <- as.character(1:nlev) + } + } + cbn <- combn(x = seq_along(lev), m = 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) +} diff --git a/man/apc.Rd b/man/apc.Rd new file mode 100644 index 0000000000000000000000000000000000000000..d8f3f1fe9a770236ace551566a33f4bf0e107d81 --- /dev/null +++ b/man/apc.Rd @@ -0,0 +1,80 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/apc.R +\name{apc} +\alias{apc} +\title{Gera a Matriz de Constrates de Tukey} +\usage{ +apc(lfm, lev = NULL) +} +\arguments{ +\item{lfm}{Uma matriz de dimensões \eqn{k\times p} onde cada linha +tem os coeficientes correspondentes para estimar uma média. Essas +matrizes são facilmente obtidas com usando a função +\code{doBy::LSmatrix()}.} + +\item{lev}{Um vetor com os nomes dos níveis do fator para o qual +correspondem as linhas da matriz usada em \code{lfm}. Portanto, o +número de elementos do vetor deve ser igual ao número de linhas +da matriz. O valor default é \code{NULL} e então é usado o +\code{rownames()} da matriz. Se \code{rownames()} for +\code{NULL}, uma sequência de números começando em 1 é utilizada +para representar cada linha.} +} +\value{ +Uma matriz \eqn{r\times p} cujas linhas estimam o contraste + entre cada possível par de médias, portanto \eqn{r} is + \eqn{{k}\choose{2}}. +} +\description{ +Essa função retorna os contrastes de Tukeu entre médias + a partir da matriz que define as funções lineares dos + coeficientes do modelo para estimar a média de mínimos + quadrados. Essas matrizes podem ser utilizadas para fazer + contrastes entre médias por meio da função + \code{multcomp::glht()}. +} +\examples{ + +X <- diag(3) +rownames(X) +apc(X) + +rownames(X) <- LETTERS[nrow(X):1] +apc(X) + +apc(X, lev = LETTERS[1:nrow(X)]) + +#----------------------------------------- +# Usando para estimar as médias e contrates. + +xtabs(~tension + wool, data = warpbreaks) + +warpbreaks <- transform(warpbreaks, + trt = interaction(tension, wool)) + +m0 <- lm(log(breaks) ~ trt, data = warpbreaks) +anova(m0) + +library(doBy) + +L <- LSmatrix(m0, effect = "trt") +L + +K <- apc(L) +K + +library(multcomp) + +glht(m0, linfct = L) +glht(m0, linfct = K) + +aggregate(cbind(log(breaks)) ~ trt, data = warpbreaks, FUN = mean) + +} +\author{ +Walmes Zeviani baseado na lista de discussão R-help. +} +\seealso{ +\code{\link[doBy]{LSmatrix}}. +} +