Você está na página 1de 13

new-1.

Loreci Zanardini e Vitória Hubner

2021-07-02

# Delineamento em Blocos ao Acaso


# Elaborado por: Pablo Chang (28/11/2020) e adaptado para este trabalho
# https://github.com/PabloChang/R

# O arquivo de dados e script devem estar numa mesma pasta;


# Os dados devem ser salvos em ".csv (separado por virgulas)";
# Nao pode haver espaco e acentuacao nos titulos, Unica guia;
# Para rodar os comandos, use Ctrl + Enter em cada linha;
# Ativar/desativar comentarios: Ctrl + Shift + C.

# 1) LEITURA E PREPARACAO DOS DADOS


# Comando para definir a localizacao da pasta:
library(rstudioapi) # precisa ter instalado o pacote "rstudioapi"

## Warning: package 'rstudioapi' was built under R version 4.0.5


current_path =
rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )

## [1] "D:/teste"
# Troque o nome do arquivo de dados (entre " .csv"):
dados <- read.csv2(
"primeira.csv",
header = T)

# Comando para trocar os pontos dos graficos por virgula.


# Obs: para digitar comando no R, o padrao ainda "."
options(OutDec=",")

# Mostra as 6 primeiras linhas para visualizacao.


head(dados)

## Tratamento Bloco Permeabilidade


## 1 A 1 17,1
## 2 A 2 18,8
## 3 A 3 18,0
## 4 A 4 22,1
## 5 A 5 15,5
## 6 A 1 15,3
# Filtrar dados por categorias, quando existir:
# Exemplo: mostrar somente dados da Profundidade 2.

1
# (Para usar, exclua o "#" abaixo e modifique)
# require(dplyr)
# dados <- filter(dados, Profundidade==2)

# Troque os nomes das colunas (entre "c( )"):


# TRAT = c( ): para tratamento;
# BLOCO = c( ): para bloco;
# RESP = c( ): para variavel resposta a ser analisada.
attach(dados)
dados <- data.frame(TRAT = as.character(Tratamento),
BLOCO = as.character(Bloco),
RESP = c(Permeabilidade)
)

# Mostra as 6 primeiras linhas para ver como ficou.


head(dados)

## TRAT BLOCO RESP


## 1 A 1 17,1
## 2 A 2 18,8
## 3 A 3 18,0
## 4 A 4 22,1
## 5 A 5 15,5
## 6 A 1 15,3
# Deletar observacoes com dados vazios:
dados <- na.omit(dados)

# Deletar valores negativos ou iguais a zero:


if(min(dados$RESP)<= 0){
r <- with(dados, which(RESP<=0, arr.ind=TRUE))
dados <- dados[-r, ]
print("Deletado valores nulos ou negativos.")
}else{
print("Nao possui valores nulos ou negativos.")
}

## [1] "Nao possui valores nulos ou negativos."


# Deletar valores condicionais:
# RESP < x: deletar valores abaixo de x.
# RESP > x: deletar valores acima de x.
# RESP == x: deletar valores iguais a x.
# Para usar, exclua o "#" nas duas linhas e modifique:
# r <- with(dados, which(RESP<0, arr.ind=TRUE))
# dados <- dados[-r, ]

# Anexar os dados na memória do R:


attach(dados)
# 2) RESUMO DESCRITIVO
# Pacote "agricolae".
# Caso nao tenho instalado rodar:
# install.packages("agricolae")
library(agricolae)

2
## Warning: package 'agricolae' was built under R version 4.0.5
# Calculo dos Quartis
quartil1 <- quantile(RESP, 0.25)
quartil2 <- quantile(RESP, 0.5)
quartil3 <- quantile(RESP, 0.75)

# Resumo descritivo
resumo <- data.frame(Estatistica = c(
"Minimo",
"1 Quartil",
"Mediana",
"Media",
"3 Quartil",
"Maximo",
"Variancia",
"Desvio Padrao",
"Coeficiente de Variacao (%)",
"Assimetria",
"Curtose",
"Tamanho da Amostra" ),
Resultado = c(
min(RESP),
quartil1[[1]],
quartil2[[1]],
mean(RESP),
quartil3[[1]],
max(RESP),
var(RESP),
sd(RESP),
100*sd(RESP)/mean(RESP),
skewness(RESP),
kurtosis(RESP),
length(RESP)
),
stringsAsFactors = FALSE)
resumo

