##### ANOVA DE MONTE CARLO
anova.MC=function(dados,n){
aleat=function(dados){ # função que faz as permutações
mc=dados # crio o objeto que receberá as permutações, idêntico aos dados originais
mc$resp=rep(NA,length(dados$resp)) # retiro os valores originais
for(j in 1:length(unique(dados$bloco))){ # número de blocos
mc$resp[mc$bloco==j]=sample(dados$resp[dados$bloco==j]) # permutação dos valores encontrados
}
return(summary(aov(resp~A*B+Error(bloco/(A*B)),mc))[5][[1]][[1]][[4]][1:3]) # extração e cálculo de F
}
result=data.frame(A=rep(NA,n),B=rep(NA,n),A.B=rep(NA,n)) # crio o objeto que receberá os valores de F
for(i in 1:n){ # número de permutações
result[i,]=aleat(dados) # gero n valores de F
}
real=summary(aov(resp~A*B+Error(bloco/(A*B)),data=dados))[5][[1]][[1]][[4]][1:3] # extração e cálculo de F dos dados reais
p=data.frame(fatores="p",
A=(length(result[result[,1]>=real[1],1])+1)/(n+1), # probabilidade de se encontrar o efeito do fator A ao acaso
B=(length(result[result[,2]>=real[2],2])+1)/(n+1), # o mesmo para o fator B
A.B=(length(result[result[,3]>=real[3],3])+1)/(n+1) # e idem para a interação A:B
)
return(p)
} # fim da função
# Testando...
anova.MC(dados,99)