labestData - Biblioteca de Dados para Aprendizado de Estatística

github.com/pet-estatistica/labestData

Análise exploratória

Nessa vignette vamos considerar BanzattoQd3.2.1, já disponível no pacote labestData.

library(labestData)
ls("package:labestData")
##   [1] "BanzattoQd1.2.3"   "BanzattoQd3.2.1"   "BanzattoQd3.4.1"  
##   [4] "BanzattoQd3.6.1"   "BanzattoQd3.7.1"   "BanzattoQd4.5.2"  
##   [7] "BanzattoQd4.7.1"   "BanzattoQd5.2.1"   "BanzattoQd5.2.4"  
##  [10] "BanzattoQd5.3.1"   "BanzattoQd5.3.7"   "BanzattoQd5.5.1"  
##  [13] "BanzattoQd6.2.2"   "BanzattoQd6.2.5"   "BanzattoQd6.3.4"  
##  [16] "BanzattoQd6.4.2"   "BanzattoQd7.2.1"   "BanzattoQd7.3.1"  
##  [19] "BanzattoQd7.3.3"   "BanzattoQd8.2.1"   "BanzattoQd8.3.1"  
##  [22] "BanzattoQd8.4.1"   "BanzattoQd8.4.3"   "BanzattoQd9.2.1"  
##  [25] "BarbinEx1"         "BarbinEx13"        "BarbinEx14"       
##  [28] "BarbinEx16"        "BarbinEx17"        "BarbinEx18"       
##  [31] "BarbinEx3"         "BarbinEx8"         "BarbinEx9"        
##  [34] "BarbinPg104"       "BarbinPg114"       "BarbinPg125"      
##  [37] "BarbinPg137"       "BarbinPg156"       "BarbinPg167"      
##  [40] "BarbinPg177"       "BarbinPg25"        "BarbinPg72"       
##  [43] "CharnetApD.1"      "CharnetEg12.2"     "CharnetEg4.2"     
##  [46] "CharnetEg5.2"      "CharnetEg6.4"      "CharnetEg7.3"     
##  [49] "CharnetEg8.2"      "CharnetEg9.2"      "CharnetEg9.4"     
##  [52] "CharnetEx10.7"     "CharnetEx11.2"     "CharnetEx11.3"    
##  [55] "CharnetEx1.17"     "CharnetEx1.18"     "CharnetEx1.20"    
##  [58] "CharnetEx1.5"      "CharnetEx1.6"      "CharnetEx2.10"    
##  [61] "CharnetEx2.11"     "CharnetEx2.12"     "CharnetEx2.13"    
##  [64] "CharnetEx2.14"     "CharnetEx2.15"     "CharnetEx2.8"     
##  [67] "CharnetEx2.9"      "CharnetEx3.1"      "CharnetEx3.3"     
##  [70] "CharnetEx3.4"      "CharnetEx3.9"      "CharnetEx4.1"     
##  [73] "CharnetEx4.10"     "CharnetEx4.2"      "CharnetEx4.8"     
##  [76] "CharnetEx5.1"      "CharnetEx5.10"     "CharnetEx5.11"    
##  [79] "CharnetEx5.13"     "CharnetEx5.3"      "CharnetEx5.5"     
##  [82] "CharnetEx5.6"      "CharnetEx6.3"      "CharnetEx6.6"     
##  [85] "CharnetEx6.7"      "CharnetEx7.1"      "CharnetEx7.2"     
##  [88] "CharnetEx7.7"      "CharnetEx8.1"      "CharnetEx8.2"     
##  [91] "CharnetEx8.3"      "CharnetEx8.4"      "CharnetEx8.5"     
##  [94] "CostaEx5.7.2"      "CostaEx5.7.3"      "CostaTb4"         
##  [97] "CostaTb6"          "CostaTb7"          "CostaTb8"         
## [100] "DemetrioEg7.7"     "DemetrioEx1.4.1.1" "DemetrioEx1.4.1.2"
## [103] "DemetrioEx1.4.1.3" "DemetrioEx1.4.1.4" "DemetrioEx1.4.1.5"
## [106] "DemetrioEx1.4.2"   "DemetrioEx2.12.15" "DemetrioEx2.12.16"
## [109] "DemetrioEx2.12.5"  "DemetrioEx5.4.2"   "DemetrioEx5.4.5"  
## [112] "DemetrioEx6.5.2"   "DemetrioEx7.8.3"   "DemetrioTb10.2"   
## [115] "DemetrioTb1.1"     "DemetrioTb1.2"     "DemetrioTb1.3"    
## [118] "DemetrioTb1.4"     "DemetrioTb1.5"     "DemetrioTb1.6"    
## [121] "DemetrioTb2.10"    "DemetrioTb2.11"    "DemetrioTb2.12"   
## [124] "DemetrioTb2.9"     "DemetrioTb3.5"     "DemetrioTb3.6"    
## [127] "DemetrioTb4.2"     "DemetrioTb4.5"     "DemetrioTb5.1"    
## [130] "DemetrioTb7.1"     "DiasEg10.1"        "DiasEg10.2"       
## [133] "DiasEg11.1"        "DiasEg3.2"         "DiasEg3.6"        
## [136] "DiasEg5.1"         "DiasEg5.3"         "DiasEg6.1"        
## [139] "DiasEg6.2"         "DiasEg6.3"         "DiasEg7.1"        
## [142] "DiasEg9.1"         "DiasEg9.2"         "DiasEg9.4"        
## [145] "DiasEx10.4.10"     "DiasEx10.4.6"      "DiasEx10.4.7"     
## [148] "DiasEx10.4.8"      "DiasEx11.7.8"      "DiasEx11.7.9"     
## [151] "DiasEx3.6.7"       "DiasEx6.5.1"       "DiasEx6.5.10"     
## [154] "DiasEx6.5.9"       "DiasEx9.6.10"      "DiasEx9.6.4"      
## [157] "DiasEx9.6.6"       "DiasEx9.6.7"       "Dinorah"          
## [160] "EpprechtTb2.1"     "EpprechtTb2.2"     "EpprechtTb2.3"    
## [163] "EpprechtTb5.2"     "EpprechtTb5.4"     "EpprechtTb5.5"    
## [166] "EpprechtTb5.6"     "EpprechtTb5.9"     "EpprechtTb6.10"   
## [169] "EpprechtTb6.12"    "EpprechtTb6.4"     "EpprechtTb6.9"    
## [172] "EpprechtTb7.5"     "EpprechtTb8.12"    "EpprechtTb8.13"   
## [175] "EpprechtTb8.14"    "EpprechtTb8.15"    "EpprechtTb8.16"   
## [178] "EpprechtTb8.2"     "EpprechtTb8.8"     "FariaEg2.9.5"     
## [181] "FariaEg3.2.4"      "FariaQd11.4"       "FariaQd11.9"      
## [184] "FariaQd12.5"       "FariaQd14.2"       "FariaQd14.3"      
## [187] "FariaQd6.1"        "FerreiraEg13.2"    "FerreiraEg13.3"   
## [190] "FerreiraEg3.4"     "FerreiraEg5.1"     "FerreiraEg6.3"    
## [193] "FerreiraEg7.1"     "FerreiraEg7.4"     "FerreiraEg8.1"    
## [196] "FerreiraEg9.1"     "FerreiraEx10.11.9" "FerreiraEx3.8.5"  
## [199] "FerreiraEx7.4.1"   "FerreiraEx8.5.1"   "FerreiraEx9.7.2"  
## [202] "keywords"          "labestDataView"    "ManlyTb10.2"      
## [205] "ManlyTb10.4"       "ManlyTb1.1"        "ManlyTb11.3"      
## [208] "ManlyTb11.5"       "ManlyTb1.2"        "ManlyTb1.3"       
## [211] "ManlyTb1.4"        "ManlyTb1.5"        "ManlyTb4.5"       
## [214] "ManlyTb6.6"        "ManlyTb6.7"        "ManlyTb9.7"       
## [217] "ManlyTb9.8"        "MingotiAnA1"       "MingotiAnA2"      
## [220] "MingotiAnA3"       "MingotiAnA4"       "MingotiAnA5"      
## [223] "MingotiAnA6"       "MingotiTb2.1"      "MingotiTb2.2"     
## [226] "MingotiTb3.1"      "MingotiTb3.10"     "MingotiTb3.5"     
## [229] "MingotiTb3.7"      "MingotiTb6.1"      "MingotiTb6.8"     
## [232] "MingotiTb8.1"      "PaulaEg1.12.2"     "PaulaEg1.12.4"    
## [235] "PaulaEg1.12.5"     "PaulaEg1.12.6"     "PaulaEg2.4.2"     
## [238] "PaulaEg2.4.3"      "PaulaEg2.5.2"      "PaulaEg2.8.1"     
## [241] "PaulaEg3.5.1"      "PaulaEg3.5.2"      "PaulaEg3.6.11a"   
## [244] "PaulaEg3.6.11b"    "PaulaEg3.6.9c"     "PaulaEg4.2.6"     
## [247] "PaulaEg4.3.6"      "PaulaEg5.2.8a"     "PaulaEg5.2.8c"    
## [250] "PaulaEg5.5.1"      "PaulaEg5.5.2"      "PaulaEg5.5.3"     
## [253] "PaulaEx1.13.19"    "PaulaEx1.13.20"    "PaulaEx1.13.21"   
## [256] "PaulaEx1.13.22"    "PaulaEx1.13.23"    "PaulaEx1.13.24"   
## [259] "PaulaEx1.13.25"    "PaulaEx2.10.15"    "PaulaEx2.10.16"   
## [262] "PaulaEx2.10.17"    "PaulaEx2.10.19"    "PaulaEx2.10.20"   
## [265] "PaulaEx2.10.7"     "PaulaEx3.7.14"     "PaulaEx3.7.15"    
## [268] "PaulaEx3.7.16"     "PaulaEx3.7.19"     "PaulaEx3.7.20"    
## [271] "PaulaEx3.7.21"     "PaulaEx3.7.22"     "PaulaEx3.7.23"    
## [274] "PaulaEx3.7.24"     "PaulaEx3.7.25"     "PaulaEx3.7.7a"    
## [277] "PaulaEx3.7.7b"     "PaulaEx3.7.7c"     "PaulaEx3.7.8"     
## [280] "PaulaEx4.6.15"     "PaulaEx4.6.17"     "PaulaEx4.6.20"    
## [283] "PaulaEx4.6.5"      "PaulaEx4.6.6"      "PaulaEx4.6.7"     
## [286] "PaulaEx5.6.13"     "PaulaEx5.6.14"     "PaulaEx5.6.15"    
## [289] "PaulaTb1.6"        "PaulaTb1.9"        "PaulaTb2.1"       
## [292] "PaulaTb2.6"        "PaulaTb3.12"       "PaulaTb3.20"      
## [295] "PaulaTb3.21"       "PaulaTb4.12"       "PaulaTb4.14"      
## [298] "PaulaTb4.2"        "PaulaTb4.7"        "PaulaTb4.9"       
## [301] "PimentelEg4.2"     "PimentelEg5.2"     "PimentelEg6.2"    
## [304] "PimentelEg7.3"     "PimentelEg7.4"     "PimentelEx5.8.4"  
## [307] "PimentelEx5.8.5"   "PimentelEx6.6.3"   "PimentelPg142"    
## [310] "PimentelPg185"     "PimentelPg267"     "PimentelPg269"    
## [313] "PimentelPg382"     "PimentelPg72"      "PimentelPg91"     
## [316] "PimentelTb10.3.1"  "PimentelTb10.4.1"  "PimentelTb10.6.1" 
## [319] "PimentelTb11.3.1"  "PimentelTb12.2.1"  "PimentelTb12.3.1" 
## [322] "PimentelTb12.4.1"  "PimentelTb13.5.1"  "PimentelTb14.4.1" 
## [325] "PimentelTb14.5.1"  "PimentelTb14.7.1"  "PimentelTb16.2.1" 
## [328] "PimentelTb16.3.1"  "PimentelTb17.3.1"  "PimentelTb17.4.1" 
## [331] "PimentelTb18.2.1"  "PimentelTb20.2.1"  "PimentelTb21.5.1" 
## [334] "PimentelTb5.3.1"   "PimentelTb6.3.1"   "PimentelTb7.2.1"  
## [337] "PimentelTb7.6.1"   "PimentelTb7.8.1"   "PimentelTb7.9.1"  
## [340] "PimentelTb8.3.1"   "PimentelTb9.2.1"   "PimentelTb9.3.1"  
## [343] "PimentelTb9.4.1"   "RamalhoEg11.10"    "RamalhoEg11.13"   
## [346] "RamalhoEg11.4"     "RamalhoEg12.10"    "RamalhoEg13.2"    
## [349] "RamalhoEg4.3"      "RamalhoEg4.7"      "RamalhoEg7.8"     
## [352] "RamalhoEg8.1"      "RamalhoEg8.8"      "RamalhoEx12.2"    
## [355] "RamalhoEx13.1"     "RamalhoEx13.2"     "RamalhoEx13.3"    
## [358] "RamalhoEx1.7"      "RamalhoEx3.1"      "RamalhoEx4.1"     
## [361] "RamalhoEx4.2"      "RamalhoEx7.10"     "RamalhoEx8.1"     
## [364] "RamalhoEx8.2"      "RamalhoTb11.1"     "RamalhoTb11.17"   
## [367] "RamalhoTb1.2"      "RamalhoTb12.8"     "RamalhoTb13.1"    
## [370] "RamalhoTb13.11"    "RamalhoTb13.13"    "RamalhoTb13.15"   
## [373] "RamalhoTb13.6"     "RamalhoTb3.1"      "RamalhoTb3.4"     
## [376] "RamalhoTb3.6"      "RamalhoTb7.1"      "RamalhoTb8.12"    
## [379] "RamosAnC1"         "RamosAnC2"         "RamosAnC4"        
## [382] "RamosAnC6"         "RamosAnC7"         "RamosAnC8"        
## [385] "RamosTb2.5"        "RamosTb2.6"        "RamosTb2.7"       
## [388] "RamosTb3.1"        "RamosTb4.1"        "RamosTb5.2"       
## [391] "RamosTb5.8"        "RamosTb6.1"        "StorckEg2.3.5"    
## [394] "StorckTb101"       "StorckTb2"         "StorckTb56"       
## [397] "StorckTb60"        "StorckTb67"        "StorckTb74"       
## [400] "StorckTb8"         "VieiraEx7.3"       "VieiraEx7.5"      
## [403] "VieiraEx8.3"       "VieiraPg50.1"      "VieiraPg50.2"     
## [406] "VieiraPg57.1"      "VieiraPg57.2"      "VieiraTb4.1"      
## [409] "VieiraTb5.3"       "VieiraTb7.2"       "VieiraTb7.7"      
## [412] "VieiraTb8.5"       "ZimmermannTb10.15" "ZimmermannTb10.20"
## [415] "ZimmermannTb10.6"  "ZimmermannTb10.9"  "ZimmermannTb11.1" 
## [418] "ZimmermannTb11.10" "ZimmermannTb11.13" "ZimmermannTb11.19"
## [421] "ZimmermannTb11.7"  "ZimmermannTb12.1"  "ZimmermannTb12.13"
## [424] "ZimmermannTb12.14" "ZimmermannTb12.19" "ZimmermannTb12.2" 
## [427] "ZimmermannTb12.20" "ZimmermannTb12.26" "ZimmermannTb12.27"
## [430] "ZimmermannTb12.32" "ZimmermannTb12.33" "ZimmermannTb12.7" 
## [433] "ZimmermannTb12.8"  "ZimmermannTb13.1"  "ZimmermannTb14.3" 
## [436] "ZimmermannTb14.9"  "ZimmermannTb15.1"  "ZimmermannTb15.10"
## [439] "ZimmermannTb15.4"  "ZimmermannTb16.1"  "ZimmermannTb16.10"
## [442] "ZimmermannTb16.3"  "ZimmermannTb16.4"  "ZimmermannTb16.5" 
## [445] "ZimmermannTb16.8"  "ZimmermannTb3.12"  "ZimmermannTb3.2.1"
## [448] "ZimmermannTb3.5"   "ZimmermannTb4.11"  "ZimmermannTb4.4"  
## [451] "ZimmermannTb5.11"  "ZimmermannTb5.15"  "ZimmermannTb5.2"  
## [454] "ZimmermannTb7.1"   "ZimmermannTb7.4"   "ZimmermannTb8.5"  
## [457] "ZimmermannTb9.13"  "ZimmermannTb9.17"  "ZimmermannTb9.22" 
## [460] "ZimmermannTb9.26"
help(BanzattoQd3.2.1, help_type = "html")

