##=============================================================================== ## Título: Análise didática de experimento em parcela subdividida ## Versão: v4 ## Objetivos: ##=============================================================================== ## a) Mostrar diferentes alternativas de análise dos experimentos em parcelas ## subdivididas ## b) Testes de comparação de médias e análise de contrastes ##=============================================================================== # Leitura dos dados
# https://sites.google.com/site/agrobiostat/files #======================================= dados<-read.table('./dados/eps.txt', header=T) head(dados, 13) str(dados) is.factor(dados$bl) is.factor(dados$adubo) is.factor(dados$dose) is.numeric(dados$y) summary(dados) #======================================= #============== ANOVA ================== #======================================= av <-aov(y ~ bl + adubo * dose + Error(bl/adubo), data=dados) summary(av) # Notar que a interação entre adubo e dose # é significativa library(TukeyC) cv(av) #======================================= #==== Ftab. GL adubo 3; GL resíduo 9 === #======================================= (Ftab1 <- qf(5 / 100, 3, 9, lower.tail=FALSE)) #======================================= #Ftab. GL adubo:dose 6 ; GL resíduo 24 #======================================= (Ftab2 <- qf(5 / 100, 6, 24, lower.tail=FALSE)) #======================================= #===== Ftab.GL dose 2; GL resíduo 24 === #======================================= (Ftab3 <- qf(5 / 100, 2, 24, lower.tail=FALSE)) #======================================= #======== GRÁFICO ADUBO ================ #======================================= curve(expr=df(x, 3, 9), main="ADUBO - F calculado F(3, 9) gl", xlab="F", ylab="Densidade de probabilidades, f(F)", xlim=c(0, 10), n=1e3) abline(v=Ftab1, col="red") abline(h=0, lty=2) xf <- seq(Ftab1, 10, 0.01) ydf <- df(xf, 3, 9) polygon(c(Ftab1, xf), c(0, ydf), col="red") text(x=6, y=.1, paste("pf(>=", round(Ftab1, 2), ") =", round(pf(Ftab1, 3, 9, lower.tail=F), 4)), cex=0.8, col="black") #======================================= #============ GRÁFICO DOSE ============= #======================================= curve(expr=df(x, 2, 24), main="DOSE F calculado F(2, 24) gl", xlab="Valor F", ylab="Densidade Probabilística F(f)", xlim=c(0, 10), n=1e3) abline(v=Ftab3, col="red") abline(h=0, lty=2) xf <- seq(Ftab3, 10, 0.001) ydf <- df(xf, 2, 24) polygon(c(Ftab3, xf), c(0, ydf), col="red") text(x=5, y=.1, paste("pf(>=", round(Ftab3, 2), ") =", round(pf(Ftab3, 2, 24, lower.tail=F), 4)), cex=0.8, col="black") #======================================= #======== GRÁFICO ADUBO:DOSE =========== #======================================= curve(expr=df(x, 6, 24), main="ADUBO:DOSE - F calculado F(6, 24) gl", xlab="F", ylab="Densidade Probabilística F(f)", xlim=c(0, 10), n=1e3) abline(v=Ftab2, col="red") abline(h=0, lty=2) xf <- seq(Ftab2, 10, 0.001) ydf <- df(xf, 6, 24) polygon(c(Ftab2, xf), c(0, ydf), col="red") text(x=4, y=.1, paste("pf(>=", round(Ftab2, 2), ") =", round(pf(Ftab2, 6, 24, lower.tail=F), 4)), cex=0.8, col="black") #======================================= #============ INTERAÇÃO ============== #======================================= par(mfrow = c(2, 1)) with(dados, interaction.plot(adubo, dose, y, col = 1:4, lwd = 2, ylab = "Kg/ha")) with(dados, interaction.plot(dose, adubo, y, col = 1:4, lwd = 2, ylab = "Kg/ha")) #======================================= #============== TUKEY ================== #======================================= # Testando efeito principal das parcelas (adubo) # (finalidade didática pois a interação é significativa: necessário desdobrar!) ta <- TukeyC(av, which='adubo', error='bl:adubo', sig.level=.05) summary(ta) # Testando efeito principal da subparcela (dose) # (finalidade didática pois a interação é significativa: necessário desdobrar!) td <- TukeyC(av, which='dose', error='Within', sig.level=0.05) summary(td) #======================================================= # adubo/dose: estudando dose dentro dos níveis de adubo #======================================================= #===: nível 1 tad1 <- TukeyC.nest(av, which='adubo:dose', error='Within', sig.level=0.05, fl1=1) # 1: SALITRE C summary(tad1) #===: nível 2 tad2 <- TukeyC.nest(av, which='adubo:dose', error='Within', sig.level=0.05, fl1=2) # 2: SULFATO summary(tad2) #===: nível 3 tad3 <- TukeyC.nest(av, which='adubo:dose', error='Within', sig.level=0.05, fl1=3) # 3: URÉIA summary(tad3) #===: nível 4 tad4 <- TukeyC.nest(av, which='adubo:dose', error='Within', sig.level=0.05, fl1=4) # 4: CALNITRO summary(tad4) #======================================= #============ CONTRASTES =============== #======================================= # É bem trabalhoso no caso dos experimentos em parcelas subdividadas # devido a mais de uma estimativa do resíduo! # Matriz de contrastes dos adubos #A1 A2 A3 A4 mca <- rbind('A2 vs. (A1, A3, A4)' = c(-1, 3, -1, -1), 'A3 vs. (A1, A4)' = c(-1, 0, 2, -1), 'A1 vs. A4' = c( 1, 0, 0, -1)) # Matriz de contrastes das doses #D1 D2 D3 mcd <- rbind('D3 vs. (D1, D2)' = c(-1, -1, 2), 'D1 vs. D2' = c( 1, -1, 0)) library(gmodels) # Necessário para a função: make.contrasts ## O modelo usado para a ANOVA ## não fornece todos os resultados corretos: # av2 <-aov(y ~ bl + adubo * dose + Error(bl/adubo), # data=dados, # contrasts=list('adubo'=make.contrasts(mca), # 'dose'=make.contrasts(mcd))) ##----------------------------------------------------------------------------------- ## Alternativa 1: ## Usar o modelo fatorial ## e corrigir manualmente as estimativas dos contrastes associados a subparcela ## (um pouco trabalhoso) ##----------------------------------------------------------------------------------- ## Necessário aninhar os efeitos! av2 <-aov(y ~ bl + adubo + adubo/dose, data=dados, contrasts=list('adubo'=make.contrasts(mca), 'dose'=make.contrasts(mcd))) effects(av2)[1:15] sm <- summary(av2, split=list('adubo'=list('A2 vs. (A1, A3, A4)' = 1, 'A3 vs. (A1, A4)' = 2, 'A1 vs. A4' = 3), 'adubo:dose'=list('A1/dose*' = c(1, 5), 'A1/d3 vs. (d1, d2)'= 1, 'A1/d1 vs. d2' = 5, 'A2/dose*' = c(2, 6), 'A2/d3 vs. (d1, d2)'= 2, 'A2/d1 vs. d2' = 6, 'A3/dose*' = c(3, 7), 'A3/d3 vs. (d1, d2)'= 3, 'A3/d1 vs. d2' = 7, 'A4/dose*' = c(4, 8), 'A4/d3 vs. (d1, d2)'= 4, 'A4/d1 vs. d2' = 8 ))) sm # Como o modelo informado não é correto, # foi usado apenas para estimar os contrastes, observar que n erro b (subparcela): # O qmd (141717) está errada, o correto é 74480! # os graus de liberdade (33) estão errados, o correto é 24! # Corrigindo os testes: # Efeitos de dose em cada nível de adubo round(pf(sm[[1]][c(7, 10, 13, 16), 3] / 74480, # 74480 erro associado a subparcela 2, 24, # Graus de liberdade associados a subparcela lower.tail=FALSE), 3) # Contrastes de dose em cada nível de adubo round(pf(sm[[1]][c(8, 9, 11, 12, 14, 15, 17, 18), 3] / 74480, 1, 24, lower.tail=FALSE), 3) ##----------------------------------------------------------------------------------- ## Alternativa 2: ## Com a participação do prof. Ivan Bezerra Allaman ## foi possível fazer a decomposição da SQD desse experimento corretamente! ##----------------------------------------------------------------------------------- av3 <-aov(y ~ bl + adubo + adubo/dose + Error(bl/adubo), data=dados, contrasts=list('adubo'=make.contrasts(mca), 'dose'=make.contrasts(mcd))) effects(av3) # Mensagem de erro -> método não aplicado a classe! coef(av3) # Dá para pegar a mesma informação com a função coef! summary(av3) summary(av3, split=list('adubo'=list('A2 vs. (A1, A3, A4)' = 1, 'A3 vs. (A1, A4)' = 2, 'A1 vs. A4' = 3), 'adubo:dose'=list('A1/dose*' = c(1, 5), 'A1/d3 vs. (d1, d2)'= 1, 'A1/d1 vs. d2' = 5, 'A2/dose*' = c(2, 6), 'A2/d3 vs. (d1, d2)'= 2, 'A2/d1 vs. d2' = 6, 'A3/dose*' = c(3, 7), 'A3/d3 vs. (d1, d2)'= 3, 'A3/d1 vs. d2' = 7, 'A4/dose*' = c(4, 8), 'A4/d3 vs. (d1, d2)'= 4, 'A4/d1 vs. d2' = 8 )))