Prof. Moysés Nascimento – 3.Article
3.Artigo: Artificial neural networks in evaluating the adaptability and stability in alfafa genotypes. Crop Breeding and Applied Biotechnology (Impresso), v. 12, p. 152-156, 2013.
1. Data set (example) 300.55 427.71 423.26 403.75 393.28 543.78 709.72 734.94 752.69 492.69 873.86 1122.48 1158.15 1339.04 1140.13 1384.74 1240.55 1951.90 2115.85 2547.96 1.00 395.25 524.05 504.64 569.17 569.35 678.75 909.70 959.59 1027.42 860.82 1031.74 1398.25 1150.10 1356.62 1278.99 1378.46 1432.20 1959.26 2075.53 2614.17 1.00 358.39 547.31 499.51 723.36 587.29 575.23 762.95 803.30 1252.79 862.16 1168.58 1179.86 981.07 787.31 1464.79 1366.29 1405.76 1588.70 1754.91 2376.00 1.00 302.11 724.75 646.31 771.86 498.42 700.59 816.07 903.73 1060.78 859.97 1173.26 1403.29 1193.77 1365.35 1337.38 1371.07 1339.34 1983.79 2469.31 2770.00 1.00 522.71 823.47 779.81 952.72 1087.92 1141.23 1193.63 1295.61 1515.25 1514.41 1487.86 1327.43 1537.04 1418.96 1719.26 1724.82 1706.89 2360.14 2424.47 2810.34 1.00 448.46 790.15 854.45 896.65 705.03 794.99 1079.42 1098.22 1282.10 1181.85 1343.52 1332.44 1406.68 1387.93 1675.45 1698.36 1529.30 2272.73 2274.05 2993.46 1.00 266.87 629.79 344.36 597.38 384.20 588.84 783.71 963.66 1030.79 727.46 1294.89 961.97 1295.29 1356.15 1563.75 1559.52 1357.20 2109.49 2119.54 2870.21 1.00 273.88 716.18 766.59 783.88 527.59 813.88 1097.69 810.82 1040.83 772.70 1229.62 1374.61 1078.33 1244.32 1638.23 1492.15 1423.05 1846.12 2183.25 1770.13 1.00 741.83 695.57 767.78 765.94 1546.18 1041.51 1148.83 1299.64 1331.31 1263.95 1354.52 1127.04 1390.01 1494.27 1598.14 1346.45 1439.96 2307.15 2159.63 3070.92 1.00 475.26 680.38 612.16 760.67 732.17 985.88 899.16 1097.22 1055.66 1084.84 1201.36 1380.66 1386.04 1514.61 1478.87 1465.15 1510.34 2392.28 2421.78 2999.00 1.00 |
|
2. Function for obtaining training set
#Função simula conjunto de dados para treinamento
####Argumentos da função
#n_ambiente= número de ambientes avalidos no estudo
#desv_pad=desvio padrão obtido por meio de coeficiente de variação e da média do experimento em estudo
#beta0=média do experimento em estudo
#n_training=número de genótipos simulados
#gl=graus de liberdade da análise conjunta
#QMR=quadrado médio do resíduo da análise conjunta
#rep=número de repetições
#I_ord=índice ambiental ordenado
############################################################################################
#Cole a função no R
train.set<-function(n_ambientes,desv_pad,beta0,n_training,gl,QMR,rep, I_ord)
{
simula<-function(n_ambientes,desv_pad,beta0,beta1,n_training, I_ord)
{
y_obs<-matrix(0,nrow=n_training,ncol=n_ambientes,byrow = T)
for(i in 1:n_training)
{
if(beta1==1)
{
beta1<-runif(1, 1.11, 1.8)
}
if(beta1==2)
{
beta1<-runif(1, 0.0, 0.89)
}
if (beta1==0)
{
beta1<-runif(1, 0.90,1.10)
}
erro<-rnorm(n=n_ambientes,mean=0,sd=desv_pad)
y_obs[i,]<-beta0+beta1*I_ord+erro
dados<-y_obs
}
d_train<-rbind(dados,I_ord)
return(d_train=d_train)
}
#Simulando os valores de acordo com a classificação da metodologia de Eberhart e Russell (1966)
##Ambientes de adaptabilidade a ambientes favoráveis
cont<-0
dados1<-matrix(0,n_training,(n_ambientes+1),byrow=T)
i<-1
repeat
{
z1<-simula(n_ambientes,sigma,beta0,1,1,I_ord)
c1<-cbind(rep(1,1),z1[-(n_training+1),])
reg<-lm(c1[1,-1]~I_ord)
b=reg$coefficients
beta1<-b[2]
t<-(beta1-1)/sqrt((QMR/2)/sum(I_ord^2))
p_valor<-2*(pt(t, gl,lower.tail=F))
if((p_valor<0.05) & (sum(c1[1,]<0)==0))
{
dados1[i,]<-c1[1,]
cont<-cont+1
i<-i+1
}
if(cont==n_training)
break
}
##Ambientes de adaptabilidade geral
cont<-0
dados2<-matrix(0,n_training,(n_ambientes+1),byrow=T)
i<-1
repeat
{
z1<-simula(n_ambientes,sigma,beta0,0,1,I_ord)
c1<-cbind(rep(2,1),z1[-(n_training+1),])
reg<-lm(c1[1,-1]~I_ord)
b=reg$coefficients
beta1<-b[2]
t<-(beta1-1)/sqrt((QMR/2)/sum(I_ord^2))
if(t<0)
{
p_valor<-2*(pt(t, gl,lower.tail=T))
}
if(t>0)
{
p_valor<-2*(pt(t, gl,lower.tail=F))
}
if((p_valor>0.05) & (sum(c1[1,]<0)==0))
{
dados2[i,]<-c1[1,]
cont<-cont+1
i<-i+1
}
if(cont==n_training)
break
}
##Ambientes de adaptabilidade a ambientes desfavoráveis
cont<-0
dados3<-matrix(0,n_training,(n_ambientes+1),byrow=T)
i<-1
repeat
{
z1<-simula(n_ambientes,sigma,beta0,2,1,I_ord)
c1<-cbind(rep(3,1),z1[-(n_training+1),])
reg<-lm(c1[1,-1]~I_ord)
b=reg$coefficients
beta1<-b[2]
t<-(beta1-1)/sqrt((QMR/2)/sum(I_ord^2))
if(t<0)
{
p_valor<-2*(pt(t, gl,lower.tail=T))
}
if(t>0)
{
p_valor<-2*(pt(t, gl,lower.tail=F))
}
if((p_valor<0.05) & (sum(c1[1,]<0)==0))
{
dados3[i,]<-c1[1,]
cont<-cont+1
i<-i+1
}
if(cont==n_training)
break
}
#Passar os dados para escala ln para obter a resposta a respeito da estabilidade
# (utilizando conceito proposto por Finlay e Wilkison)
c11<-cbind(c(rep(4,n_training)),log(dados1[,2:(n_ambientes+1)]))
c22<-cbind(c(rep(5,n_training)),log(dados2[,2:(n_ambientes+1)]))
c33<-cbind(c(rep(6,n_training)),log(dados3[,2:(n_ambientes+1)]))
####Conjunto de dados para treinamento e teste
grupos<<-rbind(dados1,dados2,dados3,c11,c22,c33)
}
###Defina os argumento da função de acordo com o experimento avaliado
#número de indivíduos para o treinamento de cada classe
n_training=500
#variância do erro
sigma=100
#média geral
beta0=1000
#número de ambientes
n_ambientes=20
#Índice ambiental ordenado
I_ord<-c(-695,-681,-541,-508,-472,-351,-283,-237,-164,-163,-29,33,45,89,112,154,203,864,1071,1553)
#graus de liberdade da análise conjunta
gl=500
#quadrado médio do resíduo da análise conjunta
QMR=20000
# número de repetições
rep<-2
#Rodando a função
train.set(n_ambientes,desv_pad,beta0,n_training,gl,QMR,rep, I_ord)
#para chamar o conjunto simulado basta digitar "grupos"
grupos
|
|
3. Function for training net
####Treinamento da rede ##Parâmetros da função #amostra=Tamanho da amostra utilizada no treinamento #erroo=erro desejado #n_training=tamanho da amostra de treinamento #rangg=pesos iniciais (sugestão ver artigo) #decayy=taxa de decaimento #maxitt=máximo de iterações do treinamento #Função train.net<-function(n_training,amostra,rang,decay, maxit,erro ) { i<-1 size1<-seq(1,15) size2<-matrix(0,10000) erro<-matrix(1,10000) repeat { a<-data.frame(grupos[,-1],g = factor(grupos[,1])) samp<-c(sample(1:n_training,amostra), sample((n_training+1):(2*n_training),amostra), sample((2*n_training+1):(3*n_training),amostra),sample((3*n_training+1):(4*n_training),amostra), sample((4*n_training+1):(5*n_training),amostra),sample((5*n_training+1):(6*n_training),amostra)) ncam<-sample(size1,1) size2[i,1]<-ncam rede1<<- nnet(g~ ., data = a, subset = samp, size=ncam, rang =rangg,decay = decayy, maxit = maxitt) b<-table(a$g[-samp], predict(rede1, a[-samp,], type = "class")) erro[i]<-1-(sum(diag(b))/600) i<-i+1 if(erro[i-1]<erroo) break } } ########################### ###Definindo os parâmetros (EXEMPLO) amostra=400 rangg =0.0002207295 decayy = 0.00050 maxitt = 5000 erroo=0.4 n_training=500 ############################## #Usando a função train.net(n_training,amostra,rang,decay, maxit,erro) ############################## |
|
4. Function data analysis
##Função rede neural adaptabilidade ##Parâmetros da função #ng=número de genótipos #na=número de ambientes #dados_reais=dados dos experimento (um arquivo em que o elemento ij seja representado # pela média do i-ésimo genótipo avaliado no #j-ésimo ambiente) # obs.: a última coluna é composta de um vetor unitário. #Função net.adaptability.analysis<-function(ng,na,dados) { h<-matrix(dados_reais,ng,na+1,byrow=T) h_ln<-log(h) hh<-rbind(h,h_ln) d<-data.frame(hh[,-(na+1)],g = factor(hh[,na+1])) ####Aplicação da rede treinada ao conjunto de dados reais pred2<-predict(rede1,d[,-(na+1)], type = "class") #Análise final dados reais######################### c<-as.numeric(pred2) final<-cbind(c[1:ng],c[(ng+1):(ng*2)]) est<-NULL adapta<-NULL adaptabilidade<-NULL estabilidade<-NULL for(i in 1:ng) { adapta[i]<-final[i,1] { if(adapta[i]==1) adaptabilidade[i]<-c("Favorável") if(adapta[i]==2) adaptabilidade[i]<-("Geral") if(adapta[i]==3) adaptabilidade[i]<-("Desfavorável") } est[i]<-final[i,1]==(final[i,2]-3) { if(est[i]==FALSE) estabilidade[i]<-c("Previsilidade baixa") if(est[i]==TRUE) estabilidade[i]<-("Previsilidade alta") } } resultado<<-cbind(adaptabilidade,estabilidade) print(resultado) } ################################################################## ###Definindo os parâmetros (EXEMPLO) ng<-10 #número de genótipos na<-20 #número de ambientes dados_reais<-scan("dados_reais.txt") dados<-dados_reais #Usando a função net.adaptability.analysis(ng,na,dados) ############################## |