## Estatistica Resultado
## 1 Minimo 15,3000000
## 2 1 Quartil 18,3000000
## 3 Mediana 32,6500000
## 4 Media 31,4775000
## 5 3 Quartil 40,3750000
## 6 Maximo 58,9000000
## 7 Variancia 186,5756346
## 8 Desvio Padrao 13,6592692
## 9 Coeficiente de Variacao (%) 43,3937549
## 10 Assimetria 0,3778563
## 11 Curtose -1,2307336
## 12 Tamanho da Amostra 40,0000000
# Exportar o Resumo Descritivo para Excel:
# Obs: antes de rodar novamente, feche o arquivo.
write.csv2(resumo,

3
file = "DBC - Resumo Descritivo.csv")
# 3) BOXPLOT
# Boxplot geral, com a cruz representando a media.
# Altere as cores e legendas entre aspas " ".
require(graphics)
boxplot(RESP,
col="yellow",
outcol="blue",
ylab="Permeabilidade")
points(mean(RESP),col="red",pch=3)

new-1_files/figure-latex/unnamed-chunk-8-1.pdf

# Boxplot para cada tratamento


boxplot(RESP ~ TRAT,
col="skyblue1",
outcol="blue",
xlab="Tratamento",
ylab="Permeabilidade")
points(tapply(RESP,TRAT,mean),col="red",pch=3)

new-1_files/figure-latex/unnamed-chunk-8-2.pdf

# Boxplot para cada bloco


boxplot(RESP ~ BLOCO,
col="green",
outcol="blue",
xlab="Bloco",
ylab="Permeabilidade")
points(tapply(RESP,BLOCO,mean),col="red",pch=3)

new-1_files/figure-latex/unnamed-chunk-8-3.pdf

# 4) TESTE DE NORMALIDADE

# Pacote com alguns testes:


library(nortest)
library(ExpDes)

##

4
## Attaching package: 'ExpDes'
## The following objects are masked from 'package:agricolae':
##
## lastC, order.group, tapply.stat
# Definicao de fatores:
TRAT <- as.factor(TRAT)
BLOCO <- as.factor(BLOCO)
RESP <- as.numeric(RESP)

# Calculo dos residuos:


mod = aov(RESP ~ TRAT + BLOCO)

# Graficos de residuos:
# Para ser normal, o histograma deve ter formato de sino no centro.
# Se o grafico Normal Q-Q se assemelhar a uma reta crescente,
# entao existe normalidade.
plotres(mod)

new-1_files/figure-latex/unnamed-chunk-10-1.pdf

# Testes:
# Se p-value > 0,05, os residuos possuem distribuicao normal.
shapiro.test(mod$res) # Shapiro-Wilk

##
## Shapiro-Wilk normality test
##
## data: mod$res
## W = 0,97517, p-value = 0,5157
ad.test(mod$res) # Anderson-Darling

##
## Anderson-Darling normality test
##
## data: mod$res
## A = 0,31381, p-value = 0,5325
# Os dados sao normais?
# Se SIM, rode o comando abaixo e pule para a etapa 5).
RESP.TR <- RESP
# Se NAO, faca a transformacao em 4.1).

# 4.1) TRANSFORMACAO DE DADOS NAO-NORMAIS

# Faca os testes, ate atingir a normalidade!

# TR1. Raiz quadrada:


TR1 <- sqrt(RESP)
modTR1 = aov(TR1 ~ TRAT + BLOCO)
# Grafico dos residuos

5
plotres(modTR1)

new-1_files/figure-latex/unnamed-chunk-12-1.pdf

# Testes
shapiro.test(modTR1$res) # Shapiro-Wilk

##
## Shapiro-Wilk normality test
##
## data: modTR1$res
## W = 0,97007, p-value = 0,3616
ad.test(modTR1$res) # Anderson-Darling

##
## Anderson-Darling normality test
##
## data: modTR1$res
## A = 0,3407, p-value = 0,4789
# TR2. Logaritmica:
# Obs: precisa excluir valores = 0.
TR2 <- log(RESP)
modTR2 = aov(TR2 ~ TRAT + BLOCO)
# Grafico dos residuos
plotres(modTR2)

new-1_files/figure-latex/unnamed-chunk-12-2.pdf

# Testes
shapiro.test(modTR2$res) # Shapiro-Wilk

##
## Shapiro-Wilk normality test
##
## data: modTR2$res
## W = 0,97756, p-value = 0,5995
ad.test(modTR2$res) # Anderson-Darling

##
## Anderson-Darling normality test
##
## data: modTR2$res
## A = 0,27624, p-value = 0,6386

