Ajuste de modelos lineares e mistos no ambiente R

09 e 10 de Outubro de 2014 - Piracicaba - SP
Prof. Dr. Walmes M. Zeviani
Escola Superior de Agricultura “Luiz de Queiroz” - USP
Lab. de Estatística e Geoinformação - LEG
Pós Graduação em Genética e Melhoramento de Plantas Departamento de Estatística - UFPR

Experimento em delineamento de blocos casualizados com repetições

##-----------------------------------------------------------------------------
## Definições da sessão, pacotes a serem usados.

pkg <- c("lattice", "latticeExtra", "doBy", "multcomp", "reshape",
         "plyr", "wzRfun")
sapply(pkg, library, character.only=TRUE, logical.return=TRUE)
##      lattice latticeExtra         doBy     multcomp      reshape         plyr 
##         TRUE         TRUE         TRUE         TRUE         TRUE         TRUE 
##       wzRfun 
##         TRUE
source("lattice_setup.R")

##-----------------------------------------------------------------------------
## Informações sobre as versões dos pacotes.

sessionInfo()
## R version 3.1.1 (2014-07-10)
## Platform: i686-pc-linux-gnu (32-bit)
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=pt_BR.UTF-8       
##  [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
## [10] LC_TELEPHONE=C             LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] splines   stats     graphics  grDevices utils     datasets  base     
## 
## other attached packages:
##  [1] wzRfun_0.1          plyr_1.8.1          reshape_0.8.5       multcomp_1.3-6     
##  [5] TH.data_1.0-3       mvtnorm_1.0-0       doBy_4.5-10         MASS_7.3-34        
##  [9] survival_2.37-7     latticeExtra_0.6-26 RColorBrewer_1.0-5  lattice_0.20-29    
## [13] knitr_1.6          
## 
## loaded via a namespace (and not attached):
##  [1] evaluate_0.5.5 formatR_0.10   grid_3.1.1     lme4_1.1-7     Matrix_1.1-4  
##  [6] methods_3.1.1  minqa_1.2.3    nlme_3.1-117   nloptr_1.0.4   Rcpp_0.11.2   
## [11] sandwich_2.3-1 stringr_0.6.2  tools_3.1.1    zoo_1.7-11
## obs: Para instalar um pacote faça:
## install.packages("nome_do_pacote", dependencies=TRUE)

Importação dos dados

##-----------------------------------------------------------------------------
## Lendo arquivos de dados.

## Url de um arquivo com dados.
url <- "http://www.leg.ufpr.br/~walmes/data/ramalho_feijao1.txt"

## Importa os dados a partir do arquivo na web.
da <- read.table(file=url, header=TRUE, sep="\t",
                 colClasses=c("factor","factor",NA,NA))

## Para facilitar, abreviar os nomes.
names(da) <- abbreviate(names(da))

## Mostra a estrutura do objeto.
str(da)
## 'data.frame':    240 obs. of  4 variables:
##  $ rptc: Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ faml: Factor w/ 24 levels "1","10","11",..: 1 12 18 19 20 21 22 23 24 2 ...
##  $ plnt: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ prdc: num  4.5 5 6.4 3.3 0.9 1.4 4.3 7.4 4.9 1.6 ...
da$faml <- with(da, {
    neword <- levels(faml)[order(as.integer(levels(faml)))]
    factor(faml, levels=neword)
})

## Tabela de frequência.
xtabs(~rptc+faml, data=da)
##     faml
## rptc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
##    1 5 5 5 5 5 5 5 5 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5
##    2 5 5 5 5 5 5 5 5 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5
## Não são esses blocos grandes demais para serem considerados
## homogêneos?

## Tem registros perdidos?
sum(is.na(da$prdc))
## [1] 3
##-----------------------------------------------------------------------------
## Análise exploratória.

xyplot(prdc~faml|rptc, data=da, type=c("p","a"))

plot of chunk unnamed-chunk-3


Especificação e estimação do modelo

\[ \begin{aligned} Y|\text{fontes de variação} &\sim \text{Normal}(\mu_{ij}+\text{ue}_{ij}, \sigma^2) \newline \mu_{ij} &= \mu+\alpha_i+\tau_j \newline \text{ue}_{ij} &\sim \text{Normal}(0, \sigma_{ue}^2) \end{aligned} \]

em que \(\alpha_i\) é o efeito do bloco \(i\) e \(\tau_j\) o efeito da família \(j\) sobre a variável resposta \(Y\), \(\mu\) é a média de \(Y\) na ausência do efeito de bloco e variedade, \(\mu_{ij}\) é a média para as observações em cada combinação de níveis de bloco e família e \(\sigma^2\) é a variância das observações ao redor desse valor médio. O termo \(\text{ue}_{ij(k)}\) representa o efeito aleatório da unidade experimental.

##-----------------------------------------------------------------------------
## Estimação.

## Esse modelo assume que Var(ue) == 0. Pode ser uma suposição
## forte. Na prática esse modelo não é útil pois não representa
## adequadamente às fontes de variação presentes. Será considerado aqui
## por razões didáticas.

m0 <- lm(prdc~rptc+faml, data=da)

## Declarando o modelo especificando termo de efeito aleatório que
## corresponde à um estrato de variação.

da$ue <- with(da, interaction(rptc, faml))
m0 <- aov(prdc~rptc+faml+Error(ue), data=da)

##-----------------------------------------------------------------------------
## Quadro de análise de variância estratificado.