Este conjunto de dados é de um experimento instalado em delineamento inteiramente casualizado (DIC) para estudar diferentes produtos para controle de pulgão na cultura do pepino. Foram avaliados 4 produtos (trat), e mais uma testemunha, para controle do pulgão (Aphis gossypii Glover). A variável resposta desse experimento foi o número de pulgões encontrados, uma variável resposta do tipo contagem.

Em caso de não ter o pacote labestData, você pode ler a tabela de dados diretamente do repositório. No entanto, recomendamos que instale o pacote para ter acesso a todos os datasets e às documentações

Antes de iniciar a análise dos dados do experimento, é muito recomendável fazer uma análise exploratória que serve basicamente para

#-----------------------------------------------------------------------
# Ler a partir do repositório do labestData.

# url <- paste0("https://gitlab.c3sl.ufpr.br/pet-estatistica",
#               "/labestData/raw/devel/data-raw/BanzattoQd3.2.1.txt")
#
# BanzattoQd3.2.1 <-
#     read.table(file = url, sep = "\t", header = TRUE,
#                colClasses = c("factor", "integer", "integer"))

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

# Estrutura do objeto.
str(BanzattoQd3.2.1)
## 'data.frame':    30 obs. of  3 variables:
##  $ trat   : Factor w/ 5 levels "Testemunha","Azinfos etilico",..: 1 2 4 5 3 1 2 4 5 3 ...
##  $ rept   : int  1 1 1 1 1 2 2 2 2 2 ...
##  $ pulgoes: int  2370 1282 562 173 193 1687 1527 321 127 71 ...
# Tabela de frequência para os tratamentos.
xtabs(~trat, data = BanzattoQd3.2.1)
## trat
##           Testemunha      Azinfos etilico        Diazinon 60CE 
##                    6                    6                    6 
## Supracid 40CE dose 1 Supracid 40CE dose 2 
##                    6                    6
# Dados desemplilhados.
t(unstack(x = BanzattoQd3.2.1, form = pulgoes ~ trat))
##                      [,1] [,2] [,3] [,4] [,5] [,6]
## Testemunha           2370 1687 2592 2283 2910 3020
## Azinfos.etilico      1282 1527  871 1025  825  920
## Diazinon.60CE         193   71   82   62   96   44
## Supracid.40CE.dose.1  562  321  636  317  485  842
## Supracid.40CE.dose.2  173  127  132  150  129  227
# Média e desvio-padrão das observações em cada nível.
aggregate(pulgoes ~ trat,  data = BanzattoQd3.2.1,
          FUN = function(y) {
              c(mean = mean(y), dp = sd(y))
          })