6
# TR3. Hiperbolica
TR3 <- 1/RESP
modTR3 = aov(TR3 ~ TRAT + BLOCO)
# Grafico dos residuos
plotres(modTR3)

new-1_files/figure-latex/unnamed-chunk-12-3.pdf

# Testes
shapiro.test(modTR3$res) # Shapiro-Wilk

##
## Shapiro-Wilk normality test
##
## data: modTR3$res
## W = 0,95881, p-value = 0,1525
ad.test(modTR3$res) # Anderson-Darling

##
## Anderson-Darling normality test
##
## data: modTR3$res
## A = 0,55229, p-value = 0,145
# TR4. Box-Cox
require(MASS)

## Loading required package: MASS


## Warning: package 'MASS' was built under R version 4.0.5
##
## Attaching package: 'MASS'
## The following object is masked from 'package:ExpDes':
##
## ginv
# Calculo
par(mfrow=c(1, 1))
bc=boxcox(RESP ~ TRAT, data=dados, plotit=T)

new-1_files/figure-latex/unnamed-chunk-12-4.pdf

lambda.max <- bc$x[which.max(bc$y)]


lambda.max # Se for proximo de zero, usar logaritmico (TR2).

## [1] -0,2222222

7
TR4 <- (RESPˆ(lambda.max)-1)/lambda.max
modTR4 = aov(TR4 ~ TRAT + BLOCO)
# Grafico dos residuos
plotres(modTR4)

new-1_files/figure-latex/unnamed-chunk-12-5.pdf

# Testes
shapiro.test(modTR4$res) # Shapiro-Wilk

##
## Shapiro-Wilk normality test
##
## data: modTR4$res
## W = 0,9763, p-value = 0,5545
ad.test(modTR4$res) # Anderson-Darling

##
## Anderson-Darling normality test
##
## data: modTR4$res
## A = 0,28972, p-value = 0,5955
# Digite o TR escolhido dentro de ( ):
RESP.TR <-
(RESP) #troque aqui, por exemplo: (TR2).
# Com isso, as proximas analises irao usar os
# dados transformados!

# 5) TESTE DE HOMOCEDASTICIDADE DAS VARIANCIAS


# Isso implica que cada tratamento que esta sendo
# comparado pelo teste F, deve ter aproximadamente
# a mesma variancia para que a ANOVA tenha validade.

# Redefinicao de dados:
dados.TR <- data.frame(TRAT, BLOCO, RESP.TR)
attach(dados.TR)

## The following objects are masked _by_ .GlobalEnv:


##
## BLOCO, RESP.TR, TRAT
## The following objects are masked from dados (pos = 7):
##
## BLOCO, TRAT
TRAT <- as.factor(TRAT)
BLOCO <- as.factor(BLOCO)
RESP.TR <- as.numeric(RESP.TR)
mod.TR <- aov(RESP.TR ~ TRAT + BLOCO)

8
# Teste de Bartlett:
# Se p-value > 0,05, ha homogeneidade das variancias.
bartlett.test(mod.TR$res ~ TRAT)

##
## Bartlett test of homogeneity of variances
##
## data: mod.TR$res by TRAT
## Bartlett's K-squared = 1,7801, df = 3, p-value = 0,6193
bartlett.test(mod.TR$res ~ BLOCO)

##
## Bartlett test of homogeneity of variances
##
## data: mod.TR$res by BLOCO
## Bartlett's K-squared = 10,669, df = 4, p-value = 0,03055
# Boxplot de tratamentos vs residuos:
# Se os boxplots forem semelhantes, ha homocedasticidade.
par(mfrow=c(1, 1))
boxplot(mod.TR$res ~ TRAT)

new-1_files/figure-latex/unnamed-chunk-14-1.pdf

boxplot(mod.TR$res ~ BLOCO)

new-1_files/figure-latex/unnamed-chunk-14-2.pdf

# 6) TESTE DE INDEPENDENCIA
# Os dados sao aleatorios e independentes.
# Ou seja, uma observacao nao influencia na outra
# e nao existe influencia do tempo ou local da coleta.

# Teste de Durbin-Watson:
# Se p-value > 0,05, entao ha independencia.
require(lmtest)

## Loading required package: lmtest


## Warning: package 'lmtest' was built under R version 4.0.5
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.0.5
##
## Attaching package: 'zoo'

9
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
dwtest(mod.TR)

##
## Durbin-Watson test
##
## data: mod.TR
## DW = 1,0766, p-value = 0,0004515
## alternative hypothesis: true autocorrelation is greater than 0
# Grafico de residuos padronizados vs valores ajustados
# (Standardized Residuals vs Fitted Values):
# Se os pontos forem aleatorios e espalhados,
# entao os dados sao aleatorios e independentes;
# Se apresentar uma tendencia, entao ha dependencia.
plotres(mod.TR)