summary(m0)
## 
## Error: ue
##           Df Sum Sq Mean Sq F value Pr(>F)
## rptc       1      3    2.77    0.13   0.72
## faml      23    631   27.43    1.30   0.27
## Residuals 23    487   21.18               
## 
## Error: Within
##            Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 189   2377    12.6
##-----------------------------------------------------------------------------
## A classe 'aovlist' possuí poucos metodos disponíveis, o que a torna menos
## atraente.

class(m0)
## [1] "aovlist" "listof"
methods(class="aovlist")
## [1] dummy.coef.aovlist*   model.frame.aovlist*  model.tables.aovlist*
## [4] print.aovlist*        proj.aovlist*         se.contrast.aovlist* 
## [7] summary.aovlist*     
## 
##    Non-visible functions are asterisked
## Análise dos resíduos e comparações múltiplas são coisas complicadas
## de fazer com objetos de classe 'aovlist'. Nesse caso, pode-se reduzir
## os dados à totais ou médias e usar o número de observações como
## ponderador na análise.

## Por curiosidade, pode-se declarar o modelo com os termos todos de
## efeito fixo. O quadro de anova será igual exceto que não será
## estratificado em com valores de F obtidos usando o QMR com
## denominador (o que está errado). Isso permite acessar os resíduos
## porque o modelo será de classe 'lm' e é só para isso que se deve
## usá-lo.

m1 <- lm(prdc~rptc+faml+ue, data=da)

## Diganóstico dos resíduos.
par(mfrow=c(2,2)); plot(m1, which=1:3)
MASS::boxcox(m1)
abline(v=1/3, col=2); layout(1)

plot of chunk unnamed-chunk-4

## Aponta clara relação esperança-variância.

Modelo ponderado pelo número de observações

##-----------------------------------------------------------------------------
## Agregando os dados para médias e pesos. Não esquecer que existem NA.

db <- ddply(da, .(rptc, faml), summarise,
            n=sum(!is.na(prdc)),
            prdcm=mean(prdc, na.rm=TRUE))
str(db)
## 'data.frame':    48 obs. of  4 variables:
##  $ rptc : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
##  $ faml : Factor w/ 24 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ n    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ prdcm: num  5.38 6.46 8.16 3.88 3.82 3.84 4.28 6.48 3.94 5.4 ...
##-----------------------------------------------------------------------------
## Ajuste do modelo.

m2 <- lm(prdcm~rptc+faml, db, weight=n)

## Diagnóstico.
par(mfrow=c(2,2)); plot(m2, which=1:3)
MASS::boxcox(m2)
abline(v=1/3, col=2); layout(1)

plot of chunk unnamed-chunk-5

## Cadê aquele afastamento todo?

## Lembre-se de uma propriedade envolvendo ordem de funções lineares e
## não lineares. sqrt(mean(x)) é diferente de mean(sqrt(x)). A ordem
## importa.

## Qual a correspondência entre os quadros de anova?
summary(m0)
## 
## Error: ue
##           Df Sum Sq Mean Sq F value Pr(>F)
## rptc       1      3    2.77    0.13   0.72
## faml      23    631   27.43    1.30   0.27
## Residuals 23    487   21.18               
## 
## Error: Within
##            Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 189   2377    12.6
anova(m2)
## Analysis of Variance Table
## 
## Response: prdcm
##           Df Sum Sq Mean Sq F value Pr(>F)
## rptc       1      3    2.77    0.13   0.72
## faml      23    631   27.43    1.30   0.27
## Residuals 23    487   21.18
## O primeiro estrato é igual ao quadro de anova usando as médias e
## pesos. A vantagem é ter um objeto de classe 'lm' que tem muito mais
## métodos disponíveis.

methods(class="lm")
##  [1] add1.lm*           addterm.lm*        alias.lm*          anova.lm*         
##  [5] attrassign.lm*     boxcox.lm*         case.names.lm*     confint.lm        
##  [9] cooks.distance.lm* deviance.lm*       dfbeta.lm*         dfbetas.lm*       
## [13] drop1.lm*          dropterm.lm*       dummy.coef.lm      effects.lm*       
## [17] esticon.lm         extractAIC.lm*     family.lm*         formula.lm*       
## [21] hatvalues.lm*      influence.lm*      kappa.lm           labels.lm*        
## [25] linest.lm          logLik.lm*         logtrans.lm*       model.frame.lm*   
## [29] model.matrix.lm    nobs.lm*           plot.lm*           predict.lm        
## [33] print.lm*          proj.lm*           qqnorm.lm*         qr.lm*            
## [37] residuals.lm       rstandard.lm*      rstudent.lm*       simulate.lm*      
## [41] summary.lm         variable.names.lm* vcov.lm*          
## 
##    Non-visible functions are asterisked

Comparações múltiplas

##-----------------------------------------------------------------------------
## Comparações múltiplas.

## Haja visto que o F da análise de variância não rejeitou a hipótese do
## efeito de família ser nulo, não há necessidade de conduzir
## comparações múltiplas. Por razões didáticas, o código para isso será
## mantido.

## Médias ajustadas (LSmeans).
p0 <- LSmeans(m2, effect="faml", level=0.95)

