Computacional

Propaganda
Problema :
Seleção de modelos lineares .
Procedimentos para seleção de modelos buscam identificar o modelo , dentro
de uma classe de candidatos , que melhor explica os dados em questão. Isto
torna-se complicado, uma vez que temos uma vasta quantidade de candidatos.
Este problema é usualmente resolvido utilizando “Eliminação para trás”
(Backward elimination) ou “Inclusão para frente” (Forward Inclusion); aqui é
apresentada um nova proposta.
Proposta :
Otimização do problema através de Algoritmos genéticos , utilizando como
método de comparação dos modelos o AIC1 e uma outra função de ajuste dada
por :
- 2 * log máxima verossimilhança + #de parâmetros * log #de parâmetros
que chamaremos de  .
1
AIC = - 2 * log máxima verossimilhança + 2 * #de parâmetros
Dados :
1o – Foi simulado um conjunto de 20 regressores Xi ~ U (-10,10) , i= 1, ... ,20 ,
cada um contendo 100 observações , e dentre estes , 8 verdadeiros , tendo assim o
modelo :
Yi = β1 x1i + β2 x2i + β3 x3i + β4 x4i + β5 x5i + β6 x6i + β7 x7i + β8 x8i + ε
onde ε ~ N ( 0 , 1 ).
2o – Foi simulado , da mesma forma do item anterior , 100 regressores , cada um
com 200 observações , e dentre estes 20 são verdadeiros.
Algoritmo Genético :
O algoritmo genético opera em uma população de candidatos para otimizar o
problema. Através de uma população inicial cria-se uma nova população,
baseado em mecanismos genéticos naturais.
A iteração deste processo nos leva à sucessivas populações de indivíduos que,
esperamos, neste caso, explicarem melhor o nosso modelo. A adaptação dos
indivíduos é feita através de uma função de ajuste,que aqui, serão o AIC e ,
já mencionados anteriormente.
O algoritmo genético começa com uma população gerada aleatoriamente, é
feito o ajuste de cada indivíduo da população e então , novos indivíduos são
selecionados com probabilidade dependendo do valor do ajuste.
Com uma probabilidade fixa são feitos cruzamentos de pares de indivíduos, e
mutações.E então a população é substituída pela nova população e o processo é
repetido até convergência ou um número fixado de gerações.
Implementação :
# Dados simulados #

1o conjunto de dados
x<-matrix(runif(20*100,-10,10),nrow=100, ncol=20)
beta <- c(1,-1,1,-1,1,-1,1,-1,0,0,0,0,0,0,0,0,0,0,0,0)
y<-x%*%beta + rnorm(100,0,1)

2o conjunto de dados
x<-matrix(runif(200*100,-10,10),nrow=200, ncol=100)
beta <- c(1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,rep(0,80))
y<-x%*%beta + rnorm(200,0,1)
# Variáveis fixas #
extras<- NULL
faltam<- NULL
verdadeiro<- c(rep(T,20),rep(F,80))
a<- matrix(ncol=80,nrow=1)
b<-matrix(ncol=100,nrow=80)
 População
G<-200  Número de gerações
prob.cross<-0.2  Probabilidade de haver cruzamento
prob.mut<-0.05  Probabilidade de haver mutação
pop<- 80
# Ajuste do modelo verdadeiro #
testeverdadeiro<-lm(y~ x[,1:20])
verdade<-AIC(testeverdadeiro,k=log(20))
# População inicial e ajuste da população #
for(i in 1:pop){
csi<- sample(c(T,F), 100,replace=TRUE, prob=c(0.5,0.5))
b[i,]<-csi
teste<-lm(y~x[,b[i,]])
a[i]<-1/(AIC(teste,k=log(sum(b[i,]))))
}

