Antes, limpar o “Ambiente Global” (Global Environment):
rm(list=ls(all=TRUE))
Primeiramente é necessário carregar os pacotes que serão utilizados:
library("tidyverse")
library("ggplot2")
library("PMCMRplus")
library("car")
library("agricolae")
library("rstatix")
library("emmeans")
library("ScottKnott")
library("multcomp")
Dados: Um experimento de alimentação de porcos, usarando quatro rações (A, B, C,D), cada uma fornecida a cinco animais escolhidos ao acaso. Os aumentos de peso observados, em quilogramas, constam a seguir.
Entrada de dados da variável resposta:
pesos = c(35, 19, 31, 15,
30, 40, 35, 46,
41, 33, 39, 27,
20, 29, 45, 27,
12, 13, 28, 30)
Criar objeto com variável pesos:
pesos
Tratamentos (rações):
rações = factor(c(rep('A',5),
rep('B',5),
rep('C',5),
rep('D',5)))
Criar objeto para tratamentos (rações):
rações
Mostrar a ordem das rações com função table:
table(rações)
Esta na ordem alfabética porque as rações estão definidas como letras do alfabeto por isso não modifica a ordem. Colocar na ordem:
rações = factor(rações, levels = c('A',
'B',
'C',
'D'))
Mostrar a ordem das rações em ordem:
table(rações)
Criar o banco de dados com a variável resposta e o tratamento:
dados = data.frame(pesos,rações)
dados
Análise descritiva:
Resumo númerico geral:
summary(dados)
Resumo númerico por tratamento
tapply(pesos,rações,summary)
Resumo númerico com desvio padrão e coeficiente de variação:
nrep = tapply(pesos,rações, length)
media = tapply(pesos,rações, mean)
variancia = tapply(pesos,rações, var)
desvpad = tapply(pesos,rações, sd)
coef_var = round(100*(tapply(pesos,rações,sd)/tapply(pesos,rações, mean)), 1)
data.frame(Repeticoes = nrep,
Media = media,
Variancia = variancia,
DesvioPadrao =desvpad,
CoefVariacao = coef_var,
row.names = c('A','B','C','D'))
Boxplot para visualizar melhor os dados e comparar os tratamentos:
car::Boxplot(pesos~rações,
las=1,
col="lightblue", xlab="",
ylab=expression("pesos"(Kg)))
points(media,col="red", pch=8)
É possível observar que as caixas das rações D e A se encontram mais abaixo quando comparadas com as demais, o valor máximo da D esta abaixo do valor mínimo da caixa B. As caixas A, B e C estão assimétricos a equerda.
Criar histograma para todos os dados:
hist(pesos, col = "red", col.axis = "blue", col.lab = "green",
xlab = "Pesos (kg)", ylab="Frequência",
main = "frêquencia de pesos dos porcos")
Com o histograma é possivel observar uma maior frequência nos valores 15 a 30.
Teste de Normalidade de todos os dados: Histograma:
ggplot(dados, aes(x=pesos))+
geom_histogram(bins = 6,
fill = "green4",
col= "magenta2")
O histograma não está muito próximo da aparência de um sino, os últimos valores estão altos.
Boxplot:
ggplot(dados)+
geom_boxplot(aes(y = pesos),
fill = "deepskyblue3",
col= "turquoise1")
QQ-plot:
ggplot(dados, aes(sample = pesos)) +
stat_qq() +
stat_qq_line() +
labs(y = "pesos (kg)")
qqPlot(pesos, col="turquoise1", pch=19)
Os pontos seguem aproximadamente uma linha reta, porém um valor se encontra fora da linha.
Teste de Shapiro-Wilk para Normalidade: Hipotese nula: os dados de pesos possuem uma distribuição Normal; Hipotese alternativa: os dados de pesos nao possuem uma distribuição Normal.
shapiro.test(pesos)
Como o p-valor é aproximadamente 0,51 e é maior do que 0,05, a hipótese nula não é rejeitada, logo, há evidências que comprovem distribuição normal dos dados dos pesos.
Teste da homogeneidade de variâncias: Hipotese nula: As rações possuem variâncias homogêneas para pesos dos porcos; Hipotese alternativa: As variâncias dos pesos dos porcos em cada ração não são homogêneas.
leveneTest(pesos ~ rações)
Como o p-valor é maior que 0,05, não há evidências para rejeitar a hipótese nula, logo, há evidências que comprovem que as são variâncias são homogêneas.
Tabela da análise de variâncias: Testar as hipóteses: Hip. nula: a média dos pesos é a mesma para todas as rações (tratamentos); Hip. alternativa: em pelo menos uma ração a média dos pesos se diferem.
Ajuste do modelo aos dados:
mod_aov = aov(pesos ~ rações, data = dados)
mod_aov
summary(mod_aov) #produz a tabela da ANOVA
Como valor-p é menor do que 0,05, não há evidências para aceitar a hipótese nula, logo, em pelo menos uma ração a média dos pesos se diferem.
Contrução do gráfico “resíduos padronizados x valores ajustados”: Resíduos ordinários:
residuos = mod_aov$residuals
residuos
dados = data.frame(dados, residuos)
Resíduos X Tratamento (rações):
ggplot(data = dados,
aes(x = rações, y = residuos)) +
geom_jitter(width = 0.05,
color="violetred") +
labs(y = "Residuos ordinarios",
x = "rações") +
stat_summary(show.legend = T,
fun = "mean",
geom = "crossbar",
width = 0.25,
linewidth = 0.25,
color = "turquoise1")
Valores ajustados (teóricos) do modelo:
ajustados = mod_aov$fitted.values
ajustados
Gráfico dos Resíduos X valores ajustados:
plot(ajustados,
residuos,
main = "Residuos X Valores ajustados")
Resíduos padronizados: (verificar se existe algum valor resíduo maior que 3 ou menor que -3):
residuos_p = rstandard(mod_aov)
Gráfico Resíduos Padronizados x Valores ajustados:
plot(ajustados,
residuos_p,
xlab = "valores ajustados",
ylab = "resíduos padronizados",
ylim=c(-3.5,3.5),
pch=16,
col="green2",
las=1)
abline(h=seq(-3,3,1), lty=3, col="plum1")
abline(h=c(-3,3), lty=4, col="magenta")
title("Residuos Padronizados X Valores ajustados")
Os resíduos estão bem ajustados porque estão dispersos e próximos do zero, não havendo valores discrepantes que ultrapassem a linha tracejada no entanto, é possível observar um padrão entre os valores.
Gráfico para Normalidade dos resíduos:
hist(residuos)
ggplot(dados, aes(x=residuos))+
geom_histogram(bins = 5,
fill = "green",
col= "maroon4")+
labs(y = "Frequencia absoluta")
qqnorm(residuos,
ylab = "Residuos",
main = "Grafico Normal de Probabilidade dos Residuos",
pch=19,
col="darkorchid3")
qqline(residuos,
col="turquoise1")
ggplot(dados, aes(sample = residuos)) +
stat_qq() +
stat_qq_line() +
labs(y = "Residuos ordinarios")
qqPlot(residuos, col="deeppink1", pch=19)
Os resíduos parecem seguir uma distribuição normal, os pontos seguem aproximadamente uma linha reta.
Teste de hipótese para a normalidade dos resíduos com shapiro: Hipótese nula: os resíduos tem distribuição normal; Hipótese alternativa: os resíduos não tem distribuição normal:
shapiro.test(residuos)
Como valor-p é maior do que 0,05, não há evidências para rejeitar a hipótese nula, logo, os resíduos tem distribuição normal.
Teste de Homogeneidade de variâncias para os resíduos: Ho: As variâncias são homogêneas; Ha: As variâncias não são homogêneas.
leveneTest(residuos ~ rações)
Como o valor-p é maior que 0,05, não há evidências para rejeitar a hipótese nula, logo, as variâncias são homogêneas.
Teste de comparações multiplas de Tukey: Teste de Tukey
TukeyHSD(mod_aov)
TukeyHSD(mod_aov,
ordered = TRUE,
conf.level = 0.95)
res_tukey1 = TukeyHSD(mod_aov,
ordered = TRUE,
conf.level = 0.95)
plot(res_tukey1)
Para melhorar a visualização e embelezar o gráfico. define-se o padrão que já existe:
def.par = par()
Criar um padrão para este gráfico:
par(mai=c(1.3, #margem inferior
1.4, #margem da esquerda
1.1, #margem do topo
.5)) #margem da direita
plot(res_tukey1,
col.axis = "slategray4",
col = "cyan4",
las=1, #muda a posicao dos nomes do eixo Y
cex.axis = 0.75) #tamanho menor dos nomes
Considerando o valor-p, notamos que as rações B e D são menores que o nível de significância adotado, ou seja, é menor do que 0,05. Ao analisar o gráfico nota-se que o valor zero não está contido no intervalo de confiança das duas rações.
Comparando as médias:
xtabs(~rações) #Repetições por nível de cultivar
df.residual(mod_aov) #Graus de liberdade do resíduo
glres = df.residual(mod_aov)
deviance(mod_aov)/glres #Quadrado médio do resíduo
QMRes = deviance(mod_aov)/glres
res_tukey2 = HSD.test(pesos,
rações,
glres,
QMRes,
alpha=0.05)
res_tukey2
plot(res_tukey2,
cex.axis=0.85,
ylab = " média de pesos (kg)",
xlab = "rações",
las=1)
Ao comparar as médias em ordem decrescente da média maior para menor, temos ração B, C, A e por fim D. A ração B possui média maior porém sua média se difere significamente somente da ração D. E a D só se difere da B.
Apresentação final dos resultados. Função “cld()” pertence ao pacote “multcomp”:
res_medias = emmeans(mod_aov, spec = ~rações) %>%
cld(Letters = letters, sort = TRUE, reverse = TRUE) %>%
as.data.frame()
res_medias
ggplot(data = res_medias,
mapping = aes(y = reorder(rações, emmean))) +
geom_errorbarh(mapping = aes(xmin = lower.CL, xmax = upper.CL),
height = 0.06) +
labs(y = "rações",
x = "média pesos (kg)") +
geom_point(mapping = aes(x = emmean)) +
geom_text(mapping = aes(x = emmean,
label = sprintf("%0.1f %s",
emmean,
trimws(.group))),
vjust = -1)
Por fim, ao comparar os experimentos das rações conclui-se que pelo menos uma média é diferente, e de acordo com os testes a ração B se difere significativamente da ração B. Ao analisar as médias a ração B gerou mais aumento de peso nos porcos.
Dados: Em um experimento de competição de variedades de batatinha, feito pelo Engenheiro Agronomo Oscar A. GAray em Balcare, Argentina, em blocos casualizados, as produção obtidas, em t/ha, foram as seguintes.
Foram utilizadas quatro repetições de oito tratamentos: T1: Kennebec T2: Huinkul T3: S. Rafaela T4: Buena Vista T5: B 25-50 E T6: B 1-52 T7: B 116-51 T8: B 72-53 A
Entrada de dados para variável resposta:
produção = c(9.2, 13.4, 11.0, 9.2,
21.1, 27.0, 26.4, 25.7,
22.6, 29.9, 24.2, 25.1,
15.4, 11.9, 10.1, 12.3,
12.7, 18.0, 18.2, 17.1,
20.0, 21.1, 20.0, 28.0,
23.1, 24.2, 26.4, 16.3,
18.0, 24.6, 24.0, 24.6)
Número de unidades experimentais:
length(produção)
Tratamentos Criar a variável qualitativa para representar os tratamentos:
tratamento = factor(rep(c("Kennebec",
"Huinkul",
"S. Rafaela",
"Buena Vista",
"B 25-50 E",
"B 1-52",
"B 116-51",
"B 72-53 A"), each=4))
Criar objeto com variável tratamentos:
tratamento
Mostrar a ordem dos tratamentos:
table(tratamento)
Não estão em ordem, colocar na ordem:
tratamento = factor(tratamento, c("Kennebec",
"Huinkul",
"S. Rafaela",
"Buena Vista",
"B 25-50 E",
"B 1-52",
"B 116-51",
"B 72-53 A"))
table(tratamento)
Criar o objeto para representar os blocos. Usar a funcao “factor()”:
bloco = factor(rep(c("B1",
"B2",
"B3",
"B4"), times = 8))
Criar objeto bloco e visualizar comprimento:
bloco
length(bloco)
Organizar os objetos em um banco de dados (data frame):
dados = data.frame(bloco, tratamento, produção)
dados
Estrutura do banco de dados criado:
str(dados)
Resumo numérico do banco de dados:
summary(dados)
Análise descritva da variável resposta (produção) Análise por tratamento: Resumo númerico:
tapply(produção, tratamento, summary)
Número de repetições
nrep = tapply(produção, tratamento, length)
Média:
medias_produção_trat = round(tapply(produção, tratamento, mean),1)
medias_produção_trat
Mediana:
mediana_produção_trat = round(tapply(produção, tratamento, median),1)
mediana_produção_trat
Variância:
var_produção_trat = round(tapply(produção, tratamento, var),1)
var_produção_trat
Desvio padrão:
dp_produção_trat = round(sqrt(var_produção_trat),1)
dp_produção_trat
Coeficiente de variação:
coef_var = round(100*(dp_produção_trat/medias_produção_trat),1)
data.frame(Repeticoes = nrep,
Media = medias_produção_trat,
Mediana = mediana_produção_trat,
Variancia = var_produção_trat,
DesvioPadrao =dp_produção_trat,
CoefVariacao = coef_var,
row.names = c("Kennebec",
"Huinkul",
"S. Rafaela",
"Buena Vista",
"B 25-50 E",
"B 1-52",
"B 116-51",
"B 72-53 A"))
dados |>
group_by(tratamento) |>
rstatix::get_summary_stats(produção, type = "full")
Como as unidades experimentais são muitas, é melhor visualizar as medidas descritivas em gráfico para comparar os tratamentos.
Criar boxplot para comparar os tratamentos:
car::Boxplot(produção~tratamento,
col = "turquoise1",
border = "orchid4",
ylab = "produção (t/ha)",
main = c("produção (t/ha)",
"variedades(batatinhas)"),
cex.main=0.75)
Com o boxplot é possível observar que os tratamentos “Kennebec”, “Buena Vista” e “B 25-50 E” estão com as ciaxas mais abaixo, indicando menores valores, o tratamento “S. Rafaela” é o que o maior valor e esta com a caixa mais acima, é possível observar que as caixas não possuem uma simetria, ocorrendo a presença de caixas tanto assimetricas positivas quanto negativas.
Criar histograma para todos os dados:
hist(produção, col = "red", col.axis = "blue", col.lab = "green",
xlab = "produção (t/ha)", ylab="Frequência",
main = "frêquencia da produção de batatinha")
O histograma apresenta uma distribuição dos valores com maior frequências entre 20 a 25 e menor entrre 5 a 10.
Análise descritiva dos blocos:
medias_produção_blocos = tapply(produção, bloco, mean)
medias_produção_blocos
mediana_produção_blocos = tapply(produção, bloco, median)
mediana_produção_blocos
var_produção_blocos = tapply(produção, bloco, var)
var_produção_blocos
Ao analisar os blocos nota-se maior média no bloco 2 e menor no bloco 1, sendo que ocorreu maior variação no bloco 4.
Teste de Normalidade da variável resposta: Histograma:
ggplot(dados, aes(x=produção))+
geom_histogram(bins = 6,
fill = "magenta1",
col= "cyan1")
O histograma não está com aparência próxima a de um sino, nos penultimos valores é possivel observar um aumento na frequência.
Teste de Normalidade com QQ-normal: QQ-plot:
ggplot(dados, aes(sample = produção)) +
stat_qq() +
stat_qq_line() +
labs(y = "produção (t/ha)")
O histograma apresenta aparência próxima a de um sino, mesmo que os penúltimos valores possuem aumento na frequência.
Função “qqplot()” do pacote car:
qqPlot(produção, col="magenta1", pch=19)
Os pontos seguem aproximadamente uma linha reta, indicando normalidade dos valores.
Teste de Shapiro-Wilk para Normalidade: Hipótese nula: os dados de produção possuem uma distribuição Normal; Hipótese alternativa: os dados de produção não possuem uma distribuição Normal.
shapiro.test(produção)
Como o p-valor é maior do que 0,05, a hipótese nula não é rejeitada, logo, há evidências que comprovem distribuição normal dos dados de produção.
Teste de homogeneidade de variâncias dos tratamentos com Teste de Levene: Ho: As variâncias são homogêneas; Ha: As variâncias não são homogêneas.
leveneTest(produção~tratamento)
O valor-p foi maior que 0,05, portanto não há evidências para rejeitar a hipótese nula.
Tabela análise de variância do modelo: Ajuste do modelo Testar as hipóteses: Hip. nula: a produção média é o mesmo para todos os tratamentos; Hip. alternativa: em pelo menos um tratamento a produção média difere.
mod_aov = aov(produção ~ bloco + tratamento)
mod_aov
Tabela da ANOVA:
anova(mod_aov)
Valor-p < 0,05 então há evidências para rejeitar a hipótese nula, portanto, em pelo menos um tratamento a produção média se difere.
Contrução do gráfico “resíduos padronizados x valores ajustados” Resíduos ordinários:
residuos = mod_aov$residuals
residuos
Resumo numérico dos resíduos:
summary(residuos)
Resíduos X Tratamento:
ggplot(data = dados,
aes(x = tratamento, y = produção)) +
geom_jitter(width = 0.05,
color="purple3") +
labs(y = "Residuos ordinarios",
x = "Tratamento") +
stat_summary(show.legend = T,
fun = "mean",
geom = "crossbar",
width = 0.25,
linewidth = 0.25,
color = "blue")
Resumo numérico dos resíduos:
summary(residuos)
Valores ajustados (teóricos):
ajustados = mod_aov$fitted.values
Gráfico resíduos X valores ajustados:
plot(ajustados, #eixo X
residuos, #eixo Y
ylab="residuos",
xlab="valores ajustados",
main="Residuos X Valores ajustados",
pch = 16,
col="darkorange2")
residuos_p = rstandard(mod_aov)
Gráfico resíduos padronizados com valores ajustados:
plot(ajustados,
residuos_p,
ylab="residuos padronizados",
xlab="valores ajustados",
ylim = c(-3.5,3.5),
main="Residuos padronizados X valores ajustados",
pch = 16,
col="darkviolet")
abline(h=c(-3,3),
col="darkgreen",
lty = "dotted")
Os resíduos estão aleatoriamente distribuídos em torno do valor zero e entre -3 e +3, não havendo valores discrepantes que ultrapassem a linha tracejada.
Gráfico para verificar a normalidade dos Resíduos:
qqnorm(residuos,
ylab="Residuos",
main="Grafico Normalidade dos Residuos",
pch = 16,
col="dodgerblue3")
qqline(residuos)
QQ-plot:
ggplot(dados, aes(sample = residuos)) +
stat_qq() +
stat_qq_line() +
labs(y = "Residuos ordinarios")
qqPlot(residuos, pch = 16, col = "maroon")
Os resíduos parecem seguir uma distribuição normal, os pontos seguem aproximadamente uma linha reta, no entanto existe um ponto ultrapassando o limite.
Teste para normalidade dos resíduos com shapiro-wilk: Hipótese nula: os resíduos tem distribuição normal; Hipótese alternativa: os resíduos não tem distribuição normal:
shapiro.test(residuos)
O valor-p é maior do que 0,05, portanto não há evidências para rejeitar a hipótese nula de que os resíduos tem distribuição normal.
Teste de homogeneidade de variâncias dos resíduos:
leveneTest(residuos~tratamento)
Como o valor-p é maior que 0,05, não há evidências para rejeitar a hipótese nula, logo, as variâncias são homogêneas. Teste de Tukey:
res_tukey1 = TukeyHSD(mod_aov, "tratamento", ord=T)
res_tukey1
plot(res_tukey1,
cex.axis=0.6,
las=1)
De 28 grupos pelos menos 12 médias se constrastam, para analisar melhor os dados é interessante fazer o teste de Ducan.
Testes de comparações múltiplas:
require(agricolae)
xtabs(~tratamento) #Repetições por nível de TRAT
glres = mod_aov$df.residual #Graus de liberdade dos resíduos
QMRes = deviance(mod_aov)/glres #Quadrado médio do Resíduo
Teste de Tukey:
res_tukey2= HSD.test(produção,
tratamento,
glres,
QMRes,
alpha=0.05)
res_tukey2
Representação gráfica:
plot(res_tukey2,
xlab = "Tratamento",
ylab = "produção (t/ha)",
cex.axis=0.85,
las=1)
Como as médias estão em ordem decrescente o tratamento S. Rafaela obteve maior média de produtividade de batatinha, seguido por Huinkul. Os tratamentos Kennebeck e Buena Vista foram os que tiveram médias menores. Os outros tratamentos tiveram médias próximas das primeiras e últimas médias.
Apresentação final dos resultados:
res_medias = emmeans(mod_aov, spec = ~tratamento) %>%
multcomp:: cld(Letters = letters, sort = TRUE, reverse = TRUE) %>%
as.data.frame()
res_medias
ggplot(data = res_medias,
mapping = aes(y = reorder(tratamento, emmean))) +
geom_errorbarh(mapping = aes(xmin = lower.CL, xmax = upper.CL),
height = 0.06) +
labs(y = "Tratamento",
x = "produção medio (g)") +
geom_point(mapping = aes(x = emmean)) +
geom_text(mapping = aes(x = emmean,
label = sprintf("%0.1f %s",
emmean,
trimws(.group))),
vjust = -1)
Ao comparar a produtividade das variedades conclui-se que existe um número grande de médias contrastando, e de acordo com os testes as variedades S. Rafaela e Huinkul não se diferem significamente na produtividade com médias altas. E como se trata de competição de produtividade as variedades Kennebeck e Buena Vista foram as que menos se destacaram.
Dados: Considerando um experimento inteiramento casualizado, com cinco repetições no esquema fatorial 4 x 2, para testar os efeitos da aplicação de dicloroisocianurato de sódio (DUP) em 4 épocas diferentes de aplicação, em soja inoculada com Rhizobium e não inoculada, sobre o número de nódulos.
Inoculação: NI (Soja não inoculada); IN (Soja inoculada).
Épocas: Plantio; V1+15; V3+15 e R1+15.
Há interesse em testar hipóteses sobre os efeitos do fator época: H0: o número de nódulos será igual para todas as épocas; Ha: o número de nódulos se difere em pelo menos uma época.
Há interesse em testar hipóteses sobre os efeitos do fator inoculação: H0: o número de nódulos será igual para as duas inoculações; Ha: o número de nódulos se difere em pelo menos uma inoculação.
Há interesse em testar hipótes se há interação entre os fatores: H0: não há intereção para todas as combinações de fatores; Ha: há interação em pelo menos uma combinação de fatores.
Entrada de dados:
NN=c(339,332,163,230,300,
163,172,123,083,161,
171,069,095,046,079,
335,235,217,174,222,
284,136,225,098,110,
082,038,092,053,046,
196,252,346,468,258,
032,038,063,048,160)
Criar um objeto com os fatores de inoculação:
(Inoculacao=rep(c("IN","NI"),e=20))
Criar um objeto com o fatores de época com 5 repetições:
(epoca=rep(c("Plantio","V1+15","V3+15","R1+15"),e=5,2))
Renomeando o objeto inoculação e transformando em fator:
F1=as.factor(Inoculacao)
Renomeando o objeto época e transformando em fator:
F2=as.factor(epoca)
Criando um objeto com os tratamentos, cada fator de inoculação, combinado com cada fator de época:
Trat=paste(F1,F2)
Criando um banco de dados com os tratamentos e seus respectivos números de nódulos:
dados=data.frame(F1,F2,resp=NN)
X="";Y="Número de nódulos"
Estatística descritiva dos números de nódulos:
Média:
Média = with(dados, mean(resp))
Desvio padrão:
Desvio = with(dados, sd(resp))
Variância:
Variancia = with(dados, var(resp))
Coeficiente de variação:
CV = Desvio / Média * 100
Criando uma tabela com os resultados das medidas descritivas dos números de nódulos:
desc = cbind(Média, Desvio, Variancia, CV)
desc
A partir das medidas descritivas de todos os valores de número de nódulos encontramos uma média de 168,35, com um desvio padrão de 106,8336 e uma variância de 11413,41, resultando em um coeficiente de variação aparentemente alto, sendo de aproximadamente 63%.
Medidas descritivas por inoculação:
Média:
MediaA = with(dados, tapply(resp, F1, mean))
Variância:
VarianciaA = with(dados, tapply(resp, F1, var))
Desvio padrão:
DesvioA = with(dados, tapply(resp, F1, sd))
Coeficiente de variação:
CVA = DesvioA / MediaA * 100
Criando uma tabela com os resultados das medidas descritivas por inoculação:
DescA = cbind(MediaA, VarianciaA, DesvioA, CVA)
DescA
Analisando as medidas descritivas por inoculação, podemos perceber que a média do número de nódulos das plantas de soja inoculadas, é maior que a média do número de nódulos das plantas não inoculadas, apresentando também uma menor variância e menor desvio padrão, e consequentemente, um menor coeficiente de variação.
Medidas descritivas por época de aplicação:
Média:
MediaB = with(dados, tapply(resp, F2, mean))
Variância:
VarianciaB = with(dados, tapply(resp, F2, var))
Desvio padrão:
DesvioB = with(dados, tapply(resp, F2, sd))
Coeficiente de variação:
CVB = DesvioB / MediaB * 100
Criando uma tabela com os resultados das medidas descritivas por época de aplicação:
DescB = cbind(MediaB, VarianciaB, DesvioB, CVB)
DescB
Analisando as medidas descritivas por época de aplicação podemos perceber que na época de plantio e V3 as plantas de soja apresentam as maiores médias de nódulos. Já a variância é menor da época V1. E o desvio padrão e o coeficiente de variação são maiores nas épocas V3 e R1.
Análise descritiva por gráficos: criar boxplot para comparar os fatores de inoculação:
par(bty='l', mai=c(1, 1, .2, .2))
par(cex=0.7)
caixas=with(dados, car::Boxplot(resp ~ F1, vertical=T,las=1, col='Lightgreen',
xlab=X, ylab=Y))
mediab=with(dados,tapply(resp, F1, mean))
points(mediab, pch='+', cex=1.5, col='red')
title("Comparação dos Fatores de Inoculação")
Analisando o box plot que compara o número de nódulos por inoculação, podemos perceber graficamente que a média do número de nódulos das plantas de soja inoculadas, é maior que a média do número de nódulos das plantas não inoculadas. E por apresentar uma menor amplitude dos dados podemos notar uma menor variação dos valores nas plantas inoculadas.
Criar boxplot para comparar os fatores de época:
par(bty='l', mai=c(1, 1, .2, .2))
par(cex=0.7)
caixas=with(dados, car::Boxplot(resp ~ F2, vertical=T,las=1, col='Lightblue',
xlab=X, ylab=Y))
mediab=with(dados,tapply(resp, F2, mean))
points(mediab, pch='+', cex=1.5, col='red')
title("Comparação dos Fatores de Época de Aplicação")
Analisando graficamente o boxplot por época de aplicação podemos perceber que, pela amplitude das caixas, na época V1 tem-se a menor variação dos dados, e na época de plantio e V3 as plantas de soja apresentam as maiores médias de nódulos.
Criar box plot para comparar os dois fatores combinados:
par(bty='l', mai=c(1, 1, .2, .2))
par(cex=0.7)
caixas=with(dados, car::Boxplot(resp ~ F1*F2, vertical=T,las=1, col='Lightpink',
xlab=X, ylab=Y))
title("Comparação dos dois fatores combinados")
Fazendo análise gráfica, percebemos que nos tratamentos “IN.R1”, “NI.R1”, “IN.V1”, “NI.V1” e “IN.V3”, a variação dos dados é menor quando comparado aos tratamentos “IN.Plantio”, “NI.Plantio” e NI.V3”. Analizando as medianas, notamos que são maiores nos tratamentos “IN.Plantio” e NI.V3”.
Criar um histograma para todos os dados:
hist(dados$resp, col = "lightgreen", col.axis = "blue", col.lab = "red",
xlab = "Número de nódulos", ylab="Frequência",
main = "Histograma da frequência de número de nódulos")
Analisando graficamente, os dados não aparentam ter distribuição normal.
Fazer o teste de normalidade de todos os dados testando as hipóteses: H0: Os dados seguem uma distribuição normal. Ha: Os dados não seguem uma distribuição normal.
shapiro.test(dados$resp)
O valor-p obtido foi 0,01946, sendo menor que 0,05, dessa forma, a hipótese nula é rejeitada, logo, há evidências que comprovem que os dados não tem distribuição normal para o nível de significância de 5%.
Fazer o teste de homogeneidade de variâncias dos dados por tratamentos H0: As variâncias são homogêneas; Ha: As variâncias não são homogêneas.
bartlett.test(resp ~ Trat, data = dados)
O valor-p obtido foi 0,1957, sendo maior que 0,05, dessa forma, a hipótese nula não deve ser rejeitada, havendo evidências que comprovem que os dados apresentam homogeneidade de variâncias dos dados por tratamentos para o nível de significância de 5%.
Análise de variância Hipóteses do fator 1 (inoculação): H0: o número de nódulos será igual para as duas inoculações; Ha: o número de nódulos se difere entre as inoculações.
Hipóteses do fator 2 (épocas): H0: o número de nódulos será igual para todas as épocas; Ha: o número de nódulos se difere em pelo menos uma época.
Hipótes da interação entre os fatores: H0: Todas as combinações entre os níveis do fator 1 e do fator 2 têm o mesmo efeito; Ha: Pelo menos duas combinações entre os níveis do fator 1 e do fator 2 têm efeitos diferentes.
mod = with(dados, aov(resp~F1*F2))
anova(mod)
Para o Fator 1 (F1), o resultado não é significativo, indicando que estatisticamente o número de nódulos será igual na soja inoculada com Rhizobium e na soja não inoculada;
Analisando a Fator 2 (F2), percebemos que o resultado foi significativo para 0,01, indicando que, para esse nível de significância, o número de nódulos se difere em pelo menos uma época de aplicação.
Fazendo a análise da interação entre os fatores, obtivemos um resultado muito significativo, em que concluimos que, com a significância de 0,001, pelo menos uma combinação entre os níveis do fator 1 e do fator 2 têm efeitos diferentes das demais.
Extrair do modelo os valores ajustados e criar um objeto para armazenar os valores ajustados (teóricos):
ajustados = fitted(mod)
Extrair do modelo os residuos e criar um objeto para armazenar os residuos:
residuos = residuals(mod)
summary(residuos)
Residuos padronizados:
residuosp = rstandard(mod)
Grafico dos residuos padronizados (eixo Y) e valores ajustados (eixo X):
plot(ajustados,
residuosp,
xlab= "Valores ajustados",
ylab= "Resíduos padronizados",
ylim=c(-3.5, 3.5),
pch = 16,
col="red",
main = "Resíduos padronizados X Valores ajustados")
abline(h =c(-3, 3), lty = 2, col = "blue")
Com a análise do gráfico, é possível observar que não possue pontos com valores discrepantes que ultrapassem a linha tracejada nos valore 3 e -3. Porém, podemos perceber um determinado padrão entre os valores.
Gráfico para verificar a Normalidade dos resíduos:
car:: qqPlot(residuos, col="red", pch = 16)
Graficamente os dados apresentam distribuição normal, todos os pontos estão dentro do envelope, apenas dois pontos estão mais a margem.
Teste de normalidade dos residuos: Shapiro Wilk H0: os residuos tem distribuição normal; Ha: os resíduos não tem distribuição normal.
shapiro.test(residuos)
Como o valor-p encontrado é 0,3125, sendo maior que 0,05, então não rejeitamos a hipótese nula, indicando que os resíduos tem distribuição normal.
Comparando com o resultado encontrado no teste de Normalidade de todos os dados, em que o valor-p obtido foi 0,01946, rejeitando a hipótese nula, encontramos uma diferença ao comparar com a normalidade dos resíduos, visto que, os resíduos apresentaram distribuição normal.
Teste de homogeneidade de variâncias dos resíduos por tratamentos: H0: As variâncias são homogêneas; Ha: As variâncias não são homogêneas.
O usando o teste de Bartlett:
with(dados, bartlett.test(mod$residuals~Trat))
O valor é igual ao teste de homogeneidade de variâncias, onde o valor-p obtido foi 0,1957, sendo maior que 0,05, dessa forma, a hipótese nula não deve ser rejeitada, havendo evidências que comprovem que os dados apresentam homogeneidade de variâncias dos resíduos por tratamentos.
Procedendo com os desdobramentos adequados: Observeando primeiramente as interações:
Interação entre o fator 1:
with(dados, interaction.plot(F2, F1, resp, las=1, col=1:6, bty='l',
xlab='', ylab='CBM', trace.label="FATOR1"))
Nesse caso existe uma interação devido a diferença na direção da resposta.
Interação entre o fator 2
with(dados, interaction.plot(F1, F2, resp, las=1, col=1:6, bty='l',
xlab='', ylab='CBM', trace.label="FATOR2"))
Na época V3 existe uma interação devido a diferença na direção das demais respostas. Já nas épocas plantio, R1 e V1, existe uma interação devido à diferença na grandeza da resposta.
Teste de Comparações:
library(ExpDes.pt)
with(dados,fat2.dic(F1,F2,resp, mcomp="tukey"))
Analisando o quadro da ánalise de variância para o desdobramento do fator 1 dentro dos níveis de fator 2 (épocas) podemos observar que apenas a interação de F1 com a época de aplicação V1+15 apresentou um valor de F maior que 0,05, não sendo estatísticamente significativa.
Ao analisar o teste de Tukey para cada desdobramento individual de F1 dentro dos níveis de F2, observamos que o tratamento inoculado apresentou as maiores médias para três épocas e, na época V3+15 a média para o tratamento não inculado foi maior. Sendo assim, a combinação entre a época V3+15 com a não inoculação apresentou o meior número médio de nódulos.
O desdobramento das épocas dentro do fator inoculação: Dentro do tratamento com sementes inoculadas as aplicações nas épocas “Plantio” e “R1+15” apresentaram os maiores números médios de nódulos e não diferiram estatisticamente entre si. Para o tratamento com sementes não inoculadas apenas o número médio de nódulos para a aplicação na época “V3+15” foi estatisticamente diferente, sendo a maior média dentre as quatro épocas.