## Criando a tabela com as estimativas.
p0 <- cbind(p0$grid, as.data.frame(p0$coef))
p0 <- equallevels(p0, da)
p0
##    faml estimate    se df t.stat   p.value    lwr    upr
## 1     1    5.600 1.455 23  3.848 8.197e-04 2.5896  8.610
## 2     2    7.760 1.455 23  5.332 2.053e-05 4.7496 10.770
## 3     3    7.303 1.534 23  4.760 8.473e-05 4.1291 10.477
## 4     4    3.970 1.455 23  2.728 1.199e-02 0.9596  6.980
## 5     5    4.780 1.455 23  3.285 3.248e-03 1.7696  7.790
## 6     6    4.540 1.455 23  3.120 4.817e-03 1.5296  7.550
## 7     7    6.859 1.534 23  4.470 1.744e-04 3.6846 10.033
## 8     8    7.010 1.455 23  4.817 7.348e-05 3.9996 10.020
## 9     9    4.930 1.455 23  3.388 2.533e-03 1.9196  7.940
## 10   10    5.150 1.455 23  3.539 1.754e-03 2.1396  8.160
## 11   11    3.675 1.534 23  2.395 2.516e-02 0.5007  6.849
## 12   12    5.020 1.455 23  3.450 2.180e-03 2.0096  8.030
## 13   13   10.420 1.455 23  7.160 2.722e-07 7.4096 13.430
## 14   14    5.820 1.455 23  3.999 5.636e-04 2.8096  8.830
## 15   15    4.030 1.455 23  2.769 1.091e-02 1.0196  7.040
## 16   16    4.990 1.455 23  3.429 2.292e-03 1.9796  8.000
## 17   17    6.270 1.455 23  4.308 2.610e-04 3.2596  9.280
## 18   18    6.280 1.455 23  4.315 2.566e-04 3.2696  9.290
## 19   19    9.170 1.455 23  6.301 1.981e-06 6.1596 12.180
## 20   20    4.290 1.455 23  2.948 7.219e-03 1.2796  7.300
## 21   21    4.650 1.455 23  3.195 4.024e-03 1.6396  7.660
## 22   22    4.800 1.455 23  3.298 3.143e-03 1.7896  7.810
## 23   23    6.790 1.455 23  4.666 1.071e-04 3.7796  9.800
## 24   24    5.210 1.455 23  3.580 1.585e-03 2.1996  8.220
## Comparações múltiplas, contrastes de Tukey.
## Método de correção de p-valor: single-step.
g0 <- summary(glht(m2, linfct=mcp(faml="Tukey")),
              test=adjusted(type="fdr"))
