Subsections

Aula 1.1: Experimentos em esquema fatorial - com interação significativa

Objetivo dessa aula

O objetivo dessa aula é realizar a análise de variância de experimentos fatoriais. Será utilizado o Software R.

Procure entender os comandos utilizados e também interpretar os resultados.

Trabalhando com o arquivo de dados

Nesta aula iremos detalhar e discutir a análise do experimento fatorial $2 \times 3$.

Este experimento, descrito na apostila do curso, comparou a resposta (altura) de mudas a diferentes recipientes e espécies de eucalipto.

  1. Lendo os dados

    Clique aqui para ver e copiar o arquivo com conjunto de dados.

    A seguir vamos ler (importar) os dados para R com o comando read.table:

    > ex04 <- read.table("exemplo04.txt", header=T)
    > ex04
    

    Lembre-se de fornecer o caminho onde você salvou os dados.

    Antes de começar as análises vamos inspecionar o objeto que contém os dados para saber quantas observações e variáveis há no arquivo, bem como o nome das variáveis. Vamos tembém pedir para o R que exiba um rápido resumo dos dados.

    > dim(ex04)
    [1] 24  3
    
    > names(ex04)
    [1] "rec"  "esp"  "resp"
    
    > attach(ex04)
    
    > is.factor(rec)
    [1] TRUE
    > is.factor(esp)
    [1] TRUE
    > is.factor(resp)
    [1] FALSE
    > is.numeric(resp)
    [1] TRUE
    

    Nos resultados acima vemos que o objeto ex04 que contém os dados tem 24 linhas (observações) e 3 colunas (variáveis). As variáveis tem nomes rec, esp e resp, sendo que as duas primeiras são fatores enquanto resp é uma variável numérica, que neste caso é a variável resposta. O objeto ex04 foi incluído no caminho de procura usando o comando attach para facilitar a digitação.

Análise descritiva

Inicialmente vamos obter um resumo de nosso conjunto de dados usando a função summary.

> summary(ex04)
 rec    esp          resp      
 r1:8   e1:12   Min.   :18.60  
 r2:8   e2:12   1st Qu.:19.75  
 r3:8           Median :23.70  
                Mean   :22.97  
                3rd Qu.:25.48  
                Max.   :26.70

Note que para os fatores são exibidos o número de dados em cada nível do fator. Já para a variável numérica são mostrados algumas medidas estatísticas. Vamos explorar um pouco mais os dados

> ex04.m <- tapply(resp, list(rec,esp), mean)
> ex04.m
       e1     e2
r1 25.650 25.325
r2 25.875 19.575
r3 20.050 21.325

> ex04.mr <- tapply(resp, rec, mean)
> ex04.mr
     r1      r2      r3 
25.4875 22.7250 20.6875 

> ex04.me <- tapply(resp, esp, mean)
> ex04.me
      e1       e2 
23.85833 22.07500

Nos comandos acima calculamos as médias para cada fator, assim como para os cruzamentos entre os fatores. Note que podemos calcular outros resumos além da média. Experimente nos comandos acima substituir mean por var para calcular a variância de cada grupo, e por summary para obter um outro resumo dos dados.

Em experimentos fatoriais é importante verificar se existe interação entre os fatores. Inicialmente vamos fazer isto graficamente e mais a frente faremos um teste formal para presença de interação. Os comandos a seguir são usados para produzir os gráficos de interação.

> par(mfrow=c(1,2))
> interaction.plot(rec, esp, resp)
> interaction.plot(esp, rec, resp)

Pode-se usar o R para obter outros tipos de gráficos de acordo com o interesse de quem está analisando os dados. Por exemplo, os comandos abaixo ilustram outros tipos de gráficos. Experimente estes comandos, verifique os gráficos produzidos e certifique-se que você entendeu cada comando.

> plot.default(rec, resp, ty="n")
> points(rec[esp=="e1"], resp[esp=="e1"], col=1)
> points(ex04.m[,1], pch="x", col=1, cex=1.5)
> points(rec[esp=="e2"], resp[esp=="e2"], col=2)
> points(ex04.m[,2], pch="x", col=2, cex=1.5)

> plot.default(esp, resp, ty="n")
> points(esp[rec=="r1"], resp[rec=="r1"], col=1)
> points(ex04.m[1,], pch="x", col=1, cex=1.5)
> points(esp[rec=="r2"], resp[rec=="r2"], col=2)
> points(ex04.m[2,], pch="x", col=2, cex=1.5)
> points(esp[rec=="r3"], resp[rec=="r3"], col=3)
> points(ex04.m[3,], pch="x", col=3, cex=1.5)

> coplot(resp ~ rec|esp)
> coplot(resp ~ esp|rec)

Análise de variância

Seguindo o modelo adequado, a análise de variância para esse experimento inteiramente casualizado em esquema fatorial pode ser obtida com o comando:

> ex04.av <- aov(resp ~ rec + esp + rec * esp)