##                   trat pulgoes.mean pulgoes.dp
## 1           Testemunha   2477.00000  483.47658
## 2      Azinfos etilico   1075.00000  274.87961
## 3        Diazinon 60CE     91.33333   52.83812
## 4 Supracid 40CE dose 1    527.16667  200.31517
## 5 Supracid 40CE dose 2    156.33333   38.75908
library(lattice)
packageVersion("lattice")
## [1] '0.20.33'
# Diagrama de dispersão.
xyplot(pulgoes ~ reorder(trat, pulgoes), data = BanzattoQd3.2.1,
       xlab = "Produtos para controle de pulgão",
       ylab = "Número de pulgões 36hs após pulverização",
       scales = list(x = list(rot = 90)))

Pela análise exploratória temos que esse experimento é balanceado pois tem número igual de repetições de cada produto. O diagrama de dispersão mostra os valores observados do número de pulgões em função dos produtos. Os níveis foram ordenados de acordo com os números médios de pulgões. É imediato perceber a partir do gráfico que a variabilidade do número de pulgões aumenta com a média. Isso é importante porque adianta um possível problema com o pressuposto de homogeneidade de variâncias do modelo.

Especificação e ajuste do modelo

O modelo estatístico correspondente ao delineamento é

\[ \begin{aligned} Y|\text{produtos} &\,\sim \text{Normal}(\mu_i, \sigma^2) \newline \mu_i &= \mu+\tau_i \end{aligned} \]

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