g0
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: lm(formula = prdcm ~ rptc + faml, data = db, weights = n)
## 
## Linear Hypotheses:
##              Estimate Std. Error t value Pr(>|t|)
## 2 - 1 == 0     2.1600     2.0581    1.05     0.91
## 3 - 1 == 0     1.7031     2.1147    0.81     0.96
## 4 - 1 == 0    -1.6300     2.0581   -0.79     0.96
## 5 - 1 == 0    -0.8200     2.0581   -0.40     0.98
## 6 - 1 == 0    -1.0600     2.0581   -0.52     0.98
## 7 - 1 == 0     1.2586     2.1147    0.60     0.98
## 8 - 1 == 0     1.4100     2.0581    0.69     0.98
## 9 - 1 == 0    -0.6700     2.0581   -0.33     0.98
## 10 - 1 == 0   -0.4500     2.0581   -0.22     0.98
## 11 - 1 == 0   -1.9253     2.1147   -0.91     0.93
## 12 - 1 == 0   -0.5800     2.0581   -0.28     0.98
## 13 - 1 == 0    4.8200     2.0581    2.34     0.43
## 14 - 1 == 0    0.2200     2.0581    0.11     0.98
## 15 - 1 == 0   -1.5700     2.0581   -0.76     0.97
## 16 - 1 == 0   -0.6100     2.0581   -0.30     0.98
## 17 - 1 == 0    0.6700     2.0581    0.33     0.98
## 18 - 1 == 0    0.6800     2.0581    0.33     0.98
## 19 - 1 == 0    3.5700     2.0581    1.73     0.76
## 20 - 1 == 0   -1.3100     2.0581   -0.64     0.98
## 21 - 1 == 0   -0.9500     2.0581   -0.46     0.98
## 22 - 1 == 0   -0.8000     2.0581   -0.39     0.98
## 23 - 1 == 0    1.1900     2.0581    0.58     0.98
## 24 - 1 == 0   -0.3900     2.0581   -0.19     0.98
## 3 - 2 == 0    -0.4569     2.1147   -0.22     0.98
## 4 - 2 == 0    -3.7900     2.0581   -1.84     0.68
## 5 - 2 == 0    -2.9800     2.0581   -1.45     0.87
## 6 - 2 == 0    -3.2200     2.0581   -1.56     0.84
## 7 - 2 == 0    -0.9014     2.1147   -0.43     0.98
## 8 - 2 == 0    -0.7500     2.0581   -0.36     0.98
## 9 - 2 == 0    -2.8300     2.0581   -1.38     0.87
## 10 - 2 == 0   -2.6100     2.0581   -1.27     0.91
## 11 - 2 == 0   -4.0853     2.1147   -1.93     0.59
## 12 - 2 == 0   -2.7400     2.0581   -1.33     0.87
## 13 - 2 == 0    2.6600     2.0581    1.29     0.89
## 14 - 2 == 0   -1.9400     2.0581   -0.94     0.93
## 15 - 2 == 0   -3.7300     2.0581   -1.81     0.69
## 16 - 2 == 0   -2.7700     2.0581   -1.35     0.87
## 17 - 2 == 0   -1.4900     2.0581   -0.72     0.97
## 18 - 2 == 0   -1.4800     2.0581   -0.72     0.97
## 19 - 2 == 0    1.4100     2.0581    0.69     0.98
## 20 - 2 == 0   -3.4700     2.0581   -1.69     0.79
## 21 - 2 == 0   -3.1100     2.0581   -1.51     0.87
## 22 - 2 == 0   -2.9600     2.0581   -1.44     0.87
## 23 - 2 == 0   -0.9700     2.0581   -0.47     0.98
## 24 - 2 == 0   -2.5500     2.0581   -1.24     0.91
## 4 - 3 == 0    -3.3331     2.1147   -1.58     0.84
## 5 - 3 == 0    -2.5231     2.1147   -1.19     0.91
## 6 - 3 == 0    -2.7631     2.1147   -1.31     0.88
## 7 - 3 == 0    -0.4444     2.1694   -0.20     0.98
## 8 - 3 == 0    -0.2931     2.1147   -0.14     0.98
## 9 - 3 == 0    -2.3731     2.1147   -1.12     0.91
## 10 - 3 == 0   -2.1531     2.1147   -1.02     0.91
## 11 - 3 == 0   -3.6284     2.1704   -1.67     0.79
## 12 - 3 == 0   -2.2831     2.1147   -1.08     0.91
## 13 - 3 == 0    3.1169     2.1147    1.47     0.87
## 14 - 3 == 0   -1.4831     2.1147   -0.70     0.98
## 15 - 3 == 0   -3.2731     2.1147   -1.55     0.85
## 16 - 3 == 0   -2.3131     2.1147   -1.09     0.91
## 17 - 3 == 0   -1.0331     2.1147   -0.49     0.98
## 18 - 3 == 0   -1.0231     2.1147   -0.48     0.98
## 19 - 3 == 0    1.8669     2.1147    0.88     0.93
## 20 - 3 == 0   -3.0131     2.1147   -1.42     0.87
## 21 - 3 == 0   -2.6531     2.1147   -1.25     0.91
## 22 - 3 == 0   -2.5031     2.1147   -1.18     0.91
## 23 - 3 == 0   -0.5131     2.1147   -0.24     0.98
## 24 - 3 == 0   -2.0931     2.1147   -0.99     0.91
## 5 - 4 == 0     0.8100     2.0581    0.39     0.98
## 6 - 4 == 0     0.5700     2.0581    0.28     0.98
## 7 - 4 == 0     2.8886     2.1147    1.37     0.87
## 8 - 4 == 0     3.0400     2.0581    1.48     0.87
## 9 - 4 == 0     0.9600     2.0581    0.47     0.98
## 10 - 4 == 0    1.1800     2.0581    0.57     0.98
## 11 - 4 == 0   -0.2953     2.1147   -0.14     0.98
## 12 - 4 == 0    1.0500     2.0581    0.51     0.98
## 13 - 4 == 0    6.4500     2.0581    3.13     0.35
## 14 - 4 == 0    1.8500     2.0581    0.90     0.93
## 15 - 4 == 0    0.0600     2.0581    0.03     0.99
## 16 - 4 == 0    1.0200     2.0581    0.50     0.98
## 17 - 4 == 0    2.3000     2.0581    1.12     0.91
## 18 - 4 == 0    2.3100     2.0581    1.12     0.91
## 19 - 4 == 0    5.2000     2.0581    2.53     0.35
## 20 - 4 == 0    0.3200     2.0581    0.16     0.98
## 21 - 4 == 0    0.6800     2.0581    0.33     0.98
## 22 - 4 == 0    0.8300     2.0581    0.40     0.98
## 23 - 4 == 0    2.8200     2.0581    1.37     0.87
## 24 - 4 == 0    1.2400     2.0581    0.60     0.98
## 6 - 5 == 0    -0.2400     2.0581   -0.12     0.98
## 7 - 5 == 0     2.0786     2.1147    0.98     0.91
## 8 - 5 == 0     2.2300     2.0581    1.08     0.91
## 9 - 5 == 0     0.1500     2.0581    0.07     0.98
## 10 - 5 == 0    0.3700     2.0581    0.18     0.98
## 11 - 5 == 0   -1.1053     2.1147   -0.52     0.98
## 12 - 5 == 0    0.2400     2.0581    0.12     0.98
## 13 - 5 == 0    5.6400     2.0581    2.74     0.35
## 14 - 5 == 0    1.0400     2.0581    0.51     0.98
## 15 - 5 == 0   -0.7500     2.0581   -0.36     0.98
## 16 - 5 == 0    0.2100     2.0581    0.10     0.98
## 17 - 5 == 0    1.4900     2.0581    0.72     0.97
## 18 - 5 == 0    1.5000     2.0581    0.73     0.97
## 19 - 5 == 0    4.3900     2.0581    2.13     0.54
## 20 - 5 == 0   -0.4900     2.0581   -0.24     0.98
## 21 - 5 == 0   -0.1300     2.0581   -0.06     0.98
## 22 - 5 == 0    0.0200     2.0581    0.01     1.00
## 23 - 5 == 0    2.0100     2.0581    0.98     0.91
## 24 - 5 == 0    0.4300     2.0581    0.21     0.98
## 7 - 6 == 0     2.3186     2.1147    1.10     0.91
## 8 - 6 == 0     2.4700     2.0581    1.20     0.91
## 9 - 6 == 0     0.3900     2.0581    0.19     0.98
## 10 - 6 == 0    0.6100     2.0581    0.30     0.98
## 11 - 6 == 0   -0.8653     2.1147   -0.41     0.98
## 12 - 6 == 0    0.4800     2.0581    0.23     0.98
## 13 - 6 == 0    5.8800     2.0581    2.86     0.35
## 14 - 6 == 0    1.2800     2.0581    0.62     0.98
## 15 - 6 == 0   -0.5100     2.0581   -0.25     0.98
## 16 - 6 == 0    0.4500     2.0581    0.22     0.98
## 17 - 6 == 0    1.7300     2.0581    0.84     0.94
## 18 - 6 == 0    1.7400     2.0581    0.85     0.94
## 19 - 6 == 0    4.6300     2.0581    2.25     0.49
## 20 - 6 == 0   -0.2500     2.0581   -0.12     0.98
## 21 - 6 == 0    0.1100     2.0581    0.05     0.99
## 22 - 6 == 0    0.2600     2.0581    0.13     0.98
## 23 - 6 == 0    2.2500     2.0581    1.09     0.91
## 24 - 6 == 0    0.6700     2.0581    0.33     0.98
## 8 - 7 == 0     0.1514     2.1147    0.07     0.98
## 9 - 7 == 0    -1.9286     2.1147   -0.91     0.93
## 10 - 7 == 0   -1.7086     2.1147   -0.81     0.96
## 11 - 7 == 0   -3.1839     2.1704   -1.47     0.87
## 12 - 7 == 0   -1.8386     2.1147   -0.87     0.93
## 13 - 7 == 0    3.5614     2.1147    1.68     0.79
## 14 - 7 == 0   -1.0386     2.1147   -0.49     0.98
## 15 - 7 == 0   -2.8286     2.1147   -1.34     0.87
## 16 - 7 == 0   -1.8686     2.1147   -0.88     0.93
## 17 - 7 == 0   -0.5886     2.1147   -0.28     0.98
## 18 - 7 == 0   -0.5786     2.1147   -0.27     0.98
## 19 - 7 == 0    2.3114     2.1147    1.09     0.91
## 20 - 7 == 0   -2.5686     2.1147   -1.21     0.91
## 21 - 7 == 0   -2.2086     2.1147   -1.04     0.91
## 22 - 7 == 0   -2.0586     2.1147   -0.97     0.91
## 23 - 7 == 0   -0.0686     2.1147   -0.03     0.99
## 24 - 7 == 0   -1.6486     2.1147   -0.78     0.96
## 9 - 8 == 0    -2.0800     2.0581   -1.01     0.91
## 10 - 8 == 0   -1.8600     2.0581   -0.90     0.93
## 11 - 8 == 0   -3.3353     2.1147   -1.58     0.84
## 12 - 8 == 0   -1.9900     2.0581   -0.97     0.91
## 13 - 8 == 0    3.4100     2.0581    1.66     0.79
## 14 - 8 == 0   -1.1900     2.0581   -0.58     0.98
## 15 - 8 == 0   -2.9800     2.0581   -1.45     0.87
## 16 - 8 == 0   -2.0200     2.0581   -0.98     0.91
## 17 - 8 == 0   -0.7400     2.0581   -0.36     0.98
## 18 - 8 == 0   -0.7300     2.0581   -0.35     0.98
## 19 - 8 == 0    2.1600     2.0581    1.05     0.91
## 20 - 8 == 0   -2.7200     2.0581   -1.32     0.87
## 21 - 8 == 0   -2.3600     2.0581   -1.15     0.91
## 22 - 8 == 0   -2.2100     2.0581   -1.07     0.91
## 23 - 8 == 0   -0.2200     2.0581   -0.11     0.98
## 24 - 8 == 0   -1.8000     2.0581   -0.87     0.93
## 10 - 9 == 0    0.2200     2.0581    0.11     0.98
## 11 - 9 == 0   -1.2553     2.1147   -0.59     0.98
## 12 - 9 == 0    0.0900     2.0581    0.04     0.99
## 13 - 9 == 0    5.4900     2.0581    2.67     0.35
## 14 - 9 == 0    0.8900     2.0581    0.43     0.98
## 15 - 9 == 0   -0.9000     2.0581   -0.44     0.98
## 16 - 9 == 0    0.0600     2.0581    0.03     0.99
## 17 - 9 == 0    1.3400     2.0581    0.65     0.98
## 18 - 9 == 0    1.3500     2.0581    0.66     0.98
## 19 - 9 == 0    4.2400     2.0581    2.06     0.55
## 20 - 9 == 0   -0.6400     2.0581   -0.31     0.98
## 21 - 9 == 0   -0.2800     2.0581   -0.14     0.98
## 22 - 9 == 0   -0.1300     2.0581   -0.06     0.98
## 23 - 9 == 0    1.8600     2.0581    0.90     0.93
## 24 - 9 == 0    0.2800     2.0581    0.14     0.98
## 11 - 10 == 0  -1.4753     2.1147   -0.70     0.98
## 12 - 10 == 0  -0.1300     2.0581   -0.06     0.98
## 13 - 10 == 0   5.2700     2.0581    2.56     0.35
## 14 - 10 == 0   0.6700     2.0581    0.33     0.98
## 15 - 10 == 0  -1.1200     2.0581   -0.54     0.98
## 16 - 10 == 0  -0.1600     2.0581   -0.08     0.98
## 17 - 10 == 0   1.1200     2.0581    0.54     0.98
## 18 - 10 == 0   1.1300     2.0581    0.55     0.98
## 19 - 10 == 0   4.0200     2.0581    1.95     0.59
## 20 - 10 == 0  -0.8600     2.0581   -0.42     0.98
## 21 - 10 == 0  -0.5000     2.0581   -0.24     0.98
## 22 - 10 == 0  -0.3500     2.0581   -0.17     0.98
## 23 - 10 == 0   1.6400     2.0581    0.80     0.96
## 24 - 10 == 0   0.0600     2.0581    0.03     0.99
## 12 - 11 == 0   1.3453     2.1147    0.64     0.98
## 13 - 11 == 0   6.7453     2.1147    3.19     0.35
## 14 - 11 == 0   2.1453     2.1147    1.01     0.91
## 15 - 11 == 0   0.3553     2.1147    0.17     0.98
## 16 - 11 == 0   1.3153     2.1147    0.62     0.98
## 17 - 11 == 0   2.5953     2.1147    1.23     0.91
## 18 - 11 == 0   2.6053     2.1147    1.23     0.91
## 19 - 11 == 0   5.4953     2.1147    2.60     0.35
## 20 - 11 == 0   0.6153     2.1147    0.29     0.98
## 21 - 11 == 0   0.9753     2.1147    0.46     0.98
## 22 - 11 == 0   1.1253     2.1147    0.53     0.98
## 23 - 11 == 0   3.1153     2.1147    1.47     0.87
## 24 - 11 == 0   1.5353     2.1147    0.73     0.97
## 13 - 12 == 0   5.4000     2.0581    2.62     0.35
## 14 - 12 == 0   0.8000     2.0581    0.39     0.98
## 15 - 12 == 0  -0.9900     2.0581   -0.48     0.98
## 16 - 12 == 0  -0.0300     2.0581   -0.01     1.00
## 17 - 12 == 0   1.2500     2.0581    0.61     0.98
## 18 - 12 == 0   1.2600     2.0581    0.61     0.98
## 19 - 12 == 0   4.1500     2.0581    2.02     0.55
## 20 - 12 == 0  -0.7300     2.0581   -0.35     0.98
## 21 - 12 == 0  -0.3700     2.0581   -0.18     0.98
## 22 - 12 == 0  -0.2200     2.0581   -0.11     0.98
## 23 - 12 == 0   1.7700     2.0581    0.86     0.93
## 24 - 12 == 0   0.1900     2.0581    0.09     0.98
## 14 - 13 == 0  -4.6000     2.0581   -2.24     0.49
## 15 - 13 == 0  -6.3900     2.0581   -3.10     0.35
## 16 - 13 == 0  -5.4300     2.0581   -2.64     0.35
## 17 - 13 == 0  -4.1500     2.0581   -2.02     0.55
## 18 - 13 == 0  -4.1400     2.0581   -2.01     0.55
## 19 - 13 == 0  -1.2500     2.0581   -0.61     0.98
## 20 - 13 == 0  -6.1300     2.0581   -2.98     0.35
## 21 - 13 == 0  -5.7700     2.0581   -2.80     0.35
## 22 - 13 == 0  -5.6200     2.0581   -2.73     0.35
## 23 - 13 == 0  -3.6300     2.0581   -1.76     0.74
## 24 - 13 == 0  -5.2100     2.0581   -2.53     0.35
## 15 - 14 == 0  -1.7900     2.0581   -0.87     0.93
## 16 - 14 == 0  -0.8300     2.0581   -0.40     0.98
## 17 - 14 == 0   0.4500     2.0581    0.22     0.98
## 18 - 14 == 0   0.4600     2.0581    0.22     0.98
## 19 - 14 == 0   3.3500     2.0581    1.63     0.81
## 20 - 14 == 0  -1.5300     2.0581   -0.74     0.97
## 21 - 14 == 0  -1.1700     2.0581   -0.57     0.98
## 22 - 14 == 0  -1.0200     2.0581   -0.50     0.98
## 23 - 14 == 0   0.9700     2.0581    0.47     0.98
## 24 - 14 == 0  -0.6100     2.0581   -0.30     0.98
## 16 - 15 == 0   0.9600     2.0581    0.47     0.98
## 17 - 15 == 0   2.2400     2.0581    1.09     0.91
## 18 - 15 == 0   2.2500     2.0581    1.09     0.91
## 19 - 15 == 0   5.1400     2.0581    2.50     0.35
## 20 - 15 == 0   0.2600     2.0581    0.13     0.98
## 21 - 15 == 0   0.6200     2.0581    0.30     0.98
## 22 - 15 == 0   0.7700     2.0581    0.37     0.98
## 23 - 15 == 0   2.7600     2.0581    1.34     0.87
## 24 - 15 == 0   1.1800     2.0581    0.57     0.98
## 17 - 16 == 0   1.2800     2.0581    0.62     0.98
## 18 - 16 == 0   1.2900     2.0581    0.63     0.98
## 19 - 16 == 0   4.1800     2.0581    2.03     0.55
## 20 - 16 == 0  -0.7000     2.0581   -0.34     0.98
## 21 - 16 == 0  -0.3400     2.0581   -0.17     0.98
## 22 - 16 == 0  -0.1900     2.0581   -0.09     0.98
## 23 - 16 == 0   1.8000     2.0581    0.87     0.93
## 24 - 16 == 0   0.2200     2.0581    0.11     0.98
## 18 - 17 == 0   0.0100     2.0581    0.00     1.00
## 19 - 17 == 0   2.9000     2.0581    1.41     0.87
## 20 - 17 == 0  -1.9800     2.0581   -0.96     0.91
## 21 - 17 == 0  -1.6200     2.0581   -0.79     0.96
## 22 - 17 == 0  -1.4700     2.0581   -0.71     0.97
## 23 - 17 == 0   0.5200     2.0581    0.25     0.98
## 24 - 17 == 0  -1.0600     2.0581   -0.52     0.98
## 19 - 18 == 0   2.8900     2.0581    1.40     0.87
## 20 - 18 == 0  -1.9900     2.0581   -0.97     0.91
## 21 - 18 == 0  -1.6300     2.0581   -0.79     0.96
## 22 - 18 == 0  -1.4800     2.0581   -0.72     0.97
## 23 - 18 == 0   0.5100     2.0581    0.25     0.98
## 24 - 18 == 0  -1.0700     2.0581   -0.52     0.98
## 20 - 19 == 0  -4.8800     2.0581   -2.37     0.43
## 21 - 19 == 0  -4.5200     2.0581   -2.20     0.50
## 22 - 19 == 0  -4.3700     2.0581   -2.12     0.54
## 23 - 19 == 0  -2.3800     2.0581   -1.16     0.91
## 24 - 19 == 0  -3.9600     2.0581   -1.92     0.59
## 21 - 20 == 0   0.3600     2.0581    0.17     0.98
## 22 - 20 == 0   0.5100     2.0581    0.25     0.98
## 23 - 20 == 0   2.5000     2.0581    1.21     0.91
## 24 - 20 == 0   0.9200     2.0581    0.45     0.98
## 22 - 21 == 0   0.1500     2.0581    0.07     0.98
## 23 - 21 == 0   2.1400     2.0581    1.04     0.91
## 24 - 21 == 0   0.5600     2.0581    0.27     0.98
## 23 - 22 == 0   1.9900     2.0581    0.97     0.91
## 24 - 22 == 0   0.4100     2.0581    0.20     0.98
## 24 - 23 == 0  -1.5800     2.0581   -0.77     0.97
## (Adjusted p values reported -- fdr method)
## Resumo compacto com letras.
l0 <- cld(g0, decreasing=TRUE)
l0
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22 
## "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" "a" 
##  23  24 
## "a" "a"
## Formatando média seguida de letras.
p0$let <- sprintf("%.2f %s", p0$estimate, l0$mcletters$Letters)
## p0$let <- sprintf("%5.2f %s", p0$estimate, l0$mcletters$Letters)
p0$let
##  [1] "5.60 a"  "7.76 a"  "7.30 a"  "3.97 a"  "4.78 a"  "4.54 a"  "6.86 a"  "7.01 a" 
##  [9] "4.93 a"  "5.15 a"  "3.67 a"  "5.02 a"  "10.42 a" "5.82 a"  "4.03 a"  "4.99 a" 
## [17] "6.27 a"  "6.28 a"  "9.17 a"  "4.29 a"  "4.65 a"  "4.80 a"  "6.79 a"  "5.21 a"
##-----------------------------------------------------------------------------
## Representação gráfica dos resultados.

