####################
### ANOVA GRAPHS ###
####################
anova.graph=function(dados){
medias=aggregate(dados[,4],list(dados[,2],dados[,3]),mean) # crio tabela com a média dos tratamentos
names(medias)=c("A","B","media")
medias[,1]=c("A-","A+","A-","A+")
sem.int=medias[1,3]+medias[2,3]+medias[3,3]-2*medias[1,3] # valor esperado para o tratamento AB caso não houvesse interação
ctrl=subset(dados,A<1&B<1)[,4] # separo os dados nos grupos de tratamentos
tratA=subset(dados,A>0&B<1)[,4]
tratB=subset(dados,A<1&B>0)[,4]
tratAB=subset(dados,A>0&B>0)[,4]
### Barra de erros por meio de bootstrap
nb=length(unique(dados[,1])) # calculo o número de amostras por tratamento
b.c=mean(ctrl)
for(i in 1:999){
b.c[i+1]=mean(sample(ctrl,nb,replace=T))
}
b.a=mean(tratA)
for(i in 1:999){
b.a[i+1]=mean(sample(tratA,nb,replace=T))
}
b.b=mean(tratB)
for(i in 1:999){
b.b[i+1]=mean(sample(tratB,nb,replace=T))
}
b.ab=mean(tratAB)
for(i in 1:999){
b.ab[i+1]=mean(sample(tratAB,nb,replace=T))
}
### GRÁFICO ###
x11() # abre janela do gráfico
vM=c(sem.int,sort(b.c)[950],sort(b.a)[950],sort(b.b)[950],sort(b.ab)[950]) # valor máximo possível para este gráfico
vm=c(sem.int,sort(b.c)[51],sort(b.a)[51],sort(b.b)[51],sort(b.ab)[51]) # idem para o valor mínimo
stripchart(media~A,data=subset(medias,B<1),
vertical=T,
pch=16,
xlim=c(0.5,2.5),
ylim=c(min(vm),max(vM)),
)
points(c(.95,1.95),c(medias[3,3],medias[4,3]),col=2,pch=16)
points(1.95,sem.int,col=3,pch="*",cex=1.5)
segments(1,medias[1,3],2,medias[2,3])
segments(.95,medias[3,3],1.95,medias[4,3],col=2)
segments(.95,medias[3,3],1.95,sem.int,lty=2,col=3)
legend(2.1,max(vM),c("B-","B+","esp. \ns/ int."),col=1:3,lty=c(1,1,2),bty="n")
arrows(1,medias[1,3],1,sort(b.c)[51],length=.1,angle=90) # barras do controle
arrows(1,medias[1,3],1,sort(b.c)[950],length=.07,angle=90)
arrows(2,medias[2,3],2,sort(b.a)[51],length=.1,angle=90) # idem para tratA
arrows(2,medias[2,3],2,sort(b.a)[950],length=.07,angle=90)
arrows(.95,medias[3,3],.95,sort(b.b)[51],length=.1,angle=90,col=2) # idem para tratB
arrows(.95,medias[3,3],.95,sort(b.b)[950],length=.07,angle=90,col=2)
arrows(1.95,medias[4,3],1.95,sort(b.ab)[51],length=.1,angle=90,col=2) # idem para tratAB
arrows(1.95,medias[4,3],1.95,sort(b.ab)[950],length=.07,angle=90,col=2)
} # fecha função