Entretanto o comando acima pode ser simplificado produzindo os mesmos resultados com o comando

> ex04.av <- aov(resp ~ rec * esp)
> summary(ex04.av)
            Df Sum Sq Mean Sq F value    Pr(>F)    
rec          2 92.861  46.430  36.195 4.924e-07 ***
esp          1 19.082  19.082  14.875  0.001155 ** 
rec:esp      2 63.761  31.880  24.853 6.635e-06 ***
Residuals   18 23.090   1.283                      
---
Signif. codes:  0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Isto significa que no R, ao colocar uma interação no modelo, os efeitos principais são incluídos automaticamente. Note no quadro de análise de variância que a interação é denotada por rec:esp. A análise acima mostra que este efeito é significativo, confirmando o que verificamos nos gráficos de interação vistos anteriormente.

O objeto ex04.av guarda todos os resultados da análise e pode ser explorado por diversos comandos. Por exemplo a função model.tables aplicada a este objeto produz tabelas das médias definidas pelo modelo. O resultado mostra a média geral, médias de cada nível fatores e das combinações dos níveis dos fatores. Note que no resultado está incluído também o número de dados que gerou cada média.

  
> ex04.mt <- model.tables(ex04.av, ty="means")
> ex04.mt
Tables of means
Grand mean
         
22.96667 

 rec 
       r1    r2    r3
    25.49 22.73 20.69
rep  8.00  8.00  8.00

 esp 
       e1    e2
    23.86 22.07
rep 12.00 12.00

 rec:esp 
     esp
rec   e1     e2    
  r1  25.650 25.325
  rep  4.000  4.000
  r2  25.875 19.575
  rep  4.000  4.000
  r3  20.050 21.325
  rep  4.000  4.000

O objeto ex04.av possui vários elementos que guardam informações sobre o ajuste.

> names(ex04.av)
 [1] "coefficients"  "residuals"     "effects"       "rank"         
 [5] "fitted.values" "assign"        "qr"            "df.residual"  
 [9] "contrasts"     "xlevels"       "call"          "terms"        
[13] "model"        

> class(ex04.av)
[1] "aov" "lm"

O comando class mostra que o objeto ex04.av pertence às classes aov e lm. Isto significa que devem haver métodos associados a este objeto que tornam a exploração do resultado mais fácil. Na verdade já usamos este fato acima quando digitamos o comando summary(ex04.av). Existe uma função chamada summary.aov que foi utilizada já que o objeto é da classe aov. Iremos usar mais este mecanismo no próximo passo da análise.

Análise de resíduos

Após ajustar o modelo devemos proceder a análise dos resíduos para verificar os pressupostos. O R produz automaticamente 4 gráficos básicos de resíduos:

> par(mfrow=c(2,2))
> plot(ex04.av)

Os gráficos permitem uma análise dos resíduos que auxiliam no julgamento da adequacidade do modelo. Evidentemente você não precisa se limitar aos gráficos produzidos automaticamente pelo R - você pode criar os seus próprios gráficos muito facilmente. Neste gráficos você pode usar outras variáveis, mudar texto de eixos e títulos, etc, etc, etc. Examine os comandos abaixo e os gráficos por eles produzidos.

> par(mfrow=c(2,1))
> residuos <- resid(ex04.av)

> plot(ex04$rec, residuos)
> title("Resíduos vs Recipientes")

> plot(ex04$esp, residuos)
> title("Resíduos vs Espécies")
 
> par(mfrow=c(2,2))
> preditos <- (ex04.av$fitted.values)
> plot(residuos, preditos)
> title("Resíduos vs Preditos")
> s2 <- sum(resid(ex04.av)^2)/ex04.av$df.res
> respad <- residuos/sqrt(s2)
> boxplot(respad)
> title("Resíduos Padronizados")
> qqnorm(residuos,ylab="Residuos", main=NULL) 
> qqline(residuos)
> title("Grafico Normal de \n Probabilidade dos Resíduos")

Além disto há alguns testes já programados. Como exemplo vejamos e teste de Shapiro-Wilk para testar a normalidade dos resíduos.

> shapiro.test(residuos)

        Shapiro-Wilk normality test

data:  residuos 
W = 0.9293, p-value = 0.09402

Desdobrando interações

Conforme visto na apostila do curso, quando a interação entre os fatores é significativa podemos desdobrar os graus de liberdade de um fator dentro de cada nível do outro. A forma de fazer isto no R é reajustar o modelo utilizando a notação / que indica efeitos aninhados. Desta forma podemos desdobrar os efeitos de espécie dentro de cada recipiente e vice-versa conforme mostrado a seguir.

> ex04.avr <- aov(resp ~ rec/esp)
> summary(ex04.avr, split=list("rec:esp"=list(r1=1, r2=2, r3=3)))
              Df Sum Sq Mean Sq F value    Pr(>F)    