Para as G gerações faremos :
for(g in 1:G){
p<-matrix(a/sum(a),ncol=pop,nrow=1)
ele.ótimo<-(1:pop)[p==max(p)]
( Escolhemos os elementos para próxima fase de acordo com o valor do seu
ajuste )
# Reprodução #
( Escolhemos pop – 10 elementos porque estamos guardando o elemento com
melhor ajuste 10 vezes (elitismo) )
elemento<-sample(1:pop,pop-10,replace=T,prob=p)
b<-b[c(rep(ele.ótimo[1],10),elemento),]
# Cruzamento #

for(j in 1:40){
Número de cruzamentos
elemento1<-sample(1:pop,2)
csi1<-b[elemento1[1],]
csi2<-b[elemento1[2],]
for (i in 1:100){
if(runif(1)<prob.cross){
cross<-csi1[i]
csi1[i]<-csi2[i]
csi2[i]<-cross
}
b[elemento1[1],]<-csi1
b[elemento1[2],]<-csi2
}}
# Mutação

for(j in 1:30){
Número de mutações
elemento2<-sample(1:pop,1)
for(i in 1:100){
if(runif(1)<prob.mut){
b[elemento2,i]<- !b[elemento2,i]
}
}}
# Ajuste da nova população #
for(i in 1:pop){
teste<-lm(y~x[,b[i,]])
a[i]<-1/(AIC(teste,k=log(sum(b[i,]))))
}
}
# Resultados #

result<-(1:pop)[a==max(a)]
Dentre os indivíduos da população
selecionamos aquele que tem o melhor ajuste
modeloselecionado<-b[result[1],]
teste<-lm(y~x[,modeloselecionado])
AIC(teste,k=log(sum(modeloselecionado)))
extras<- sum((modeloselecionado-verdadeiro)>0)
além das do modelo verdadeiro , foram incluídas.
 Conta quantas covariáveis

faltam<-sum((modeloselecionado-verdadeiro)<0)
Conta quantas covariáveis
estão no modelo verdadeiro e não estão no modelo selecionado.

Observação : Os valores fixados anteriormente são para o 2o conjunto de
dados. Para o 1o conjunto de dados, foi usada uma população inicial de 50
indivíduos, com número de cruzamentos 15 e mutações 20. Além disso foi
usado um elitismo de 5 indivíduos. O número de gerações para o 1o
conjunto de dados foi 60, pois a convergência era bem mais rápida.
Resultados :
 Com ambos os conjuntos de dados, o algoritmo foi rodado 100
vezes e em 100% delas convergiu para o modelo original ou para
um modelo com função de ajuste menor ; sempre incluindo todas
as variáveis verdadeiras, mostrando assim, eficiência.
 Para o 1o conjunto de dados o tempo demorado foi mais ou menos
de 1 minuto , enquanto para o 2o, 15 minutos.
Gráficos de convergência para o 2o conjunto de dados :
 Usando  :

Usando AIC :
Gráficos de convergência para o 1o conjunto de dados :
 Usando  :
 Usando AIC :
 Comparando  e AIC :
Através dos contadores extras e faltam , definidos no algoritmo, foi possível
comparar as performances do AIC e  .
O algoritmo foi rodado 100 vezes para cada função de ajuste e foi obtido o
seguinte resultado :

1o conjunto de dados :
Média de extras:

AIC

0.975
2.4
2o conjunto de dados :
Média de extras:

AIC
5.37
22.55
Como já citado anteriormente o algoritmo nunca deixa de incluir as covariáveis
verdadeiras(faltam = 0 em todos os casos acima)
 O resultados mostram que o  tem um desempenho bem
melhor que o do AIC, já que a média de variáveis extras é bem
menor. (Pelo princípio da parcimônia devemos escolher o modelo
com menor número de covariáveis)
 Poderíamos ter usado como critério de ajuste o BIC2 (Bayesian
criterion information), que penaliza os modelos “maiores” ainda
mais que .
2
BIC = -2 * log máx verossimilhança + # de parâmetros * log # observações
Projeto
Estatística
Computacional
 Renata Leite Estrella
Bibliografia :
 Irene Poli, Alberto Roverato
“A Genetic Algorithm for Classical Model Selection”
Download