xlab <- "Produção"
ylab <- "Família de feijão"
sub <- list(
    "Médias seguidas de mesma letra indicam diferença nula à 5%.",
    font=1, cex=0.8)

p0 <- transform(p0, faml=reorder(faml, estimate))
levels(p0$faml)
##  [1] "11" "4"  "15" "20" "6"  "21" "5"  "22" "9"  "16" "12" "10" "24" "1"  "14" "17" "18"
## [18] "23" "7"  "8"  "3"  "2"  "19" "13"
p0 <- p0[order(p0$faml),]

xlim <- c(-1, 15)
segplot(faml~lwr+upr, centers=estimate,
        data=p0, draw=FALSE, xlim=xlim,
        xlab=xlab, ylab=ylab, sub=sub, letras=p0$let,
        panel=function(x, y, z, centers, letras, ...){
            panel.segplot(x=x, y=y, z=z, centers=centers, ...)
            panel.text(y=as.integer(z), x=xlim[1],
                       label=letras,
                       pos=4, cex=0.8)
        })

plot of chunk unnamed-chunk-6

## A amplitude dos intervalos reflete o número diferente de observações
## para cada nível de família.

Um segundo exemplo do mesmo caso

##-----------------------------------------------------------------------------
## Experimento com mudas de ?? onde está se avaliando os substratos.