rec            2 92.861  46.430 36.1952 4.924e-07 ***
rec:esp        3 82.842  27.614 21.5269 3.509e-06 ***
  rec:esp: r1  1  0.211   0.211  0.1647    0.6897    
  rec:esp: r2  1 79.380  79.380 61.8813 3.112e-07 ***
  rec:esp: r3  1  3.251   3.251  2.5345    0.1288    
Residuals     18 23.090   1.283                      
---
Signif. codes:  0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 


> ex04.ave <- aov(resp ~ esp/rec)
> summary(ex04.ave, split=list("esp:rec"=list(e1=c(1,3), e2=c(2,4))))
              Df  Sum Sq Mean Sq F value    Pr(>F)    
esp            1  19.082  19.082  14.875  0.001155 ** 
esp:rec        4 156.622  39.155  30.524 8.438e-08 ***
  esp:rec: e1  2  87.122  43.561  33.958 7.776e-07 ***
  esp:rec: e2  2  69.500  34.750  27.090 3.730e-06 ***
Residuals     18  23.090   1.283                      
---
Signif. codes:  0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Teste de Tukey para comparações múltiplas

Vejamos por exemplo duas formas de usar o Teste de Tukey, a primeira usando uma implementação com a função TukeyHSD e uma segunda fazendo ops cálculos necessários com o R.

Poderíamos simplesmente digitar:

> ex04.tk <- TukeyHSD(ex04.av)
> plot(ex04.tk)
> ex04.tk

e obter diversos resultados. Entretanto nem todos nos interessam. Como a interação foi significativa na análise deste experimento a comparação dos níveis fatores principais não nos interessa.

Podemos então pedir a função que somente mostre a comparação de médias entre as combinações dos níveis dos fatores.

 
> ex04.tk <- TukeyHSD(ex04.ave, "esp:rec")
> plot(ex04.tk)
> ex04.tk
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = resp ~ esp/rec)

$"esp:rec"
        diff        lwr       upr
 [1,] -0.325 -2.8701851  2.220185
 [2,]  0.225 -2.3201851  2.770185
 [3,] -6.075 -8.6201851 -3.529815
 [4,] -5.600 -8.1451851 -3.054815
 [5,] -4.325 -6.8701851 -1.779815
 [6,]  0.550 -1.9951851  3.095185
 [7,] -5.750 -8.2951851 -3.204815
 [8,] -5.275 -7.8201851 -2.729815
 [9,] -4.000 -6.5451851 -1.454815
[10,] -6.300 -8.8451851 -3.754815
[11,] -5.825 -8.3701851 -3.279815
[12,] -4.550 -7.0951851 -2.004815
[13,]  0.475 -2.0701851  3.020185
[14,]  1.750 -0.7951851  4.295185
[15,]  1.275 -1.2701851  3.820185

Mas ainda assim temos resultados que não interessam. Mais especificamente estamos intessados nas comparações dos níveis de um fator dentro dos nívies de outro. Por exemplo, vamos fazer as comparações dos recipientes para cada uma das espécies.

Primeiro vamos obter

> s2 <- sum(resid(ex04.av)^2)/ex04.av$df.res
> dt <- qtukey(0.95, 3, 18) * sqrt(s2/4)
> dt
[1] 2.043945
> 
> ex04.m
       e1     e2
r1 25.650 25.325
r2 25.875 19.575
r3 20.050 21.325
> 
> m1 <- ex04.m[,1]
> m1
    r1     r2     r3 
25.650 25.875 20.050 
> m1d <- outer(m1,m1,"-")
> m1d
       r1     r2    r3
r1  0.000 -0.225 5.600
r2  0.225  0.000 5.825
r3 -5.600 -5.825 0.000
> m1d <- m1d[lower.tri(m1d)]
> m1d
    r2     r3   <NA> 
 0.225 -5.600 -5.825 
> 
> m1n <- outer(names(m1),names(m1),paste, sep="-")
> names(m1d) <- m1n[lower.tri(m1n)]
> m1d
 r2-r1  r3-r1  r3-r2 
 0.225 -5.600 -5.825 
> 
> data.frame(dif = m1d, sig = ifelse(abs(m1d) > dt, "*", "ns"))
         dif sig
r2-r1  0.225  ns
r3-r1 -5.600   *
r3-r2 -5.825   *
> 
> m2 <- ex04.m[,2]
> m2d <- outer(m2,m2,"-")
> m2d <- m2d[lower.tri(m2d)]
> m2n <- outer(names(m2),names(m2),paste, sep="-")
> names(m2d) <- m2n[lower.tri(m2n)]
> data.frame(dif = m2d, sig = ifelse(abs(m2d) > dt, "*", "ns"))
        dif sig
r2-r1 -5.75   *
r3-r1 -4.00   *
r3-r2  1.75  ns

Exercícios

  1. Experimento do Girocóptero: fatorial $2^3$ completo. Considere o experimento com os seguintes fatores e níveis: Realize o experimento na sala de aula, considerando 4 repetições no delineamento em blocos completos casualizados . Não esqueça de aleatorizar os lançamentos.

adilson dos anjos 2008-09-02