Para fazer a estimação desses parâmetros é necessário que seja considerada alguma restrição paramétrica. Para isso, no R por default considera-se o efeito do primeiro nível como zero (\(\tau_1 = 0\)). É possível mudar isso nas opções de contrastes do R. Outra parametrização, bem conhecida e usada, é a retrição do tipo soma zero dos efeitos (\(\sum \tau_i = 0\)) e, para essa situação, \(\mu\) representa a média geral do experimento.

Existem duas funções no R para ajustar esse modelo: lm() e aov(). Embora muitos acreditem que aov() deva ser preferida, por causa do nome AOV (Analysis Of Variance), a função lm() é tão apropriada quanto. Inclusive, objetos vindos da lm() dispõem de mais métodos que a da aov() em pacotes para fazer comparações múltiplas, por exemplo. Sendo assim, vamos usar a lm().

#-----------------------------------------------------------------------
# Ajuste do modelo.

m0 <- lm(pulgoes ~ trat, data = BanzattoQd3.2.1)

# Estimativas dos efeitos. Restrição de zerar primeiro nível.
cbind(coef(m0))
##                               [,1]
## (Intercept)               2477.000
## tratAzinfos etilico      -1402.000
## tratDiazinon 60CE        -2385.667
## tratSupracid 40CE dose 1 -1949.833
## tratSupracid 40CE dose 2 -2320.667
# Matriz de contrastes sob a retrição zerar primeiro nível.
K <- cbind(1, contrasts(BanzattoQd3.2.1$trat))
K
##                        Azinfos etilico Diazinon 60CE
## Testemunha           1               0             0
## Azinfos etilico      1               1             0
## Diazinon 60CE        1               0             1
## Supracid 40CE dose 1 1               0             0
## Supracid 40CE dose 2 1               0             0
##                      Supracid 40CE dose 1 Supracid 40CE dose 2
## Testemunha                              0                    0
## Azinfos etilico                         0                    0
## Diazinon 60CE                           0                    0
## Supracid 40CE dose 1                    1                    0
## Supracid 40CE dose 2                    0                    1
# Médias estimadas pelo modelo.
K %*% coef(m0)
##                            [,1]
## Testemunha           2477.00000
## Azinfos etilico      1075.00000
## Diazinon 60CE          91.33333
## Supracid 40CE dose 1  527.16667
## Supracid 40CE dose 2  156.33333
# Médias amostrais.
aggregate(pulgoes ~ trat, data = BanzattoQd3.2.1, FUN = mean)
##                   trat    pulgoes
## 1           Testemunha 2477.00000
## 2      Azinfos etilico 1075.00000
## 3        Diazinon 60CE   91.33333
## 4 Supracid 40CE dose 1  527.16667
## 5 Supracid 40CE dose 2  156.33333

Conforme comentado, devido à restrição usada, os coeficientes estimados não são as médias em cada nível. Para a restrição do primeiro nível ter efeito nulo, o coeficiente (Intercept) é a média do primeiro nível, no caso Testemunha. Os demais coeficientes são estimativas dos constrastes entre médias de cada um dos níveis restantes com relação ao primeiro nível.

Como nesse exemplo existe uma testemunha, seria conveniente que a testemunha fosse o primeiro nível para então termos os contrastes como resultado do ajuste do modelo. No entanto, como a testemunha é o último nível, pode-se mudar o tipo de contraste para contr.SAS, cuja restrição é zerar o efeito do último nível. Na sequência temos os resultados das duas opções.

m1 <- update(m0, contrasts = list(trat = "contr.SAS"))
coef(m1)
##              (Intercept)           tratTestemunha 
##                 156.3333                2320.6667 
##      tratAzinfos etilico        tratDiazinon 60CE 
##                 918.6667                 -65.0000 
## tratSupracid 40CE dose 1 
##                 370.8333
BanzattoQd3.2.1 <- transform(BanzattoQd3.2.1,
                             trat = relevel(trat, ref = "Testemunha"))

levels(BanzattoQd3.2.1$trat)
## [1] "Testemunha"           "Azinfos etilico"     
## [3] "Diazinon 60CE"        "Supracid 40CE dose 1"
## [5] "Supracid 40CE dose 2"
m0 <- update(m0,  data = BanzattoQd3.2.1)
coef(m0)
##              (Intercept)      tratAzinfos etilico 
##                 2477.000                -1402.000 
##        tratDiazinon 60CE tratSupracid 40CE dose 1 
##                -2385.667                -1949.833 
## tratSupracid 40CE dose 2 
##                -2320.667