da <- read.table("http://www.leg.ufpr.br/~walmes/data/mudas.txt",
                 header=TRUE, sep=";")
da$bloc <- factor(da$bloc)
str(da)
## 'data.frame':    1600 obs. of  14 variables:
##  $ trat: Factor w/ 16 levels "BcanaTFiltro 3:2",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ bloc: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ rep : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ viab: int  0 1 1 1 1 1 0 1 1 0 ...
##  $ alt : num  NA 9.5 17.5 19 21 21 NA 8 15 NA ...
##  $ diam: num  NA 2.42 4.1 6.09 8.48 5.72 NA 1.68 4.26 NA ...
##  $ nfol: int  NA 9 8 9 10 13 NA 7 9 NA ...
##  $ afol: num  NA NA 168 NA NA ...
##  $ pff : num  NA NA 2.58 NA NA NA NA 0.8 3.22 NA ...
##  $ pfc : num  NA NA 2.58 NA NA NA NA 0.46 2.66 NA ...
##  $ pfr : num  NA NA 4.44 NA NA NA NA 1.08 4 NA ...
##  $ psf : num  NA NA 0.84 NA NA NA NA 0.26 1.13 NA ...
##  $ psc : num  NA NA 0.82 NA NA NA NA 0.1 0.75 NA ...
##  $ psr : num  NA NA 1.13 NA NA NA NA 0.2 1.02 NA ...
##-----------------------------------------------------------------------------
## Seleciona só uma variável para não tomar espaço com o print dos
## resultados. Em situação real, não precisa fazer isso. Omitir linhas
## com NA. Cuidado ao usar na.omit() com muitas colunas de resposta,
## pois no caso as linhas serão eliminadas pela união de linhas com NA,
## ou seja, se houver NA para apenas uma variável na linha, a linha toda
## é removida, o que descarta valores úteis das demais.

