AIC pour sélectionner le nombre de retards (lags)

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Matthieu Stigler
Messages : 141
Enregistré le : 07 Sep 2007, 11:30

AIC pour sélectionner le nombre de retards (lags)

Messagepar Matthieu Stigler » 19 Sep 2007, 13:52

Bonjour

Je souhaite sélectionner le nombre de retards ("lags") d'un modèle selon les critères aic et bic.
Le modèle, un peu compliqué (Threshold autoregressive), est: diff(x) = dummy1*x-1 +dummy2*x-1 + diff(x-1) +...+diff(x-n)
J'ai donc utilisé le paquet metomet et crée une matrice avec les différentes valeurs pour chaque modèle. Le problème, c'est que le AIC/AICc/BIC sélectionnent systématiquement le nombre maximal de retards, soit le modèle le moins parcimonieux.

Le problème, peut-être est dû au fait que chaque retard rajouté diminue l'échantillon de 1 donnée (taille=n-1-p)? J'ai essayé avec une définition alternative de l'AIC, qui prenne en compte la taille de l'échantillon, ou encore imposé la même taille (n-1-pmax), mais j'arrive tjrs au même résultat: les AIC sont décroissants avec le nombre de retards...

Avez-vous une idée à quoi cela est dû? Faut-il encore une autre définition de AIC? Ou un log-likelihood restreint?

Merci beaucoup!

Code : Tout sélectionner

##Function choix aic MTAR, x: une série ts, lmax: le nombe maximal de retards
selectaic2 <-function(x, lmax){
aic <-matrix(0, nrow=8, ncol=lmax)
rownames(aic)<-c("n", "k", "DF", "LL","AIC", "AICc","BIC","AIC alternatif")

for(i in 1:lmax){
j<-i+1; m<-length(x)-1
colnames(aic) <- paste("Lag", seq(1:lmax))
xdiff <-diff(x)[j:m] # variable à régresser
xlag <- embed(x,2)[j:m,2]# premier retard, sera associé aux dummy
difflag <-embed(diff(x),j) #matrice des retards en différence
colnames(difflag) <- paste("Lag", c(0,seq(1:i)))
dummyplus <-ifelse(difflag[,2] >=0, 1,0) #Dummy plus
dummymoins <-ifelse(difflag[,2] <0, 1,0) #Dummy moins
reg <-lm(xdiff~ -1 +dummyplus:xlag +dummymoins:xlag +difflag[,2:j])
aic[1,i] <-sic(reg)[,1]
aic[2,i] <-sic(reg)[,2]
aic[3,i] <-reg$df
aic[4,i] <-sic(reg)[,3]
aic[5,i] <-sic(reg)[,4]
aic[6,i] <-sic(reg)[,5]
aic[7,i] <-sic(reg)[,6]
aic[8,i] <-length(xdiff)*log(deviance(reg))+2*sic(reg)[,2]
print(summary(reg))}
meilleur<- matrix(c(which.min(aic[5,]),which.min(aic[6,]),which.min(aic[7,])), nrow=1, dimnames=list("lag",c("AIC","AICc","BIC")))
return(list(meilleur=meilleur, ensemble=aic))
}


selectaic2(nottem,10)

Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité