Experimento em delineamento interiramente casualizado

Walmes Zeviani


Definições da sessão

##-----------------------------------------------------------------------------
## 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-3     
##  [5] TH.data_1.0-3       mvtnorm_0.9-99992   doBy_4.5-10         MASS_7.3-33        
##  [9] survival_2.37-7     latticeExtra_0.6-26 RColorBrewer_1.0-5  lattice_0.20-29    
## [13] knitr_1.5          
## 
## loaded via a namespace (and not attached):
##  [1] evaluate_0.5.5      formatR_0.10        grid_3.1.1          lme4_1.1-6         
##  [5] Matrix_1.1-4        methods_3.1.1       minqa_1.2.3         nlme_3.1-117       
##  [9] Rcpp_0.11.1         RcppEigen_0.3.2.1.2 sandwich_2.3-0      stringr_0.6.2      
## [13] 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/volume.txt"

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

## Mostra a estrutura do objeto.
str(da)
## 'data.frame':    27 obs. of  4 variables:
##  $ gen : Factor w/ 9 levels "ATF06B","ATF40B",..: 1 1 1 2 2 2 3 3 3 4 ...
##  $ dose: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ rep : int  1 2 3 1 2 3 1 2 3 1 ...
##  $ volu: num  1.19 1.17 1.12 1.27 1.85 ...

## Os dados no formato amplo (não empilhado).
unstack(da, form=volu~gen)
##   ATF06B ATF40B ATF54B BR001B BR005B BR007B BR008B P9401 SC283
## 1  1.190  1.275  0.939  1.421  0.520  1.431  1.398 1.141 0.872
## 2  1.173  1.849  1.056  1.240  0.567  1.425  1.552 1.032 1.093
## 3  1.118  1.306  0.712  1.614  0.416  1.152  1.127 1.226 1.136

## Os dados são de um experimento para verificar o ganho de peso em
## função de tipos de rações. Foram usandos 4 níveis do fator ração e 5
## repetições.

##-----------------------------------------------------------------------------
## Análise exploratória.

## xyplot(volu~gen, data=da, type=c("p","a"))
xyplot(volu~reorder(gen, volu), 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_i, \sigma^2) \newline \mu_i &= \mu+\alpha_i \end{aligned} \]

em que \(\alpha_i\) é o efeito do genótipo \(i\) sobre a variável resposta \(Y\), \(\mu\) é a média de \(Y\) na ausência do efeito dos genótipos, \(\mu_i\) é a média para as observações em cada nível de genótipo e \(\sigma^2\) é a variância das observações ao redor desse valor médio.

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

m0 <- lm(volu~gen, data=da)

## Estimativas e erros padrões.
summary(m0)
## 
## Call:
## lm(formula = volu ~ gen, data = da)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -0.232 -0.131  0.019  0.091  0.372 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.1603     0.1015   11.43  1.1e-09 ***
## genATF40B     0.3163     0.1436    2.20  0.04088 *  
## genATF54B    -0.2580     0.1436   -1.80  0.08920 .  
## genBR001B     0.2647     0.1436    1.84  0.08185 .  
## genBR005B    -0.6593     0.1436   -4.59  0.00023 ***
## genBR007B     0.1757     0.1436    1.22  0.23700    
## genBR008B     0.1987     0.1436    1.38  0.18345    
## genP9401     -0.0273     0.1436   -0.19  0.85117    
## genSC283     -0.1267     0.1436   -0.88  0.38937    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.176 on 18 degrees of freedom
## Multiple R-squared:  0.803,  Adjusted R-squared:  0.716 
## F-statistic: 9.18 on 8 and 18 DF,  p-value: 5.46e-05

## Restrição paramétrica de zerer o primeiro nível.
contrasts(da$gen)
##        ATF40B ATF54B BR001B BR005B BR007B BR008B P9401 SC283
## ATF06B      0      0      0      0      0      0     0     0
## ATF40B      1      0      0      0      0      0     0     0
## ATF54B      0      1      0      0      0      0     0     0
## BR001B      0      0      1      0      0      0     0     0
## BR005B      0      0      0      1      0      0     0     0
## BR007B      0      0      0      0      1      0     0     0
## BR008B      0      0      0      0      0      1     0     0
## P9401       0      0      0      0      0      0     1     0
## SC283       0      0      0      0      0      0     0     1
## model.matrix(m0)