da <- subset(da, select=c("trat","bloc","rep","psr"))
da <- droplevels(na.omit(da))
str(da)
## 'data.frame':    588 obs. of  4 variables:
##  $ trat: Factor w/ 15 levels "BcanaTFiltro 3:2",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ bloc: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 2 2 2 ...
##  $ rep : int  3 8 9 13 16 18 19 1 3 4 ...
##  $ psr : num  1.13 0.2 1.02 0.46 0.52 0.44 0.27 0.4 0.81 1.02 ...
##  - attr(*, "na.action")=Class 'omit'  Named int [1:1012] 1 2 4 5 6 7 10 11 12 14 ...
##   .. ..- attr(*, "names")= chr [1:1012] "1" "2" "4" "5" ...
## Alto nível de desbalanceamento.
xtabs(~trat+bloc, da)
##                       bloc
## trat                    1  2  3  4  5
##   BcanaTFiltro 3:2      6 11 11 12  7
##   CpinusCAC 7:3         4 13 10 10  9
##   Plantmax              7 14 11  8 11
##   TBCEstBov 1:1         0  6  8  8 11
##   TBVermCAC 1:1:1       0  2  2  4  0
##   TerraBCAC 1:1         2  7  7  7  9
##   Terra Plantas         6 10  9 10  9
##   Trimix                9  6  9 13  8
##   TSAreiaEsterco 2:2:1  5 10  4 10  6
##   VermCAC 1:1           3 12 10 12  7
##   VermCAC 1:3           2  9 12 13  9
##   VermCAC 3:1           3  9  8  9  9
##   Vermiculita           5 14  8 10 12
##   VermTSCAC 2:1:2       5  9  9  8  6
##   VermTSMO 3:1:6        4  8  8 10  4
## Este é um caso em que começou-se com 20 plantas por parcela e algumas
## morreram.  Para-se fazer a análise deve-se assumir que as perdas
## foram ao acaso (MAR: missing at random) e não podem de forma alguma
## estarem associadas aos níveis dos fatores pois enviesaria conclusões.

