Curso de estatística experimental com aplicações em R |
|
12 à 14 de Novembro de 2014 - Manaus - AM |
Prof. Dr. Walmes M. Zeviani |
Embrapa Amazônia Ocidental |
Lab. de Estatística e Geoinformação - LEG |
Departamento de Estatística - UFPR |
##-----------------------------------------------------------------------------
## 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] methods splines stats graphics grDevices utils datasets base
##
## other attached packages:
## [1] wzRfun_0.3 plyr_1.8.1 reshape_0.8.5 multcomp_1.3-7
## [5] TH.data_1.0-3 mvtnorm_0.9-9997 doBy_4.5-11 MASS_7.3-34
## [9] survival_2.37-7 latticeExtra_0.6-26 RColorBrewer_1.0-5 lattice_0.20-29
## [13] rmarkdown_0.3.3 knitr_1.7
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.4 evaluate_0.5.5 formatR_1.0 grid_3.1.1 htmltools_0.2.6
## [6] Matrix_1.1-4 Rcpp_0.11.3 sandwich_2.3-0 stringr_0.6.2 tools_3.1.1
## [11] yaml_2.1.13 zoo_1.7-10
## obs: Para instalar um pacote faça:
## install.packages("nome_do_pacote", dependencies=TRUE)
##-----------------------------------------------------------------------------
## Lendo arquivos de dados.
## Url de um arquivo com dados.
url <- "caiaue.txt"
## url <- "http://www.leg.ufpr.br/~walmes/data/caiaue.txt"
## Importa os dados a partir do arquivo na web.
da <- read.table(file=url, header=TRUE, sep="\t")
names(da) <- substr(names(da), 1, 4)
## Convertendo para fator.
da$peri <- factor(da$peri)
## Cria uma variável umidade numérica com os pontos médios.
levels(da$umid)
## [1] "18-19" "19-20" "20-21" "21-22" "22-23"
da$umi <- as.numeric(as.character(
factor(da$umid, labels=c(18:22+0.5))))
## Mostra a estrutura do objeto.
str(da)
## 'data.frame': 45 obs. of 10 variables:
## $ peri: Factor w/ 3 levels "55","75","100": 1 1 1 1 1 1 1 1 1 1 ...
## $ umid: Factor w/ 5 levels "18-19","19-20",..: 1 1 1 2 2 2 3 3 3 4 ...
## $ trat: int 1 1 1 2 2 2 3 3 3 4 ...
## $ rep : int 1 2 3 1 2 3 1 2 3 1 ...
## $ germ: num 34.52 36 30.79 6.03 5.26 ...
## $ pcon: num 11.61 6.86 3.16 23 18.97 ...
## $ ivg : num 5.81 6.04 4.61 14.24 10.61 ...
## $ sg : int 107 126 117 241 194 221 272 344 331 188 ...
## $ sng : int 203 224 263 159 175 167 183 96 90 205 ...
## $ umi : num 18.5 18.5 18.5 19.5 19.5 19.5 20.5 20.5 20.5 21.5 ...
## Os dados são de um experimento para verificar o efeito a adubação com
## potássio nos componentes de produção de soja sob diferentes níveis de
## umidade.
##-----------------------------------------------------------------------------
## Análise exploratória.
## Proporção amostral.
da$pa <- with(da, sg/(sg+sng))
xyplot(pa~umi, groups=peri, data=da,
type=c("p","a"), auto.key=TRUE, jitter.x=TRUE)
\[ \begin{aligned} Y|\text{fontes de variação} &\,\sim \text{Binomial}(\pi_{ij}, n_{ijk}) \newline g(\pi_{ij}) &= \mu+\alpha_i+\tau_j \end{aligned} \]
em que \(\alpha_i\) é o efeito período \(i\), \(\tau_j\) o efeito da umidade \(j\) sobre uma função \(g\) do parâmetro \(\pi\) que representa a probabilidade de germinação. A variável resposta \(Y\) representa o número de sementes germinadas e não germinadas cujo total é \(n_{ijk}\). \(\mu\) é a estimativa na ausência do efeito dos termos mencioandos. \(\pi_{ij}\) é a estimativa para as observações na combinação \(ij\). A função \(g\) é a chamada função de ligação. Para distribuição binomial é comum usar a função de ligação logit, a probit e a complementar log-log.
##-----------------------------------------------------------------------------
## Espeficicação do modelo, considerando distribuição normal para a
## proporção amostral.
m0 <- lm(pa~peri*umid, data=da)
## Diagnóstico.
par(mfrow=c(2,2)); plot(m0); layout(1)
## Apresenta relação mádia variância condizente com a suposição de
## distribuição binomial onde V(Y) ~= p*(1-p).
##-----------------------------------------------------------------------------
## Análise considerando distribuição binomial (ou quasibinomial).
## Quasibinomial estima parâmetro de dispersão. Link default é logit.
m1 <- glm(cbind(sg, sng)~peri*umid, data=da,
family=quasibinomial(link="logit"))
summary(m1)
##
## Call:
## glm(formula = cbind(sg, sng) ~ peri * umid, family = quasibinomial(link = "logit"),
## data = da)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -7.3424 -2.0733 -0.3986 2.3595 6.8903
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.6788 0.2476 -2.741 0.010219 *
## peri75 -0.4342 0.3600 -1.206 0.237236
## peri100 -4.0652 1.2871 -3.158 0.003605 **
## umid19-20 0.9483 0.3338 2.841 0.008013 **
## umid20-21 1.6213 0.3390 4.782 4.31e-05 ***
## umid21-22 0.9524 0.3365 2.830 0.008219 **
## umid22-23 0.3132 0.3319 0.944 0.352824
## peri75:umid19-20 -0.8575 0.4926 -1.741 0.091931 .
## peri100:umid19-20 1.5202 1.3591 1.119 0.272197
## peri75:umid20-21 0.6679 0.4995 1.337 0.191280
## peri100:umid20-21 3.4288 1.3267 2.585 0.014862 *
## peri75:umid21-22 1.0923 0.4933 2.214 0.034549 *
## peri100:umid21-22 4.7038 1.3290 3.539 0.001330 **
## peri75:umid22-23 1.7087 0.4841 3.529 0.001366 **
## peri100:umid22-23 5.7034 1.3337 4.276 0.000178 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for quasibinomial family taken to be 14.23902)
##
## Null deviance: 5162.40 on 44 degrees of freedom
## Residual deviance: 433.37 on 30 degrees of freedom
## AIC: NA
##
## Number of Fisher Scoring iterations: 5
summary(m1)$dispersion
## [1] 14.23902
## Diagnóstico.
par(mfrow=c(2,2)); plot(m1); layout(1)
## Relação média variância incorporada no modelo.
## Quadro de análise de deviance.
anova(m1, test="F")
## Analysis of Deviance Table
##
## Model: quasibinomial, link: logit
##
## Response: cbind(sg, sng)
##
## Terms added sequentially (first to last)
##
##
## Df Deviance Resid. Df Resid. Dev F Pr(>F)
## NULL 44 5162.4
## peri 2 143.34 42 5019.1 5.0332 0.01304 *
## umid 4 3008.32 38 2010.7 52.8182 3.711e-13 ***
## peri:umid 8 1577.38 30 433.4 13.8473 3.552e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##-----------------------------------------------------------------------------
## Comparações múltiplas.
LSmeans(m1, effect=c("peri","umid"))
## estimate se z.stat p.value lwr upr peri umid
## 1 -0.6787584 0.2476271 -2.741050 6.124311e-03 -1.1640987 -0.1934182 55 18-19
## 2 -1.1129495 0.2613337 -4.258729 2.055928e-05 -1.6251541 -0.6007448 75 18-19
## 3 -4.7439654 1.2630939 -3.755830 1.727681e-04 -7.2195839 -2.2683470 100 18-19
## 4 0.2695547 0.2238907 1.203957 2.286063e-01 -0.1692630 0.7083724 55 19-20
## 5 -1.0221706 0.2507289 -4.076796 4.566046e-05 -1.5135902 -0.5307510 75 19-20
## 6 -2.2754341 0.3744295 -6.077069 1.223991e-09 -3.0093025 -1.5415657 100 19-20
## 7 0.9425024 0.2315687 4.070077 4.699766e-05 0.4886361 1.3963688 55 20-21
## 8 1.1761882 0.2574933 4.567840 4.927748e-06 0.6715107 1.6808658 75 20-21
## 9 0.3061227 0.2230354 1.372529 1.698987e-01 -0.1310187 0.7432641 100 20-21
## 10 0.2736083 0.2278246 1.200961 2.297665e-01 -0.1729196 0.7201363 55 21-22
## 11 0.9317470 0.2486554 3.747141 1.788616e-04 0.4443913 1.4191027 75 21-22
## 12 0.9122480 0.2398229 3.803841 1.424698e-04 0.4422038 1.3822922 100 21-22
## 13 -0.3655424 0.2209583 -1.654350 9.805638e-02 -0.7986127 0.0675279 55 22-23
## 14 0.9089812 0.2365510 3.842644 1.217159e-04 0.4453498 1.3726125 75 22-23
## 15 1.2726443 0.2705582 4.703773 2.553972e-06 0.7423600 1.8029287 100 22-23
## Os erros padrões são diferentes mesmo o experimento sendo balanceado
## porque na binomial o existe relação média variãncia.
## Desdobrar umidade dentro de período.
X <- LSmatrix(m1, effect=c("peri","umid"))
grid <- equallevels(attr(X, "grid"), da)
## Divide a matriz de acordo com os níveis de peri.
L <- by(X, INDICES=grid$peri, FUN=as.matrix)
L <- lapply(L, "rownames<-", levels(da$umid))
grid <- lapply(L, apmc, model=m0, focus="umid", test="fdr")
grid
## $`55`
## umid estimate lwr upr cld
## 1 18-19 0.3376853 0.2373469 0.4380238 c
## 2 19-20 0.5659443 0.4656058 0.6662828 ab
## 3 20-21 0.7219479 0.6216094 0.8222863 a
## 4 21-22 0.5702004 0.4698620 0.6705389 ab
## 5 22-23 0.4250422 0.3247037 0.5253807 bc
##
## $`75`
## umid estimate lwr upr cld
## 1 18-19 0.2448451 0.1445067 0.3451836 b
## 2 19-20 0.2590378 0.1586993 0.3593762 b
## 3 20-21 0.7643027 0.6639643 0.8646412 a
## 4 21-22 0.7207804 0.6204419 0.8211189 a
## 5 22-23 0.7138861 0.6135477 0.8142246 a
##
## $`100`
## umid estimate lwr upr cld
## 1 18-19 0.009118541 -0.091219914 0.1094570 c
## 2 19-20 0.092481969 -0.007856486 0.1928204 c
## 3 20-21 0.578140872 0.477802417 0.6784793 a
## 4 21-22 0.713216054 0.612877599 0.8135545 ab
## 5 22-23 0.778372671 0.678034216 0.8787111 b
grid <- ldply(grid); names(grid)[1] <- "peri"
grid <- equallevels(grid, da)
segplot(umid~lwr+upr, data=grid, centers=estimate,
groups=grid$peri, pch=grid$peri, horizontal=FALSE,
f=0.1, panel=panel.segplotBy,
ylab="Log da razão de chances",
key=list(text=list(levels(da$peri)),
points=list(pch=1:3)))
## Passando para escala da probabilidade de germinação.
ci <- sapply(grid[,c("estimate","lwr","upr")], m1$family$linkinv)
colnames(ci) <- paste0("p", colnames(ci))
grid <- cbind(grid, ci)
segplot(umid~plwr+pupr, data=grid, centers=pestimate,
groups=grid$peri, pch=grid$peri, horizontal=FALSE,
f=0.1, panel=panel.segplotBy,
ylab="Probabilidade de germinação",
xlab="Faixa de umidade no armazenamento (%)",
key=list(text=list(levels(da$peri)),
points=list(pch=1:3)))
## Análise do IVG
##-----------------------------------------------------------------------------
## Ver o gráfico.
xyplot(ivg~umid, groups=peri, data=da,
type=c("p","a"), auto.key=TRUE)
## Soma 0.01 para ter valores de y>0.
m0 <- lm(ivg+0.01~peri*umid, data=da)
par(mfrow=c(2,2)); plot(m0); layout(1)
## Relação média variância.
MASS::boxcox(m0)
abline(v=0.5, col=2)
## Transformando com raíz quadrada.
m0 <- lm(sqrt(ivg+0.01)~peri*umid, data=da)
par(mfrow=c(2,2)); plot(m0); layout(1)
## Quadro de anova.
anova(m0)
## Analysis of Variance Table
##
## Response: sqrt(ivg + 0.01)
## Df Sum Sq Mean Sq F value Pr(>F)
## peri 2 7.356 3.6778 26.453 2.388e-07 ***
## umid 4 68.573 17.1432 123.304 < 2.2e-16 ***
## peri:umid 8 16.830 2.1038 15.132 1.298e-08 ***
## Residuals 30 4.171 0.1390
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Desdobrar umidade dentro de período.
X <- LSmatrix(m1, effect=c("peri","umid"))
grid <- equallevels(attr(X, "grid"), da)
## Divide a matriz de acordo com os níveis de peri.
L <- by(X, INDICES=grid$peri, FUN=as.matrix)
L <- lapply(L, "rownames<-", levels(da$umid))
grid <- lapply(L, apmc, model=m0, focus="umid", test="fdr")
grid
## $`55`
## umid estimate lwr upr cld
## 1 18-19 2.340520 1.900866 2.780174 c
## 2 19-20 3.516003 3.076349 3.955657 b
## 3 20-21 4.823600 4.383946 5.263254 a
## 4 21-22 3.858843 3.419189 4.298497 b
## 5 22-23 3.345226 2.905573 3.784880 b
##
## $`75`
## umid estimate lwr upr cld
## 1 18-19 1.878450 1.438796 2.318104 b
## 2 19-20 2.060367 1.620713 2.500021 b
## 3 20-21 5.056444 4.616790 5.496098 a
## 4 21-22 4.459289 4.019635 4.898943 a
## 5 22-23 5.024509 4.584855 5.464163 a
##
## $`100`
## umid estimate lwr upr cld
## 1 18-19 0.2552285 -0.1844254 0.6948824 d
## 2 19-20 1.2093229 0.7696689 1.6489768 c
## 3 20-21 3.6264047 3.1867508 4.0660586 a
## 4 21-22 4.1382976 3.6986437 4.5779515 ab
## 5 22-23 4.6951948 4.2555409 5.1348488 b
grid <- ldply(grid); names(grid)[1] <- "peri"
grid <- equallevels(grid, da)
segplot(umid~lwr+upr, data=grid, centers=estimate,
groups=grid$peri, pch=grid$peri, horizontal=FALSE,
f=0.1, panel=panel.segplotBy,
ylab=expression(IVG~(y[t]==(y+0.01)^{1/2})),
key=list(text=list(levels(da$peri)),
points=list(pch=1:3)))
##-----------------------------------------------------------------------------
## Análise com pacote ExpDes.
require(ExpDes)
## Loading required package: ExpDes
##
## Attaching package: 'ExpDes'
##
## The following object is masked from 'package:MASS':
##
## ginv
with(da, fat2.crd(factor1=peri, factor2=umid,
resp=sqrt(ivg+0.01), quali=c(TRUE,TRUE),
mcomp="tukey"))
## ------------------------------------------------------------------------
## Legend:
## FACTOR 1: F1
## FACTOR 2: F2
## ------------------------------------------------------------------------
##
##
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr>Fc
## F1 2 7.356 3.6778 26.453 2.3882e-07
## F2 4 68.573 17.1432 123.304 0.0000e+00
## F1*F2 8 16.830 2.1038 15.132 1.2985e-08
## Residuals 30 4.171 0.1390
## Total 44 96.929
## ------------------------------------------------------------------------
## CV = 11.12 %
##
## ------------------------------------------------------------------------
## Shapiro-Wilk normality test
## p-value: 0.7373667
## According to Shapiro-Wilk normality test at 5% of significance, residuals can be considered normal.
## ------------------------------------------------------------------------
##
##
##
## Significant interaction: analyzing the interaction
## ------------------------------------------------------------------------
##
## Analyzing F1 inside of each level of F2
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr.Fc
## F2 4 68.57272 17.14318 123.3036 0
## F2:F1 18-19 2 7.19680 3.59840 25.8818 0
## F2:F1 19-20 2 8.16392 4.08196 29.3598 0
## F2:F1 20-21 2 3.53251 1.76625 12.7039 1e-04
## F2:F1 21-22 2 0.54167 0.27083 1.948 0.1602
## F2:F1 22-23 2 4.75085 2.37543 17.0854 0
## Residuals 30 4.17097 0.13903
## Total 44 96.92944 2.20294
## ------------------------------------------------------------------------
##
##
##
## F1 inside of the level 18-19 of F2
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 1 2.34052
## a 2 1.87845
## b 3 0.2552285
## ------------------------------------------------------------------------
##
##
## F1 inside of the level 19-20 of F2
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 1 3.516003
## b 2 2.060367
## c 3 1.209323
## ------------------------------------------------------------------------
##
##
## F1 inside of the level 20-21 of F2
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 2 5.056444
## a 1 4.8236
## b 3 3.626405
## ------------------------------------------------------------------------
##
##
## F1 inside of the level 21-22 of F2
##
## According to the F test, the means of this factor are statistical equal.
## Levels Means
## 1 1 3.858843
## 2 2 4.459289
## 3 3 4.138298
## ------------------------------------------------------------------------
##
##
## F1 inside of the level 22-23 of F2
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 2 5.024509
## a 3 4.695195
## b 1 3.345226
## ------------------------------------------------------------------------
##
##
##
## Analyzing F2 inside of each level of F1
## ------------------------------------------------------------------------
## ------------------------------------------------------------------------
## Analysis of Variance Table
## ------------------------------------------------------------------------
## DF SS MS Fc Pr.Fc
## F1 2 7.35558 3.67779 26.4528 0
## F1:F2 55 4 9.65931 2.41483 17.3688 0
## F1:F2 75 4 30.53141 7.63285 54.8998 0
## F1:F2 100 4 45.21217 11.30304 81.2979 0
## Residuals 30 4.17097 0.13903
## Total 44 96.92944 2.20294
## ------------------------------------------------------------------------
##
##
##
## F2 inside of the level 55 of F1
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 3 4.8236
## b 4 3.858843
## b 2 3.516003
## b 5 3.345226
## c 1 2.34052
## ------------------------------------------------------------------------
##
##
## F2 inside of the level 75 of F1
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 3 5.056444
## a 5 5.024509
## a 4 4.459289
## b 2 2.060367
## b 1 1.87845
## ------------------------------------------------------------------------
##
##
## F2 inside of the level 100 of F1
## ------------------------------------------------------------------------
## Tukey's test
## ------------------------------------------------------------------------
## Groups Treatments Means
## a 5 4.695195
## ab 4 4.138298
## b 3 3.626405
## c 2 1.209323
## d 1 0.2552285
## ------------------------------------------------------------------------