Prof. Fernando de Souza Bastos
26 de setembro de 2018
Para comparar a produtividade de quatro variedades de milho, um agrônomo tomou vinte parcelas similares e distribuiu, inteiramente ao acaso, cada uma das 4 variedades em 5 parcelas experimentais. A partir dos dados experimentais fornecidos abaixo, é possível concluir que existe diferença significativa entre as variedades com relação a produtividade, utilizando o nível de significância de 5%?
\[\begin{array}{ccccc} \hline &&&Variedades&&\\ \hline & A & B & C & D \\ \hline & 25 & 31 & 22 &33 \\ & 26 & 25 & 26 &29 \\ & 20 & 28 & 28 &31 \\ & 23 & 27 & 25 &34 \\ & 21 & 24 & 29 &28 \\ \hline Totais& 115 & 135 & 130 &155 \\ \hline Médias& 23 & 27 & 26 &31 \\ \hline \end{array}\]library(readr)
if(!is.null(dev.list())) dev.off()
## null device
## 1
da <- read_delim("https://raw.githubusercontent.com/maf261/maf261.github.io/master/Exercicios/Exercicios_noR/Exer_4_1.txt",
"\t")
da
## # A tibble: 20 x 2
## Var Prod
## <chr> <int>
## 1 A 25
## 2 A 26
## 3 A 20
## 4 A 23
## 5 A 21
## 6 B 31
## 7 B 25
## 8 B 28
## 9 B 27
## 10 B 24
## 11 C 22
## 12 C 26
## 13 C 28
## 14 C 25
## 15 C 29
## 16 D 33
## 17 D 29
## 18 D 31
## 19 D 34
## 20 D 28
str(da)
## Classes 'tbl_df', 'tbl' and 'data.frame': 20 obs. of 2 variables:
## $ Var : chr "A" "A" "A" "A" ...
## $ Prod: int 25 26 20 23 21 31 25 28 27 24 ...
## - attr(*, "spec")=List of 2
## ..$ cols :List of 2
## .. ..$ Var : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ Prod: list()
## .. .. ..- attr(*, "class")= chr "collector_integer" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr "collector_guess" "collector"
## ..- attr(*, "class")= chr "col_spec"
da$Var <- as.factor(da$Var)
is.factor(da$Var)
## [1] TRUE
#Resumo total dos dados
summary(da)
## Var Prod
## A:5 Min. :20.00
## B:5 1st Qu.:24.75
## C:5 Median :26.50
## D:5 Mean :26.75
## 3rd Qu.:29.00
## Max. :34.00
#Média dos dados por variedade
res <- aggregate(Prod ~ Var, data = da, FUN = mean);
kable(res,format = "markdown",digits = 2, padding = 3,align = "c")
Var | Prod |
---|---|
A | 23 |
B | 27 |
C | 26 |
D | 31 |
Sempre é interessante fazer uma análise descritiva dos dados para avaliar linearidade, independencia, normalidade e homocedásticidade.
O pacote lattice de Sarkar (2017) do R é valioso para tais análises:
library(lattice)
xyplot(Prod~Var, data=da, jitter.x=TRUE)
xyplot(Prod~reorder(Var,Prod), data=da, jitter.x=TRUE)
dotplot(Prod~Var, data=da, jitter.x=TRUE)
dotplot(Prod~reorder(Var,Prod), data=da, jitter.x=TRUE)
bwplot(Prod~Var, data=da, pch="|")
bwplot(Prod~reorder(Var,Prod), data=da, pch="|")
O gráfico dos resíduos versus valores ajustados (valores preditos) é uma das principais técnicas utilizadas para verificar as suposições dos resíduos. Além da detecção de heteroscedasticidade, esse gráfico pode indicar que não existe uma relação linear entra as variáveis explicativas com a variável resposta por meio de alguma tendência nos pontos. Por exemplo, se os pontos do gráfico formam uma parábola, é indicativo que termos de segundo grau sejam necessários.
Para o diagnóstico de heteroscedasticidade, tentamos encontrar alguma tendência no gráfico. Por isso, se os pontos estão aleatoriamente distribuídos em torno do 0, sem nenhum comportamento ou tendência, temos indícios de que a variância dos resíduos é homoscedástica. Já a presença de “funil” é um indicativo da presença de heteroscedasticidade.
Para obtenção dos resíduos padronizados fazemos uma mudança de escala dos resíduos, tend uma linha horizontal temos que a variabilidade é constante
Pontos ao redor da linha significam normalidade.
Mesma avaliação do plot 1, mais utilizado quando utilizamos regressão linear
m0 <- lm(Prod~Var, data=da)
par(mfrow=c(2,2))
plot(m0)
layout(1)
\[ \begin{align} H_{0}&:\mu_{1}=\mu_{2}=\mu_{3}=\mu_{4}\\ H_{1}&: \textrm{Não}\ H_{0}\ (\textrm{Pelo menos uma média difere das demais}) \end{align} \]
alpha <- 0.05
#Variedades: A, B, C e D
t1 <- c(25,26,20,23,21)
t2 <- c(31,25,28,27,24)
t3 <- c(22,26,28,25,29)
t4 <- c(33,29,31,34,28)
tab <- matrix(c(t1,t2,t3,t4),5,4)
(n <- length(tab))
## [1] 20
(I <- dim(tab)[2])
## [1] 4
(J <- dim(tab)[1])
## [1] 5
(bart1 <- mean(t1))
## [1] 23
(bart2 <- mean(t2))
## [1] 27
(bart3 <- mean(t3))
## [1] 26
(bart4 <- mean(t4))
## [1] 31
(Tott1 <- sum(t1))
## [1] 115
(Tott2 <- sum(t2))
## [1] 135
(Tott3 <- sum(t3))
## [1] 130
(Tott4 <- sum(t4))
## [1] 155
(mu <- mean(tab))
## [1] 26.75
####################################
difTot <- matrix(NA,dim(tab)[1],dim(tab)[2])
for (j in 1:dim(tab)[2]) {
for (i in 1:dim(tab)[1]) {
difTot[i,j] <- ((tab[i,j]-mu)^2)
}
}
(SQTot <- sum(difTot))
## [1] 275.75
####################################
difTrat <- matrix(NA,1,I)
for (i in 1:I) {
difTrat[i] <- ((mean(tab[,i])-mu)^2)
}
(SQTrat <- 5*sum(difTrat))
## [1] 163.75
####################################
difRes <- matrix(NA,dim(tab)[1],dim(tab)[2])
for (i in 1:dim(tab)[2]) {
for (j in 1:dim(tab)[1]) {
difRes[j,i] <- (tab[j,i]-mean(tab[,i]))^2
}
}
(SQRes <- sum(difRes))
## [1] 112
####################################
#Observem que:
#Soma de quadrado totais = Soma de quadrados dos resíduos + Soma de quadrados de tratamentos
FV <- cbind("Trat","Res","Total")
GL <- cbind(I-1,I*(J-1),I*J-1)
SQ <- cbind(SQTrat,SQRes,SQTot)
QM <- cbind(SQTrat/GL[1],SQRes/GL[2],SQTot/GL[3])
(Fcal <- QM[1,1]/QM[1,2])
## [1] 7.797619
(Ftab <- qf(alpha,GL[1],GL[2],lower.tail = FALSE))
## [1] 3.238872
(pvalor <- pf(Fcal,GL[1],GL[2],lower.tail = FALSE))
## [1] 0.001975594
RR <- "Rejeita-se H0 ao nível alpha de significancia"
RNR <- "Não rejeita-se H0 ao nível alpha de significancia"
dif <- "Pelo menos uma média difere das demais"
ndif <- "Todas as médias são iguais"
ifelse(Fcal>Ftab,RR,RNR)
## [1] "Rejeita-se H0 ao nível alpha de significancia"
ifelse(Fcal>Ftab,dif,ndif)
## [1] "Pelo menos uma média difere das demais"
m0 <- lm(Prod~Var, data=da)
anova(m0)
## Analysis of Variance Table
##
## Response: Prod
## Df Sum Sq Mean Sq F value Pr(>F)
## Var 3 163.75 54.583 7.7976 0.001976 **
## Residuals 16 112.00 7.000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
library(ExpDes.pt)
dic <- dic(da$Var,
da$Prod,
quali = TRUE,
mcomp = "tukey",
nl = FALSE,
hvar = 'bartlett',
sigT = 0.05,
sigF = 0.05)
## ------------------------------------------------------------------------
## Quadro da analise de variancia
## ------------------------------------------------------------------------
## GL SQ QM Fc Pr>Fc
## Tratamento 3 163.75 54.583 7.7976 0.0019756
## Residuo 16 112.00 7.000
## Total 19 275.75
## ------------------------------------------------------------------------
## CV = 9.89 %
##
## ------------------------------------------------------------------------
## Teste de normalidade dos residuos
## Valor-p: 0.2358736
## De acordo com o teste de Shapiro-Wilk a 5% de significancia, os residuos podem ser considerados normais.
## ------------------------------------------------------------------------
##
## ------------------------------------------------------------------------
## Teste de homogeneidade de variancia
## valor-p: 0.9981235
## De acordo com o teste de bartlett a 5% de significancia, as variancias podem ser consideradas homogeneas.
## ------------------------------------------------------------------------
##
## Teste de Tukey
## ------------------------------------------------------------------------
## Grupos Tratamentos Medias
## a D 31
## ab B 27
## b C 26
## b A 23
## ------------------------------------------------------------------------
#Gráficos de Resíduos do Pacote ExpDes.pt
plotres(dic)
Um treinador de corrida rústica, objetivando melhorar o desempenho de seus atletas, testou três novas técnicas de preparação. Para tanto trabalhou com um grupo de 15 atletas completamente homogêneos para as características essenciais. A designação das técnicas de preparação aos atletas foi feita totalmente ao acaso e de tal forma que o número de atletas avaliados em cada uma das técnicas fosse o mesmo. Os resultados obtidos, após um determinado período de tempo de aprendizado da técnica pelos atletas, foram os seguintes (minutos / 25 Km):
\[\begin{array}{ccccc} \hline &&\textrm{Técnicas de Preparação}&&\\ \hline \textrm{Repetições} & 1 & 2 & 3 \\ \hline 1 & 130 & 125 & 135 \\ 2 & 129 & 131 & 129 \\ 3 & 128 & 130 & 131 \\ 4 & 126 & 129 & 128 \\ 5 & 130 & 127 & 130 \\ \hline Totais& 643 & 642 & 653 \\ \hline \textrm{Médias}& 128.6 & 128.4 & 130.6 \\ \hline \end{array}\]library(readr)
da <- read_delim("https://raw.githubusercontent.com/maf261/maf261.github.io/master/Exercicios/Exercicios_noR/Exer_4_2.txt",
"\t")
da
## # A tibble: 15 x 2
## Tec Tempo
## <chr> <int>
## 1 X1 130
## 2 X1 129
## 3 X1 128
## 4 X1 126
## 5 X1 130
## 6 X2 125
## 7 X2 131
## 8 X2 130
## 9 X2 129
## 10 X2 127
## 11 X3 135
## 12 X3 129
## 13 X3 131
## 14 X3 128
## 15 X3 130
str(da)
## Classes 'tbl_df', 'tbl' and 'data.frame': 15 obs. of 2 variables:
## $ Tec : chr "X1" "X1" "X1" "X1" ...
## $ Tempo: int 130 129 128 126 130 125 131 130 129 127 ...
## - attr(*, "spec")=List of 2
## ..$ cols :List of 2
## .. ..$ Tec : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ Tempo: list()
## .. .. ..- attr(*, "class")= chr "collector_integer" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr "collector_guess" "collector"
## ..- attr(*, "class")= chr "col_spec"
da$Tec <- as.factor(da$Tec)
is.factor(da$Tec)
## [1] TRUE
#Resumo total dos dados
summary(da)
## Tec Tempo
## X1:5 Min. :125.0
## X2:5 1st Qu.:128.0
## X3:5 Median :129.0
## Mean :129.2
## 3rd Qu.:130.0
## Max. :135.0
#Média dos dados por variedade
res <- aggregate(Tempo ~ Tec, data = da, FUN = mean);
kable(res,format = "markdown",digits = 2, padding = 3,align = "c")
Tec | Tempo |
---|---|
X1 | 128.6 |
X2 | 128.4 |
X3 | 130.6 |
Usando o pacote lattice de Sarkar (2017):
library(lattice)
xyplot(Tempo~Tec, data=da, jitter.x=TRUE)
xyplot(Tempo~reorder(Tec,Tempo), data=da, jitter.x=TRUE)
dotplot(Tempo~Tec, data=da, jitter.x=TRUE)
dotplot(Tempo~reorder(Tec,Tempo), data=da, jitter.x=TRUE)
bwplot(Tempo~Tec, data=da, pch="|")
bwplot(Tempo~reorder(Tec,Tempo), data=da, pch="|")
m0 <- lm(Tempo~Tec, data=da)
par(mfrow=c(2,2))
plot(m0)
layout(1)
\[ \begin{align} H_{0}&:\mu_{1}=\mu_{2}=\mu_{3}\\ H_{1}&: \textrm{Não}\ H_{0}\ (\textrm{Pelo menos uma média difere das demais}) \end{align} \] - Usando a função interna do R
m0 <- lm(Tempo~Tec, data=da)
anova(m0)
## Analysis of Variance Table
##
## Response: Tempo
## Df Sum Sq Mean Sq F value Pr(>F)
## Tec 2 14.8 7.4 1.3962 0.285
## Residuals 12 63.6 5.3
library(ExpDes.pt)
dic <- dic(da$Tec,
da$Tempo,
quali = TRUE,
mcomp = "tukey",
nl = FALSE,
hvar = 'bartlett',
sigT = 0.01,
sigF = 0.01)
## ------------------------------------------------------------------------
## Quadro da analise de variancia
## ------------------------------------------------------------------------
## GL SQ QM Fc Pr>Fc
## Tratamento 2 14.8 7.4 1.3962 0.285
## Residuo 12 63.6 5.3
## Total 14 78.4
## ------------------------------------------------------------------------
## CV = 1.78 %
##
## ------------------------------------------------------------------------
## Teste de normalidade dos residuos
## Valor-p: 0.9262885
## De acordo com o teste de Shapiro-Wilk a 5% de significancia, os residuos podem ser considerados normais.
## ------------------------------------------------------------------------
##
## ------------------------------------------------------------------------
## Teste de homogeneidade de variancia
## valor-p: 0.663661
## De acordo com o teste de bartlett a 5% de significancia, as variancias podem ser consideradas homogeneas.
## ------------------------------------------------------------------------
##
## De acordo com o teste F, as medias nao podem ser consideradas diferentes.
## ------------------------------------------------------------------------
## Niveis Medias
## 1 X1 128.6
## 2 X2 128.4
## 3 X3 130.6
## ------------------------------------------------------------------------
plotres(dic)
Agora vamos usar o pacote Labest data produzido pela UFPR (2016)
# library(devtools)
#
# # Do repositório de divulgação no GitHub.
# install_github(repo = "labestData",
# username = "pet-estatistica",
# ref = "master", build_vignettes = TRUE)
library(labestData)
#labestDataView()
str(BanzattoQd3.2.1)
## 'data.frame': 30 obs. of 3 variables:
## $ trat : Factor w/ 5 levels "Azinfos etilico",..: 5 1 3 4 2 5 1 3 4 2 ...
## $ rept : int 1 1 1 1 1 2 2 2 2 2 ...
## $ pulgoes: int 2370 1282 562 173 193 1687 1527 321 127 71 ...
library(lattice)
data(BanzattoQd3.2.1)
aggregate(pulgoes ~ trat, data = BanzattoQd3.2.1,
FUN = function(x) { c(mean = mean(x), var = var(x)) })
## trat pulgoes.mean pulgoes.var
## 1 Azinfos etilico 1075.00000 75558.80000
## 2 Diazinon 60CE 91.33333 2791.86667
## 3 Supracid 40CE dose 1 527.16667 40126.16667
## 4 Supracid 40CE dose 2 156.33333 1502.26667
## 5 Testemunha 2477.00000 233749.60000
ban <- BanzattoQd3.2.1
xyplot(pulgoes ~ trat, data = ban,
xlab = "Tratamentos",
ylab = "Número de pulgões 36h após pulverização")
xyplot(pulgoes ~ reorder(trat,pulgoes), data = ban,
xlab = "Tratamentos",
ylab = "Número de pulgões 36h após pulverização")
m0 <- lm(pulgoes~trat,data = ban)
plot(m0)
#Suponha que esteja tudo bem!
library(ExpDes.pt)
dic <- dic(ban$trat,
ban$pulgoes,
quali = TRUE,
mcomp = "tukey",
nl = FALSE,
hvar = 'bartlett',
sigT = 0.05,
sigF = 0.05)
## ------------------------------------------------------------------------
## Quadro da analise de variancia
## ------------------------------------------------------------------------
## GL SQ QM Fc Pr>Fc
## Tratamento 4 23145259 5786315 81.79 5.5054e-14
## Residuo 25 1768644 70746
## Total 29 24913903
## ------------------------------------------------------------------------
## CV = 30.74 %
##
## ------------------------------------------------------------------------
## Teste de normalidade dos residuos
## Valor-p: 0.006742331
## ATENCAO: a 5% de significancia, os residuos nao podem ser considerados normais!
## ------------------------------------------------------------------------
##
## ------------------------------------------------------------------------
## Teste de homogeneidade de variancia
## valor-p: 0.9616506
## De acordo com o teste de bartlett a 5% de significancia, as variancias podem ser consideradas homogeneas.
## ------------------------------------------------------------------------
##
## Teste de Tukey
## ------------------------------------------------------------------------
## Grupos Tratamentos Medias
## a Testemunha 2477
## b Azinfos etilico 1075
## c Supracid 40CE dose 1 527.1667
## c Supracid 40CE dose 2 156.3333
## c Diazinon 60CE 91.33333
## ------------------------------------------------------------------------
#Avalie os resultados
plotres(dic)
\[ y_{ij}=\Biggl\{ \begin{array}{c} \dfrac{y^{\lambda}-1}{\lambda},\ \textrm{se}\ \lambda\neq 0\\ \log{(y)},\ \textrm{se}\ \lambda=0 \end{array} \] O valor de \(\lambda\) será o valor que maxima a função log de verossimilhança (medida de compatibilidade) do modelo m0. Não precisa ser o valor exato, escolha um ponto aproximado entre as linhas mais externas abaixo:
Escolha um número que seja próximo, o ideal é que seja um número do tipo \(1/a,\) onde \(a \in \mathbb{Z}.\)
MASS::boxcox(m0)
MASS::boxcox(m0)
abline(v=0.2,col="red")
abline(v=0.25,col="blue")
m1 <- lm(pulgoes^0.2~trat,data = ban)
plot(m1)
#Suponha que esteja tudo bem!
library(ExpDes.pt)
dic <- dic(ban$trat,
ban$pulgoes^0.2,
quali = TRUE,
mcomp = "tukey",
nl = FALSE,
hvar = 'bartlett',
sigT = 0.05,
sigF = 0.05)
## ------------------------------------------------------------------------
## Quadro da analise de variancia
## ------------------------------------------------------------------------
## GL SQ QM Fc Pr>Fc
## Tratamento 4 21.6288 5.4072 118.82 6.9784e-16
## Residuo 25 1.1377 0.0455
## Total 29 22.7665
## ------------------------------------------------------------------------
## CV = 6.13 %
##
## ------------------------------------------------------------------------
## Teste de normalidade dos residuos
## Valor-p: 0.6206532
## De acordo com o teste de Shapiro-Wilk a 5% de significancia, os residuos podem ser considerados normais.
## ------------------------------------------------------------------------
##
## ------------------------------------------------------------------------
## Teste de homogeneidade de variancia
## valor-p: 0.9824495
## De acordo com o teste de bartlett a 5% de significancia, as variancias podem ser consideradas homogeneas.
## ------------------------------------------------------------------------
##
## Teste de Tukey
## ------------------------------------------------------------------------
## Grupos Tratamentos Medias
## a Testemunha 4.759716
## b Azinfos etilico 4.022682
## c Supracid 40CE dose 1 3.4685
## d Supracid 40CE dose 2 2.736617
## d Diazinon 60CE 2.421748
## ------------------------------------------------------------------------
#Avalie os resultados
plotres(dic)
Ferreira, Eric Batista, Portya Piscitelli Cavalcanti, and Denismar Alves Nogueira. 2018. ExpDes.pt: Pacote Experimental Designs (Portuguese). https://CRAN.R-project.org/package=ExpDes.pt.
Sarkar, Deepayan. 2017. “Lattice: Trellis Graphics for R.” março. https://cran.r-project.org/web/packages/lattice/index.html.
UFPR, PET Estatística. 2016. LabestData: Biblioteca de Dados Para Ensino de Estatística. http://gitlab.c3sl.ufpr.br/pet-estatistica/labestData, https://github.com/pet-estatistica/labestData.