Avaliação dos pressupostos

Para fazer inferência a partir do modelo ajustado aos dados, é necessário verificar se os pressupostos do modelo foram atendidos. Caso não sejam, as inferências produzidas não são fiéis, pois a distribuição amostral das estatísticas de teste não são as mesmas sob violação dos pressupostos.

#-----------------------------------------------------------------------
# Exibe o quarteto fantástico da avaliação dos pressupostos.
par(mfrow = c(2, 2))
plot(m0); layout(1)

O conjunto de gráficos acima exibe fuga dos pressupostos. A suposição de homogeneidade de variâncias é claramente violada. Vemos o padrão cone no gráfico 1-1 dessa matriz (Residuals vs Fitted). No gráfico 2-1 (Scale-Location), temos ênfase desse padrão porque a linha média mostra uma relação positiva com a dispersão, representada pela raíz dos valores absolutos dos resíduos padronizados, versus os valores ajustados (média). Ou seja, a relação média-variância não é nula, pois se fosse, a linha de tendência seria horizontal. Por fim, o gráfico 1-2 (Normal Q-Q), exibe fuga do pressuposto de normalidade dos erros, influenciada pela relação média-variância.

Da forma como está, o modelo não tem os pressupostos atendidos. Logo não é recomendado fazer inferências. Precisamos remediar a fuga dos pressupostos antes e a opção mais comum é procurar uma tranformação que estabilize a variância. Em casos como esse, as transformações do tipo potência são capazes de estabilizar a variância. Vamos considerar a transformação Box-Cox para isso.

A tranformação Box-Cox baseia-se na escolha do valor \(\lambda\) de tal maneira que se aumente a compatibilidade dos dados com a suposição de normalidade. A transformação aplicada aos dados é