##-----------------------------------------------------------------------------
## Existe efeito de genótipos? Ou seja, todos os \alpha_i podem ser
## considerados iguais à zero?

## Quadro de análise de variância.
anova(m0)
## Analysis of Variance Table
## 
## Response: volu
##           Df Sum Sq Mean Sq F value  Pr(>F)    
## gen        8  2.271  0.2839    9.18 5.5e-05 ***
## Residuals 18  0.557  0.0309                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diagnóstico do modelo

##-----------------------------------------------------------------------------
## Análise de diagnóstico dos pressupostos via resíduos.

## As inferências acima só passam ser valiadas após confirmação de não
## haver afastamento dos pressupostos.

par(mfrow=c(2,2))
plot(m0); layout(1)

plot of chunk unnamed-chunk-5


##-----------------------------------------------------------------------------
## Transformar os dados pode diminuir a fuga dos pressupostos?

MASS::boxcox(m0)

plot of chunk unnamed-chunk-5


##-----------------------------------------------------------------------------
## Ajuste com a variável transformada.

m1 <- lm(log(volu)~gen, data=da)

par(mfrow=c(2,2))
plot(m1); layout(1)

plot of chunk unnamed-chunk-5


anova(m1)
## Analysis of Variance Table
## 
## Response: log(volu)
##           Df Sum Sq Mean Sq F value  Pr(>F)    
## gen        8  2.710   0.339    15.4 1.4e-06 ***
## Residuals 18  0.396   0.022                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

## Passa m1 para m0.
m0 <- m1

Comparações múltiplas

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

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

## Criando a tabela com as estimativas.
p0 <- cbind(p0$grid, as.data.frame(p0$coef))
p0 <- equallevels(p0, da)
p0
##      gen estimate      se df  t.stat   p.value      lwr      upr
## 1 ATF06B  0.14835 0.08566 18  1.7319 0.1003861 -0.03161  0.32831
## 2 ATF40B  0.37485 0.08566 18  4.3762 0.0003641  0.19489  0.55481
## 3 ATF54B -0.11604 0.08566 18 -1.3547 1.8077373 -0.29600  0.06392
## 4 BR001B  0.34840 0.08566 18  4.0673 0.0007229  0.16844  0.52836
## 5 BR005B -0.69946 0.08566 18 -8.1658 1.9999998 -0.87942 -0.51950
## 6 BR007B  0.28468 0.08566 18  3.3235 0.0037800  0.10472  0.46464
## 7 BR008B  0.29805 0.08566 18  3.4796 0.0026755  0.11809  0.47801
## 8  P9401  0.12239 0.08566 18  1.4288 0.1701868 -0.05757  0.30235
## 9  SC283  0.02649 0.08566 18  0.3093 0.7606674 -0.15347  0.20645

## Comparações múltiplas, contrastes de Tukey.
## Método de correção de p-valor: single-step.
g0 <- summary(glht(m0, linfct=mcp(gen="Tukey")),
              test=adjusted(type="fdr"))
