Endereço

Departamento de Estatística – UFV
Av. Peter Henry Rolfs, s/n
Campus Universitário
36570-900, Viçosa, MG
Tel.: +55 (31) 3612-6150
E-mail: det@ufv.br

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)
##############################

 


© 2020 Universidade Federal de Viçosa - Todos os Direitos Reservados