\[ \begin{aligned} y_{\text{transformado}} &= \frac{y^{\lambda}-1}{\lambda}, \quad \text{ se } \lambda\neq 0 \newline y_{\text{transformado}} &= \log(y), \quad \text{ se } \lambda=0. \end{aligned} \]

A transformação só pode ser aplicada para respostas positivas, \(y>0\) . Caso tenha-se zeros ou valores negativos podemos somar uma constante aos dados. Como o que interessa da transformação é parte não linear (a potenciação), na prática apenas se aplica a função potência sem subtrair 1 e dividir por \(\lambda\). No entanto, essa é a transformação de fato aplicada para calcular o valor da log-verossimilhança. Se houver a curiosidade de fazer o cálculo da log-verrossimilhança passo a passo, lembre-se de considerar o jacobiano da transformação.

MASS::boxcox(m0)
abline(v = c(0, 1/3), lty = 2, col = 2)

A função perfil de log-verossilhança em \(\lambda\) tem intervalo de confiança (95%) que inclui os valores 0 e 1/3, correspondentes às transformações log e raíz cúbica, respectivamente. Não há necessidade de usar o valor exato correspondente ao máximo da função porque isso não vai mudar a normalidade da variável transformada e, como o valor exato é um valor quebrado, valores de \(\lambda\) que correspondem a transformações conhecidas são convenientes, como log, raíz quadrada e raíz cúbica.

Encontrada a transformação a ser aplicada, devemos ajustar o modelo com a variável transformada e avaliar novamente os pressupostos. Não existe garantia de qua a transformação irá corrigir a fuga. O que ela faz é remediar o problema, mas o resultado pode ainda não ser satisfatório.

# Atualiza o modelo anterior passando o log na resposta.
m0 <- update(m0, log(.) ~ .)

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

Note agora que os gráficos não exibem padrões de fuga de pressupostos. Pelo gráfico 2-1, a relação média variância agora está estável (ou nula). Não há fugas de normalidade de acordo com o gráfico 1-2. Portanto, foi bem sucedida a aplicação da transformação log ao número de pulgões para que o modelo tivesse os pressupostos atendidos. Agora é possível proceder com as inferências.

Inferências

O objetivo de ter feito o experimento é saber se existe efeito dos produtos para o controle do pulgão na cultura do pepino. Ou seja, se o número médio de pulgões muda conforme o produto aplicado.

O efeito dos produtos é representado pelos coeficientes \(\tau_i\) no modelo estatístico do experimento. Se não existir efeito dos produtos, os valores estimados para \(\tau_{i}\) serão próximos a zero. A hipóteses nula de não haver efeito dos produtos é representada por

\[ \text{H}_{0}: \tau_i = 0, \text{para todo}\,i. \]

Essa hipótese é avaliada pelo estatística F do quadro de análise de variância.

anova(m0)
## Analysis of Variance Table
## 
## Response: log(pulgoes)
##           Df Sum Sq Mean Sq F value    Pr(>F)    
## trat       4 45.914 11.4786  103.93 3.381e-15 ***
## Residuals 25  2.761  0.1104                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pelo quadro de anova (analysis of variance), temos que o valor da estatística F produziu um \(p\)-valor bem pequeno, menor que qualquer nível de significancia adotado na prática. Dessa maneira, rejeitamos a hipótese nula de não haver efeito dos produtos no log do número de pulgões ou, por consequência, no número de pulgões.

Uma vez que existe efeito dos produtos, faz-se necessário aprofundar o conhecimento sobre eles. As hipóteses a serem testadas devem ser estabalecidas antes da coleta dos dados e ajuste do modelo. Como foram estudados 4 níveis de produto e uma testemunha, as hipóteses vão agora considerar diferenças entre cada produto e a testemunha. Como a testemunha é o primeiro nível, temos que testar as hipóteses individuais:

\[ \text{H}_{0}: \mu_i - \mu_1 = 0, \text{para cada}\,i \neq 1. \]

Da forma como ajustamos o modelo, temos as estimativas dos contrastes disponíveis no vetor de coeficientes. O teste individual para cada parâmetro é exibido com o summary() do modelo.

summary(m0)
## 
## Call:
## lm(formula = log(pulgoes) ~ trat, data = BanzattoQd3.2.1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.61710 -0.18119 -0.02221  0.17473  0.86140 
## 
## Coefficients:
##                          Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                7.7973     0.1357  57.471  < 2e-16 ***
## tratAzinfos etilico       -0.8424     0.1919  -4.391 0.000181 ***
## tratDiazinon 60CE         -3.3960     0.1919 -17.699 1.18e-15 ***
## tratSupracid 40CE dose 1  -1.5911     0.1919  -8.293 1.21e-08 ***
## tratSupracid 40CE dose 2  -2.7680     0.1919 -14.426 1.26e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3323 on 25 degrees of freedom
## Multiple R-squared:  0.9433, Adjusted R-squared:  0.9342 
## F-statistic: 103.9 on 4 and 25 DF,  p-value: 3.381e-15