g0
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: lm(formula = log(volu) ~ gen, data = da)
## 
## Linear Hypotheses:
##                      Estimate Std. Error t value Pr(>|t|)    
## ATF40B - ATF06B == 0   0.2265     0.1211    1.87  0.13451    
## ATF54B - ATF06B == 0  -0.2644     0.1211   -2.18  0.09575 .  
## BR001B - ATF06B == 0   0.2000     0.1211    1.65  0.18982    
## BR005B - ATF06B == 0  -0.8478     0.1211   -7.00  1.1e-05 ***
## BR007B - ATF06B == 0   0.1363     0.1211    1.13  0.36694    
## BR008B - ATF06B == 0   0.1497     0.1211    1.24  0.33471    
## P9401 - ATF06B == 0   -0.0260     0.1211   -0.21  0.85647    
## SC283 - ATF06B == 0   -0.1219     0.1211   -1.01  0.42140    
## ATF54B - ATF40B == 0  -0.4909     0.1211   -4.05  0.00299 ** 
## BR001B - ATF40B == 0  -0.0265     0.1211   -0.22  0.85647    
## BR005B - ATF40B == 0  -1.0743     0.1211   -8.87  1.4e-06 ***
## BR007B - ATF40B == 0  -0.0902     0.1211   -0.74  0.55951    
## BR008B - ATF40B == 0  -0.0768     0.1211   -0.63  0.62017    
## P9401 - ATF40B == 0   -0.2525     0.1211   -2.08  0.10334    
## SC283 - ATF40B == 0   -0.3484     0.1211   -2.88  0.02785 *  
## BR001B - ATF54B == 0   0.4644     0.1211    3.83  0.00438 ** 
## BR005B - ATF54B == 0  -0.5834     0.1211   -4.82  0.00062 ***
## BR007B - ATF54B == 0   0.4007     0.1211    3.31  0.01173 *  
## BR008B - ATF54B == 0   0.4141     0.1211    3.42  0.01003 *  
## P9401 - ATF54B == 0    0.2384     0.1211    1.97  0.12247    
## SC283 - ATF54B == 0    0.1425     0.1211    1.18  0.35262    
## BR005B - BR001B == 0  -1.0479     0.1211   -8.65  1.4e-06 ***
## BR007B - BR001B == 0  -0.0637     0.1211   -0.53  0.68100    
## BR008B - BR001B == 0  -0.0503     0.1211   -0.42  0.74466    
## P9401 - BR001B == 0   -0.2260     0.1211   -1.87  0.13451    
## SC283 - BR001B == 0   -0.3219     0.1211   -2.66  0.04124 *  
## BR007B - BR005B == 0   0.9841     0.1211    8.12  1.8e-06 ***
## BR008B - BR005B == 0   0.9975     0.1211    8.23  1.8e-06 ***
## P9401 - BR005B == 0    0.8219     0.1211    6.78  1.4e-05 ***
## SC283 - BR005B == 0    0.7260     0.1211    5.99  5.9e-05 ***
## BR008B - BR007B == 0   0.0134     0.1211    0.11  0.91336    
## P9401 - BR007B == 0   -0.1623     0.1211   -1.34  0.29549    
## SC283 - BR007B == 0   -0.2582     0.1211   -2.13  0.09973 .  
## P9401 - BR008B == 0   -0.1757     0.1211   -1.45  0.25706    
## SC283 - BR008B == 0   -0.2716     0.1211   -2.24  0.09076 .  
## SC283 - P9401 == 0    -0.0959     0.1211   -0.79  0.54483    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- fdr method)

## Resumo compacto com letras.
l0 <- cld(g0)
l0
## ATF06B ATF40B ATF54B BR001B BR005B BR007B BR008B  P9401  SC283 
##   "bd"    "d"    "b"    "d"    "a"   "cd"   "cd"   "bd"   "bc"

## Formatando média seguida de letras.
p0$let <- sprintf("%.2f %s", p0$estimate, l0$mcletters$Letters)
p0$let
## [1] "0.15 bd" "0.37 d"  "-0.12 b" "0.35 d"  "-0.70 a" "0.28 cd" "0.30 cd" "0.12 bd"
## [9] "0.03 bc"

##-----------------------------------------------------------------------------
## Representação gráfica dos resultados.

xlab <- "Volume das raízes (log)"
ylab <- "Genótipo de sorgo"
sub <- list(
    "Médias seguidas de mesma letra indicam diferença nula à 5%.",
    font=1, cex=0.8)

p0 <- transform(p0, gen=reorder(gen, estimate))
levels(p0$gen)
## [1] "BR005B" "ATF54B" "SC283"  "P9401"  "ATF06B" "BR007B" "BR008B" "BR001B" "ATF40B"
p0 <- p0[order(p0$gen),]

segplot(gen~lwr+upr, centers=estimate,
        data=p0, draw=FALSE,
        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.numeric(z), x=centers,
                       label=letras, pos=3)
        })

plot of chunk unnamed-chunk-6


##-----------------------------------------------------------------------------
## Representando na escala original.

sel <- c("estimate","lwr","upr")
p0[,sel] <- exp(p0[,sel])

xlab <- "Volume das raízes"
p0$let <- sprintf("%.2f %s", p0$estimate, l0$mcletters$Letters)

segplot(gen~lwr+upr, centers=estimate,
        data=p0, draw=FALSE,
        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.numeric(z), x=centers,
                       label=letras, pos=3)
        })

plot of chunk unnamed-chunk-6