new-1_files/figure-latex/unnamed-chunk-16-1.pdf

# 7) ANOVA - analise de variacia


# Tabela ANOVA
# Se Pr(>F) < 0,05, entao existe diferenca
# significativa a 5%.
summary(mod.TR)

## Df Sum Sq Mean Sq F value Pr(>F)


## TRAT 3 5957 1985,8 65,240 9,95e-14 ***
## BLOCO 4 345 86,3 2,834 0,0405 *
## Residuals 32 974 30,4
## ---
## Signif. codes: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 ' ' 1
# df=graus de liberdade. Pr=probabilidade
# de ser maior que F tabelado.

# Exportar tabela ANOVA para Excel:


write.csv2(
as.data.frame(summary(mod.TR)[[1]]),
file =
"DBC - Tabela ANOVA.csv")
# 8) TESTE DE COMPARACAO DE MEDIAS
# Teste Tukey, SNL (Student-Newman-Keuls), Duncan, t e
# Scott-Knott a 5% de significancia.
require(easyanova)

## Loading required package: easyanova


## Warning: package 'easyanova' was built under R version 4.0.5

10
require(dplyr)

## Loading required package: dplyr


##
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# TabelaS usando dados transformados (quando for o caso),
# mas mostrando medias originais:

# Por tratamento:
par(mfrow=c(1, 1))
ttuk <- easyanova::ea1(dados.TR, design=2)

new-1_files/figure-latex/unnamed-chunk-20-1.pdf

teste <- arrange(ttuk$`Adjusted means`, ttuk$`Adjusted means`$treatment)


ttuk.o <- easyanova::ea1(dados, design=2)
teste.o <- arrange(ttuk.o$`Adjusted means`, ttuk.o$`Adjusted means`$treatment)
teste$adjusted.mean <- teste.o$adjusted.mean
colnames(teste) <- c(
"Tratamentos",
"Medias",
"Erro padrao",
"Tukey",
"SNK",
"Duncan",
"t",
"Scott-Knott"
)
teste

## Tratamentos Medias Erro padrao Tukey SNK Duncan t Scott-Knott


## 1 A 18,18 1,7447 b b b b b
## 2 B 20,59 1,7447 b b b b b
## 3 C 45,56 1,7447 a a a a a
## 4 D 41,58 1,7447 a a a a a
# Exportar para Excel:
write.csv2(teste, file =
"DBC - Testes de Comparaco de Medias.csv")

11
# 9) DMS - Diferenca Minima Significativa do teste Tukey

# Valor que retrata a diferença minima para que duas


# medias tenham diferença significativa a 5%.

# Calculo do DMS:
t.HSD <- TukeyHSD(mod.TR, ordered=TRUE)
dms <- unname(0.5*diff(t.HSD$TRAT[1, 2:3]))
LimSup <- mean(RESP.TR)
LimInf <- LimSup-dms

# Os dados foram transformados em 4.1)?


# Se NaO, apenas rode o comando abaixo:
dms

## [1] 6,684835
# Se SIM, escolha o TR usado para
# realizar a transformaco inversa:
# TR1. Raiz quadrada:
dms.sqrt <- (LimSup)ˆ2-(LimInf)ˆ2
dms.sqrt

## [1] 376,1568
# TR2. Logaritmica:
dms.log <- exp(LimSup)-exp(LimInf)
dms.log

## [1] 4,676936e+13
# TR3. Hiperbolica:
dms.hip <- (LimSup)ˆ(-1)-(LimInf)ˆ(-1)
dms.hip

## [1] -0,008565787
# TR4. Box-Cox:
dms.bc <- ((LimSup*lambda.max)+1)ˆ(1/lambda.max) -
((LimInf*lambda.max)+1)ˆ(1/lambda.max)
dms.bc

## [1] NaN
# 10) Grafico de barras de Tukey

my_bar <- barplot(teste$Medias,


ylim=c(0, 1.3*max(teste$Medias)),
beside=T,
col="seagreen3",
names.arg = teste$Tratamentos,
xlab="Tratametntos",
ylab="Permeabilidade")

# Letras do Tukey acima das barras:


text(my_bar,
teste$Media+0.1*max(teste$Medias),

12
teste$Tukey, cex=1)

new-1_files/figure-latex/unnamed-chunk-24-1.pdf

13

Você também pode gostar