Na tabela dos coeficientes tem-se o valor t correspondente a cada contraste. O (Intercept) é a média do log do número de pulgões para a testemunha. Os demais representam contrastes dos produtos com relação à testemunha. Baseado nos \(p\)-valores, todas as hipóteses de contraste nulo com a testemunha são rejeitadas. Ou seja, todos os produtos apresentam número médio diferente da testemunha, no caso um menor valor para média se comparado à testemunha.

Deve-se mencionar que se o nível de significância adotado é de 5% para cada teste. Assim, a probabilidade de rejeitar pelo menos uma hipótese é \(1 - (1 - 0,05)^{4} = 0.1854938\), ou seja, superior a 5%. Com o aumento do número de hipóteses testadas, é consequência aumentar o nível de significância global (probabilidade de rejeitar pelo menos uma hipótese). Existem diferentes formas de corrigir a elevação do nível global de significancia, mas esse não é um objetivo desta vignette.

Uma adequada representação dos resultados é um gráfico com os valores médios e intervalo de confiança para os níveis dos produtos.

pred <- data.frame(trat = levels(BanzattoQd3.2.1$trat))
pred <- cbind(pred,
              as.data.frame(predict(m0,
                                    newdata = pred,
                                    interval = "confidence")))
pred$trat <- reorder(pred$trat, pred$fit)
head(pred)
##                   trat      fit      lwr      upr
## 1           Testemunha 7.797284 7.517859 8.076709
## 2      Azinfos etilico 6.954847 6.675423 7.234272
## 3        Diazinon 60CE 4.401294 4.121869 4.680718
## 4 Supracid 40CE dose 1 6.206162 5.926737 6.485587
## 5 Supracid 40CE dose 2 5.029280 4.749855 5.308704
library(latticeExtra)

segplot(trat ~ lwr + upr, centers = fit, data = pred,
        draw = FALSE, horizontal = FALSE,
        xlab = "Produtos para controle de pulgão",
        ylab = "Log do número de pulgões",
        scales = list(x = list(rot = 90)),
        panel = function(x, y, z, centers, ...) {
            panel.segplot(x = x, y = y, z = z, centers = centers, ...)
            panel.text(x = as.numeric(z), y = centers,
                       label = sprintf("%0.2f", centers),
                       srt = 90, cex = 0.8, adj = c(0.5, -0.5))
    })

Gerando experimento em DIC

É simples produzir o plano de um delineamento inteiramente casualizado. Vamos gerar o plano para executar um experimento semelhante ao apresentado, mas com 8 repetições e mais um produto, o Novo produto.

trat <- rep(x = c(levels(BanzattoQd3.2.1$trat), "Novo"),
            times = 8)

# Opção 1: sorteie os níveis para as unidades experimentais ordenadas.
data.frame(trat = sample(trat), ue = 1:length(trat))

# Opção 2: sorteie as unidades experimentais ordenadas para os níveis.
data.frame(trat = trat, ue = sample(1:length(trat)))

Informações da sessão

sessionInfo()
## R version 3.3.1 (2016-06-21)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 16.04.1 LTS
## 
## locale:
##  [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=pt_BR.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods  
## [7] base     
## 
## other attached packages:
##  [1] multcomp_1.4-6        TH.data_1.0-7        
##  [3] MASS_7.3-45           survival_2.39-4      
##  [5] mvtnorm_1.0-5         latticeExtra_0.6-28  
##  [7] RColorBrewer_1.1-2    lattice_0.20-33      
##  [9] knitr_1.13            labestData_0.1-17.458
## [11] devtools_1.11.1       gsubfn_0.6-6         
## [13] proto_0.3-10         
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.3      magrittr_1.5     roxygen2_5.0.1  
##  [4] splines_3.3.1    stringr_1.0.0    tcltk_3.3.1     
##  [7] tools_3.3.1      grid_3.3.1       withr_1.0.1     
## [10] htmltools_0.3.5  yaml_2.1.13      digest_0.6.9    
## [13] Matrix_1.2-6     formatR_1.4      codetools_0.2-14
## [16] memoise_1.0.0    evaluate_0.9     rmarkdown_0.9.6 
## [19] sandwich_2.3-4   stringi_1.1.1    compiler_3.3.1  
## [22] zoo_1.7-13