Análise de experimento
##-----------------------------------------------------------------------------
## Pacotes necessários.
pkg <- c("latticeExtra", "plyr", "doBy", "multcomp",
"agricolae", "wzRfun")
sapply(pkg, require, character.only=TRUE)
## Remove objetos da mémoria para começar vazia.
rm(list=ls())
##-----------------------------------------------------------------------------
## Definições gráficas.
## Tábua de cores.
mycol <- brewer.pal(6, "Set1")
## Definições de preenchimentos, linhas, etc.
ps <- list(box.rectangle=list(col=1, fill=c("gray70")),
box.umbrella=list(col=1, lty=1),
dot.symbol=list(col=1, pch=19),
dot.line=list(col="gray50", lty=3),
plot.symbol=list(col=1, cex=1.2),
plot.line=list(col=1),
plot.polygon=list(col="gray95"),
superpose.line=list(col=mycol),
superpose.symbol=list(col=mycol, pch=c(1:5)),
superpose.polygon=list(col=mycol),
strip.background=list(col=c("gray80","gray50"))
)
trellis.par.set(ps)
## show.settings()
Download dos dados: http://www.leg.ufpr.br/~walmes/data/
Download do script: script.R
##-----------------------------------------------------------------------------
## Ler.
dados <- read.table("1-consRendGraosSoja12-13.csv",
header=TRUE, sep=";", dec=",")
dados$Ano <- factor(dados$Ano, labels=c(2012,2013))
dados$Rep <- factor(dados$Rep)
dados$Trat <- factor(dados$Trat,
levels=c("SS", "SA", "ST", "SPa",
"SPi", "SX", "SD", "SR"))
str(dados)
## 'data.frame': 112 obs. of 11 variables:
## $ Ano : Factor w/ 2 levels "2012","2013": 1 1 1 1 1 1 1 1 1 1 ...
## $ Trat : Factor w/ 8 levels "SS","SA","ST",..: 1 1 1 1 1 1 1 2 2 2 ...
## $ Rep : Factor w/ 7 levels "1","2","3","4",..: 1 2 3 4 5 6 7 1 2 3 ...
## $ RG : num 1501 1541 1977 1702 2058 ...
## $ Imp : num 1.35 1.02 2.1 0.88 0.65 0.73 0.52 1.28 2.01 0.87 ...
## $ TUmid : num 9 9.4 9.6 9.4 9.7 9.8 9.5 9.6 9.7 10.1 ...
## $ AltSoja: num 96.7 91.3 96.7 100 114.7 ...
## $ NPD : num 0 0.83 2.92 0.42 0 1.25 0 0 1.25 0.42 ...
## $ NVagem : num 45.7 39.4 40.7 37.5 44.9 ...
## $ NGVagem: num 2.13 1.92 1.67 1.67 1.53 1.71 1.79 2.25 2.01 2.02 ...
## $ M100G : num 10 10.6 9.8 10.2 10 ...
xtabs(~Ano+Trat, data=dados)
## Trat
## Ano SS SA ST SPa SPi SX SD SR
## 2012 7 7 7 7 7 7 7 7
## 2013 7 7 7 7 7 7 7 7
Legenda dos fatores e níveis:
Legenda das variáveis resposta:
##-----------------------------------------------------------------------------
xyplot(RG+Imp+TUmid+AltSoja+NPD+NVagem+NGVagem+M100G~Trat,
groups=Ano, data=dados, outer=TRUE, as.table=TRUE,
scales=list(y="free", x=list(rot=90)), jitter.x=TRUE,
xlab="Consócios", ylab="Valores observados")
Experimento instalado no delineamento de blocos casualizados, com 7 repetições, avaliado em dois anos agrícolas consecutivos.
Foi considerado o modelo linear gaussiano com efeito fixo de ano, efeito aleatório de bloco dentro de ano, efeito fixo de consórcio e de ano interação com consórcio.
\[ y_{ijk} = \mu+\alpha_i+b_{i(j)}+\tau_k+\gamma_{ik}+e_{i(jk)}, \]
em que \(y_{ijk}\) são os valores observados, \(\mu\) é uma constante desconhecida e arbitrária e correspondente à todas as observações, \(\alpha_i\) é o efeito do ano, \(b_{i(j)}\) é o efeito do bloco dentro do ano, \(\tau_k\) é o efeito do nível de consórcio, \(\gamma_{ik}\) é o efeito da interação entre ano e consórcio e \(e_{i(jk)}\) é o erro resídual. Letras gregas indicam os termos de efeito fixo e letras arábes os termos de efeito aleatório. Aos termos de efeito aleatório assume-se distribuição normal com média 0 e variância \(\sigma^2_b\) e \(\sigma^2_e\) respectivamente.
O modelo teve seus parâmetros estimados por mínimos quadrados. A avaliação dos pressupostos do modelo (normalidade dos erros e variância constante) se deu por inspeção gráfica baseada nos resíduos e valores ajustados. Ao se verificar afastamento dos pressupostos, buscou-se aplicar transformações da família Box-Cos aos dados sugeridas pelo valor de \(\lambda\) que maximizam a log-verossimilhança perfilhada. Para inferência sobre diferença entre médias, considerou-se o teste de Tukey para comparações múltiplas. O estudo foi feito em separado por quando verificado que a interação ano e consórcio foi significativa.
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Rendimento de grãos"~(kg~ha^{-1}))
xyplot(RG~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
##-----------------------------------------------------------------------------
## Ajuste.
m0 <- aov(RG~Ano+Error(Ano:Rep)+Ano*Trat, data=dados)
summary(m0)
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 405403 405403 1.17 0.3
## Residuals 12 4163961 346997
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 1306920 186703 1.97 0.069 .
## Ano:Trat 7 1029923 147132 1.55 0.161
## Residuals 84 7964676 94818
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(RG~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- with(dados,
HSD.test(y=RG, trt=Trat, DFerror=glr, MSerror=qmr))
tk$statistics["HSD"] ## DMS.
## HSD
## 361.8
tk$groups
## trt means M
## 1 ST 2060 a
## 2 SS 1991 ab
## 3 SPa 1957 ab
## 4 SX 1955 ab
## 5 SA 1943 ab
## 6 SD 1837 ab
## 7 SPi 1823 ab
## 8 SR 1695 b
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 1943 1780 2107 ab 1943 ab
## 2 SD 1837 1674 2001 ab 1837 ab
## 3 SPa 1957 1793 2120 ab 1957 ab
## 4 SPi 1823 1660 1987 ab 1823 ab
## 5 SR 1695 1531 1859 b 1695 b
## 6 SS 1991 1827 2154 ab 1991 ab
## 7 ST 2060 1897 2224 a 2060 a
## 8 SX 1955 1791 2119 ab 1955 ab
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
Apesar do teste F ter sido não significativo, a aplicação do teste de Tukey indicou diferenças entre as médias extremas.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.1f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Teor de impurezas"~("%"))
xyplot(Imp~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
Efeito de ano bem expressivo, inclusive com diferença de variabilidade.
##-----------------------------------------------------------------------------
## Ajuste.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(Imp~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0, which=1:3)
MASS::boxcox(m0)
abline(v=1/3, col=2)
layout(1)
## Aplicando transformação.
m0 <- update(m0, formula=.^(1/3)~.)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(Imp^(1/3)~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 28.17 28.17 303 7.1e-10 ***
## Residuals 12 1.12 0.09
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 0.396 0.0566 2.03 0.06 .
## Ano:Trat 7 0.183 0.0261 0.94 0.48
## Residuals 84 2.340 0.0279
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 0.1961
tk$groups
## trt means M
## 1 SR 1.597 a
## 2 SPi 1.511 ab
## 3 ST 1.467 ab
## 4 SD 1.466 ab
## 5 SA 1.456 ab
## 6 SPa 1.427 ab
## 7 SX 1.412 ab
## 8 SS 1.399 b
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 1.456 1.368 1.545 ab 1.456 ab
## 2 SD 1.466 1.378 1.555 ab 1.466 ab
## 3 SPa 1.427 1.339 1.516 ab 1.427 ab
## 4 SPi 1.511 1.422 1.600 ab 1.511 ab
## 5 SR 1.597 1.509 1.686 a 1.597 a
## 6 SS 1.399 1.311 1.488 b 1.399 b
## 7 ST 1.467 1.378 1.556 ab 1.467 ab
## 8 SX 1.412 1.323 1.500 ab 1.412 ab
## Representar na escala dos dados.
grid[,c("estimate","lwr","upr")] <- grid[,c("estimate","lwr","upr")]^3
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
Apesar do teste F ter sido não significativo, a aplicação do teste de Tukey indicou diferenças entre as médias extremas. No gráfico estão sendo representados os valores médios na escala original. Eles foram obtidos pela transformação das médias ajustadas considerando a função inversa usada na resposta dados para adequação dos pressupostos. Em função disso, os intervalos na escala transformada não apresentam a mesma amplitude e nem simetria.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Teor de umidade"~("%"))
xyplot(TUmid~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
Efeito de ano bem expressivo, inclusive com diferença de variabilidade.
##-----------------------------------------------------------------------------
## Ajuste.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(TUmid~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0, which=1:3)
MASS::boxcox(m0, lambda=seq(-3, 1, by=0.1))
abline(v=-2, col=2)
layout(1)
## Aplicando transformação.
m0 <- update(m0, formula=.^(-2)~.)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(TUmid^(-2)~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 0.001076 0.001076 813 2.1e-12 ***
## Residuals 12 0.000016 0.000001
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 9.16e-06 1.31e-06 4.84 0.00013 ***
## Ano:Trat 7 1.95e-06 2.79e-07 1.03 0.41486
## Residuals 84 2.27e-05 2.71e-07
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 0.0006111
tk$groups
## trt means M
## 1 SS 0.008035 a
## 2 SX 0.007524 ab
## 3 SPa 0.007516 ab
## 4 SD 0.007459 ab
## 5 SA 0.007354 b
## 6 SPi 0.007281 b
## 7 ST 0.007090 b
## 8 SR 0.007071 b
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, -grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 0.007354 0.007078 0.007630 b 0.007354 b
## 2 SD 0.007459 0.007183 0.007736 ab 0.007459 ab
## 3 SPa 0.007516 0.007239 0.007792 ab 0.007516 ab
## 4 SPi 0.007281 0.007004 0.007557 b 0.007281 b
## 5 SR 0.007071 0.006795 0.007348 b 0.007071 b
## 6 SS 0.008035 0.007759 0.008312 a 0.008035 a
## 7 ST 0.007090 0.006813 0.007366 b 0.007090 b
## 8 SX 0.007524 0.007248 0.007801 ab 0.007524 ab
## Representar na escala dos dados.
grid[,c("estimate","lwr","upr")] <-
grid[,c("estimate","lwr","upr")]^(-1/2)
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
No gráfico estão sendo representados os valores médios na escala original. Eles foram obtidos pela transformação das médias ajustadas considerando a função inversa usada na resposta dados para adequação dos pressupostos. Em função disso, os intervalos na escala transformada não apresentam a mesma amplitude e nem simetria.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Altura das plantas de soja"~("cm"))
xyplot(AltSoja~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
##-----------------------------------------------------------------------------
## Ajuste.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(AltSoja~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(AltSoja~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 6107 6107 25.6 0.00028 ***
## Residuals 12 2868 239
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 64 9.17 0.44 0.88
## Ano:Trat 7 77 11.04 0.53 0.81
## Residuals 84 1757 20.92
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 5.373
tk$groups
## trt means M
## 1 SPa 94.87 a
## 2 SPi 94.75 a
## 3 SS 94.69 a
## 4 SD 94.35 a
## 5 SA 93.99 a
## 6 SX 93.29 a
## 7 SR 93.26 a
## 8 ST 92.73 a
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 93.99 91.56 96.42 a 93.99 a
## 2 SD 94.35 91.92 96.78 a 94.35 a
## 3 SPa 94.87 92.44 97.30 a 94.87 a
## 4 SPi 94.75 92.32 97.18 a 94.75 a
## 5 SR 93.26 90.83 95.69 a 93.26 a
## 6 SS 94.69 92.26 97.12 a 94.69 a
## 7 ST 92.73 90.30 95.16 a 92.73 a
## 8 SX 93.29 90.86 95.72 a 93.29 a
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Número de plantas daninhas"~(plantas~m^{-2}))
xyplot(NPD~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
## xyplot(log(NPD+0.5)~Trat, groups=Ano, data=dados,
## as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
## auto.key=list(columns=2),
## xlab="Consórcios", ylab=lab)
Efeito de ano bem expressivo, inclusive com diferença de variabilidade. Ainda é importante mencionar que essa é uma variável proveniente de uma contagem, como média de contagens, portanto não se pode aplicar à media de contagens a distribuição Poisson, a menos que o número de unidades (plantas) avaliadas para obter tal média, seja informado. Apresenta valores baixos incluindo zeros, portanto não contínua como se supõe para uso da análise de variância. Por outro lado, certas transformações, se adequadamente aplicadas, podem permitir que os pressupostos sejam atendidos, não comprometendo a validade das inferências.
##-----------------------------------------------------------------------------
## Ajuste.
summary(dados$NPD)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 0.42 1.25 4.58 5.68 32.70
## Presença de zeros. Somar um para poder se fazer log, caso necessário.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm((NPD+0.5)~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0, which=1:3)
MASS::boxcox(m0, lambda=seq(-2, 2, by=0.1))
abline(v=0, col=2)
layout(1)
## Aplicando transformação.
m0 <- update(m0, formula=log(.)~.)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(log(NPD+0.5)~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 107 107.2 117 1.5e-07 ***
## Residuals 12 11 0.9
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 5.6 0.794 1.39 0.22
## Ano:Trat 7 2.7 0.385 0.67 0.69
## Residuals 84 48.0 0.572
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 0.8886
tk$groups
## trt means M
## 1 SX 1.1369 a
## 2 SPi 1.1052 a
## 3 SS 1.0524 a
## 4 SPa 0.9343 a
## 5 ST 0.8153 a
## 6 SD 0.6713 a
## 7 SA 0.5818 a
## 8 SR 0.5394 a
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 0.5818 0.1798 0.9837 a 0.5818 a
## 2 SD 0.6713 0.2693 1.0732 a 0.6713 a
## 3 SPa 0.9343 0.5323 1.3362 a 0.9343 a
## 4 SPi 1.1052 0.7033 1.5072 a 1.1052 a
## 5 SR 0.5394 0.1374 0.9413 a 0.5394 a
## 6 SS 1.0524 0.6505 1.4544 a 1.0524 a
## 7 ST 0.8153 0.4133 1.2173 a 0.8153 a
## 8 SX 1.1369 0.7350 1.5389 a 1.1369 a
## Representar na escala dos dados.
grid[,c("estimate","lwr","upr")] <-
exp(grid[,c("estimate","lwr","upr")])-0.5
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
No gráfico estão sendo representados os valores médios na escala original. Eles foram obtidos pela transformação das médias ajustadas considerando a função inversa usada na resposta dados para adequação dos pressupostos. Em função disso, os intervalos na escala transformada não apresentam a mesma amplitude e nem simetria.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Número de vagens por planta")
xyplot(NVagem~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
Efeito de ano bem expressivo, inclusive com diferença de variabilidade. Ainda é importante mencionar que essa é uma variável do tipo contagem então se fazem justos os mesmos comentários feitos para NPD. Os valores são altos (distantes do zero), portanto não contínua como se supõe para uso da análise de variância. Por outro lado, certas transformações, se adequadamente aplicadas, podem permitir que os pressupostos sejam atendidos, não comprometendo a validade das inferências. Em especial, pelo fato de ser uma contagem alta, espera-se menor afastamento dos pressupostos do que aquele para contagens baixas.
##-----------------------------------------------------------------------------
## Ajuste.
summary(dados$NVagem)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 25.8 37.3 42.3 44.6 50.5 79.7
## Sem presença de zeros.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(NVagem~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0, which=1:3)
MASS::boxcox(m0, lambda=seq(-2, 2, by=0.1))
abline(v=0, col=2)
layout(1)
## Aplicando transformação.
m0 <- update(m0, formula=log(.)~.)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(log(NVagem)~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 2.11 2.109 22.9 0.00044 ***
## Residuals 12 1.10 0.092
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 0.338 0.0483 1.60 0.15
## Ano:Trat 7 0.388 0.0555 1.84 0.09 .
## Residuals 84 2.533 0.0302
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 0.204
tk$groups
## trt means M
## 1 SA 3.835 a
## 2 ST 3.833 a
## 3 SS 3.828 a
## 4 SD 3.786 a
## 5 SR 3.747 a
## 6 SPa 3.720 a
## 7 SPi 3.712 a
## 8 SX 3.692 a
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 3.835 3.743 3.927 a 3.835 a
## 2 SD 3.786 3.694 3.878 a 3.786 a
## 3 SPa 3.720 3.628 3.813 a 3.720 a
## 4 SPi 3.712 3.620 3.804 a 3.712 a
## 5 SR 3.747 3.655 3.839 a 3.747 a
## 6 SS 3.828 3.735 3.920 a 3.828 a
## 7 ST 3.833 3.740 3.925 a 3.833 a
## 8 SX 3.692 3.600 3.785 a 3.692 a
## Representar na escala dos dados.
grid[,c("estimate","lwr","upr")] <-
exp(grid[,c("estimate","lwr","upr")])
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
No gráfico estão sendo representados os valores médios na escala original. Eles foram obtidos pela transformação das médias ajustadas considerando a função inversa usada na resposta dados para adequação dos pressupostos. Em função disso, os intervalos na escala transformada não apresentam a mesma amplitude e nem simetria.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Número de grãos por vagem")
xyplot(NGVagem~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
Efeito de ano bem expressivo, inclusive com diferença de variabilidade. Ainda é importante mencionar que essa é uma variável do tipo contagem então se fazem justos os mesmos comentários feitos para NPD. Os valores são altos (distantes do zero), portanto não contínua como se supõe para uso da análise de variância. Por outro lado, certas transformações, se adequadamente aplicadas, podem permitir que os pressupostos sejam atendidos, não comprometendo a validade das inferências. Em especial, pelo fato de ser uma contagem alta, espera-se menor afastamento dos pressupostos do que aquele para contagens baixas.
##-----------------------------------------------------------------------------
## Ajuste.
summary(dados$NGVagem)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.57 1.27 1.73 1.90 2.12 5.73
## MASS::fractions(dados$NGVagem)
## Sem presença de zeros.
## A observação 88 foi removida por ser considerada outlier por medidas
## de influencia.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(NGVagem~Ano+Ano:Rep+Ano*Trat, data=dados[-88,])
## anova(m0)
## im <- influence.measures(m0)
## summary(im)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0, which=1:3)
## MASS::boxcox(m0, lambda=seq(-2, 2, by=0.1))
## abline(v=0.5, col=2)
layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(NGVagem~Ano+Error(Ano:Rep)+Ano*Trat, data=dados[-88,]))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 0.2 0.16 0.03 0.87
## Trat 1 2.9 2.89 0.47 0.51
## Residuals 11 67.0 6.09
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 1.88 0.269 2.07 0.056 .
## Ano:Trat 7 4.94 0.705 5.44 3.7e-05 ***
## Residuals 83 10.77 0.130
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Médias ajustadas.
## O desbalanceamento impede de usar Tukey.
## glr <- df.residual(m0)
## qmr <- deviance(m0)/glr
##
## ## Teste de Tukey.
## tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
## DFerror=glr, MSerror=qmr)
## tk$statistics["HSD"] ## DMS.
## tk$groups
##
## ## Remove os espaços extras adicionados pela função.
## tk$groups[,-2] <- sapply(tk$groups[,-2],
## FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect=c("Ano","Trat"))
rownames(L) <- apply(attr(L, "grid"), 1, paste, collapse="/")
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
## grid <- apmc(X=L, model=m0, focus="Trat",
## test="single-step", level=0.05)
L <- by(data=L, INDICES=attr(L, "grid")$Ano, FUN=as.matrix)
L <- lapply(L, apmc, model=m0, focus="Trat",
test="single-step", level=0.05)
grid <- ldply(L, .id="Ano")
grid$Trat <- factor(gsub(pattern="^.*/", x=grid$Trat, replacement=""),
levels(dados$Trat))
## grid
## grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
## grid
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
No gráfico estão sendo representados os valores médios na escala original. Eles foram obtidos pela transformação das médias ajustadas considerando a função inversa usada na resposta dados para adequação dos pressupostos. Em função disso, os intervalos na escala transformada não apresentam a mesma amplitude e nem simetria.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
l <- levels(grid$Ano)
pch <- c(1,19)
key <- list(columns=length(l), type="o", divide=1,
text=list(l),
lines=list(pch=pch, lty=1))
segplot(Trat~lwr+upr, groups=grid$Ano, data=grid,
centers=estimate, draw=FALSE,
pch=pch[as.integer(grid$Ano)],
ann=grid$cld, f=0.1,
## ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc, key=key,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, groups, f, ...){
d <- 2*((as.integer(groups)-1)/(nlevels(groups)-1))-1
z <- as.numeric(z)+f*d
panel.segplot(z, centers=centers,
subscripts=subscripts, ...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann,
pos=sign(d)+2, cex=0.8)
})
No gráfico acima, as letras distinguem médias de consórcios para um mesmo nível de ano.
##-----------------------------------------------------------------------------
## Ver.
lab <- expression("Massa de 100 graõs"~("g"))
xyplot(M100G~Trat, groups=Ano, data=dados,
as.table=TRUE, type=c("p","a"), jitter.x=TRUE,
auto.key=list(columns=2),
xlab="Consórcios", ylab=lab)
##-----------------------------------------------------------------------------
## Ajuste.
## Para os termos Trat e Ano:Trat, são os mesmos F.
m0 <- lm(M100G~Ano+Ano:Rep+Ano*Trat, data=dados)
## anova(m0)
## Diagnóstico dos pressupostos.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Sem afastamentos dos pressupostos que sejam sistemáticos
## (corrigíveis) ou prejudiciais à inferência.
## ANOVA com valores de F corretos.
summary(aov(M100G~Ano+Error(Ano:Rep)+Ano*Trat, data=dados))
##
## Error: Ano:Rep
## Df Sum Sq Mean Sq F value Pr(>F)
## Ano 1 144.1 144.1 279 1.1e-09 ***
## Residuals 12 6.2 0.5
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Error: Within
## Df Sum Sq Mean Sq F value Pr(>F)
## Trat 7 2.34 0.334 1.58 0.15
## Ano:Trat 7 2.29 0.327 1.55 0.16
## Residuals 84 17.75 0.211
##-----------------------------------------------------------------------------
## Médias ajustadas.
glr <- df.residual(m0)
qmr <- deviance(m0)/glr
## Teste de Tukey.
tk <- HSD.test(y=m0$model[,1], trt=m0$model["Trat"],
DFerror=glr, MSerror=qmr)
tk$statistics["HSD"] ## DMS.
## HSD
## 0.5401
tk$groups
## trt means M
## 1 SX 11.50 a
## 2 SPa 11.38 a
## 3 SA 11.28 a
## 4 SPi 11.28 a
## 5 SD 11.24 a
## 6 ST 11.23 a
## 7 SS 11.11 a
## 8 SR 10.99 a
## Remove os espaços extras adicionados pela função.
tk$groups[,-2] <- sapply(tk$groups[,-2],
FUN=gsub, pattern="\\s*$", replacement="")
## Para obter os IC para a média (ajustada).
## LSmeans(m0, effect="Trat")
L <- LSmatrix(m0, effect="Trat")
rownames(L) <- levels(dados$Trat)
## grid <- apmc(X=L, model=m0, focus="Trat", test="fdr", level=0.05)
grid <- apmc(X=L, model=m0, focus="Trat",
test="single-step", level=0.05)
## grid
grid <- merge(grid, tk$groups, by.x="Trat", by.y="trt")
grid$Trat <- reorder(grid$Trat, grid$estimate)
grid
## Trat estimate lwr upr cld means M
## 1 SA 11.28 11.03 11.52 a 11.28 a
## 2 SD 11.24 10.99 11.48 a 11.24 a
## 3 SPa 11.38 11.13 11.62 a 11.38 a
## 4 SPi 11.28 11.03 11.52 a 11.28 a
## 5 SR 10.99 10.74 11.23 a 10.99 a
## 6 SS 11.11 10.87 11.35 a 11.11 a
## 7 ST 11.23 10.99 11.48 a 11.23 a
## 8 SX 11.49 11.25 11.74 a 11.50 a
## cld veio da glht() e M veio da HSD.test().
## estimate é uma média ajustada de mínimos quadrados, means é média
## amostral.
##-----------------------------------------------------------------------------
l <- levels(grid$Trat)
ylim <- c(0.5, length(l)+1)
sc <- list(y=list(at=seq_along(l), labels=l))
segplot(Trat~lwr+upr, data=grid, centers=estimate, draw=FALSE,
## ann=grid$cld,
ann=grid$M, ## Teste de Tukey.
ylim=ylim, scales=sc,
xlab=lab, ylab="Consórcios",
panel=function(z, centers, ann, subscripts, ...){
panel.segplot(z=z, centers=centers,
subscripts=subscripts,
...)
ann <- sprintf("%0.2f %s", centers, ann)
panel.text(x=centers, y=z, labels=ann, pos=3, cex=0.8)
})
##-----------------------------------------------------------------------------
## Versões dos pacotes e data do documento.
sessionInfo()
## R version 3.2.0 (2015-04-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 14.04.2 LTS
##
## locale:
## [1] LC_CTYPE=en_US.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 base
##
## other attached packages:
## [1] wzRfun_0.4 agricolae_1.2-1 multcomp_1.3-6
## [4] TH.data_1.0-3 mvtnorm_0.9-9997 doBy_4.5-10
## [7] MASS_7.3-39 survival_2.38-1 plyr_1.8.1
## [10] latticeExtra_0.6-26 lattice_0.20-31 RColorBrewer_1.0-5
## [13] rmarkdown_0.5.1 knitr_1.6
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.11.0 spdep_0.5-88 formatR_1.0 nloptr_1.0.4
## [5] methods_3.2.0 LearnBayes_2.15 tools_3.2.0 boot_1.3-15
## [9] digest_0.6.4 lme4_1.1-7 evaluate_0.5.5 nlme_3.1-120
## [13] Matrix_1.2-0 yaml_2.1.13 coda_0.16-1 stringr_0.6.2
## [17] cluster_2.0.1 combinat_0.0-8 grid_3.2.0 sp_1.0-15
## [21] minqa_1.2.3 klaR_0.6-12 deldir_0.0-22 htmltools_0.2.6
## [25] splines_3.2.0 sandwich_2.3-0 zoo_1.7-10
Sys.time()
## [1] "2015-05-29 19:08:35 BRT"