## psr: peso seco de raizes
xyplot(psr~trat|bloc, groups=rep, data=da, layout=c(NA,1),
       scales=list(x=list(rot=90, alternating=1)))

plot of chunk unnamed-chunk-7

##-----------------------------------------------------------------------------
## Fazendo a análise com as médias e os pesos.

db <- ddply(da, .(bloc, trat), summarise,
            psrm=mean(psr), n=length(psr))
str(db)
## 'data.frame':    72 obs. of  4 variables:
##  $ bloc: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ trat: Factor w/ 15 levels "BcanaTFiltro 3:2",..: 1 2 3 6 7 8 9 10 11 12 ...
##  $ psrm: num  0.8 0.383 0.577 1.13 0.637 ...
##  $ n   : int  6 4 7 2 6 9 5 3 2 3 ...
m0 <- lm(psrm~bloc+trat, db, weight=n)
par(mfrow=c(2,2)); plot(m0); layout(1)

plot of chunk unnamed-chunk-7

anova(m0)
## Analysis of Variance Table
## 
## Response: psrm
##           Df Sum Sq Mean Sq F value  Pr(>F)    
## bloc       4   7.70   1.924    9.65 6.1e-06 ***
## trat      14   5.06   0.361    1.81   0.061 .  
## Residuals 53  10.57   0.199                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Comparações múltiplas (embora não tenha necessidade, mas é usual
## reportar o valor das médias ajustadas).

X <- LSmatrix(m0, effect="trat")
rownames(X) <- levels(da$trat)

## A função apmc() engloba todos os comandos antes usados para chegar a
## tabela de comparações múltiplas.

## grid <- apmc(X=X, model=m0, focus="trat", test="bonferroni")
grid <- apmc(X=X, model=m0, focus="trat", test="fdr")
grid <- transform(grid, trat=reorder(trat, estimate))
grid <- grid[order(grid$trat),]

##-----------------------------------------------------------------------------
## Gráfico.

xlab <- "Peso seco de raízes"
ylab <- "Substrato"
sub <- list(
    "Médias seguidas de mesma letra indicam diferença nula à 5%.",
    font=1, cex=0.8)

xlim <- c(0.1, 1)
segplot(trat~lwr+upr, centers=estimate,
        data=grid, draw=FALSE, xlim=xlim,
        xlab=xlab, ylab=ylab, sub=sub,
        letras=sprintf("%.2f %s", grid$estimate, grid$cld),
        panel=function(x, y, z, centers, letras, ...){
            panel.segplot(x=x, y=y, z=z, centers=centers, ...)
            panel.text(y=as.integer(z), x=xlim[1],
                       label=letras,
                       pos=4, cex=0.8)
        })

plot of chunk unnamed-chunk-7

## Porque o F e as comparações múltiplas às vezes discordam?