Modérateur : Groupe des modérateurs
colombet murielle a écrit :Bonjour,
Je suis nouvelle sur le forum
J'ai un souci avec le critere AIC.
En fait j'ai construit des modeles pour predire des taux de mortalite.
A la base je ne m'interesse pas a la qualite du modele mais a la prediction donc je fais d'autres tests enfin bref la n'est pas le probleme.
Le fait est que je regarde quand meme la qualite en sortant le critere AIC.
Le souci est que dans un des modeles(modele lineaire) je suppose que mon taux suit une loi gaussienne avec un poids de la population et dans les 2 autres(avec du log) je modelise le nombre de deces suivant une loi de poisson avec un offset qui est la population.
Dans les 2 derniers le critere est entre 100 et 800 en gros alors que dans le premier il est de l'ordre de -3*10^9!!! On m'a dit que ce n'etait pas normal qu'il soit negatif et que le logiciel n'a peut-etre pas donne le bon resultat et qu'il fallait que je le calcule moi-meme.
Alors premiere question : comment le logiciel calcule le AIC?
Et comment le calculer?
Code : Tout sélectionner
> AIC
function (object, ..., k = 2)
UseMethod("AIC")
<environment: namespace:stats>
> methods(AIC)
[1] AIC.default* AIC.logLik*
Non-visible functions are asterisked
> stats:::AIC.default
function (object, ..., k = 2)
{
if (length(list(...))) {
object <- list(object, ...)
val <- lapply(object, logLik)
val <- as.data.frame(t(sapply(val, function(el) c(attr(el,
"df"), AIC(el, k = k)))))
names(val) <- c("df", "AIC")
Call <- match.call()
Call$k <- NULL
row.names(val) <- as.character(Call[-1])
val
}
else AIC(logLik(object), k = k)
}
<environment: namespace:stats>
> stats:::AIC.logLik
function (object, ..., k = 2)
-2 * c(object) + k * attr(object, "df")
<environment: namespace:stats>
J'ai trouve des formules differentes sur internet et dans des bouquins:
AIC=-2*logvrais+2*nbr_parametre_ds _le modele ----->Ca c'est la formule donnee par tous les bouquins.
Je l'ai utilise pour le modele lineaire avec logvrai=exp{-(sum[yi-E(yi)]^2)/2*sigma^2} (formule trouvee dans un bouquin) en prenant comme variance sigma la variance empirique mais je trouve des resultats negatifs encore .
Sinon il y a d'autres formules:
AIC=Cp+nbr_observation ----> SI c'est un modele lineaire
AIC=ln(somme des residus au carre/nbr de parametre)+ (nbr de parametre +1)*2/nbr de parametre
....etc
J'ai essaye avec ces formules mais je ne retrouve pas les meme resultats que R meme dans les 2 derniers modeles.... je suis perdue.
Si vous connaissez ce critere la merci beaucoup de votre aide.
Murielle
Attention l'AIC n'est pas un critère de qualité de l'ajustement des modèles. La qualité de l'ajustement est un autre domaine. L'AIC est un critère de comparaison de modèles, souvent utilisé pour sélectionner le "meilleur" modèle, ou un petit nb de modèles en compétition.
Avant d'aller plus loin, vous ne pouvez pas comparer directement des modèles relatifs à deux lois de distribution différentes. Vous ne pouvez comparer que des modèles où la réponse est la même, sous la même forme. Les puristes ajoutent également qu'il est nécessaire que les modèles soient emboîtés. Par exemple, vous ne pouvez pas comparer
y ~ x
et
y ~ log(x)
ou
y ~ x
et
log(y) ~ x
colombet murielle a écrit :En fait mes modeles sont
taux(i,t)=alpha(i)+beta(i)*t (1)
log(taux(i,t))=alpha(i)+beta(i)*t (2)
log(taux(i,t))=alpha(i)+beta*t (3)
avec i qui correspond au groupe d'age i et t à l'annee
or taux(i,t)=nbr_cas(i,t)/popu(i,t)
donc dans (1) je dis que le taux suit une loi gaussienne et je mets le poids de la population donc ca fait
glm=glm(taux ~ -1+age+age*annee,family=gaussian(identity),weigths=popu)
Code : Tout sélectionner
taux ~ -1 + age + age*annee
Code : Tout sélectionner
taux ~ -1 + age * annee
Code : Tout sélectionner
taux ~ -1 + age + annee + age:annee
je sais que j'aurais pu mettre taux ~ -1+age/annee je l'ai vu apres avoir fini de programmer mais je retrouve les memes resultats. Certes il a juste fallu que je fasse des transformations pour retrouver la matrice de covariance mais bon tant pis ...
dans (2) la je modelise le nbr_cas(i,t) et j'ai donc:
glm=glm(cas~-1+age+age*annee,family=poisson(log),offset=log(popu))
pour (3) c'est pareil que (2) sauf que j'ai age+ annee au lieu de age+age*annee
Code : Tout sélectionner
fm1 <- glm(taux ~ -1 + age + annee, family = binomial, weigths = popu)
fm2 <- glm(taux ~ -1 + age * annee, family = binomial, weigths = popu)
anova(fm1, fm2, test = "chisq")
Code : Tout sélectionner
fm3 <- glm(nb_cas ~ -1 + age + annee + offset(log(pop)), family = poisson)
fm4 <- glm(nb_cas ~ -1 + age * annee + offset(log(pop)), family = poisson)
anova(fm3, fm4, test = "chisq")
donc moi je pense que mes modeles sont comparables avec le critere non?
Et donc que ce n'est pas normal d'avoir un AIC de 10^9 dans (1) et un AIC de 400 en moyenne dans (2) et (3) il y a forcement quelque chose qui ne va pas.
J'ai essaye quelque de bete: j'ai mis une loi de poisson dans mon premier modele au lieu d'une loi gaussienne ce qui est absurde vu que je modelise un taux mais je voulais voir si le AIC etait aussi haut et en fait ben non il etait du meme ordre que dans les 2 autres modeles.
Donc comme je trouve des resulats corrects je ne pense pas que mon modele (1)soit mal parametre donc je ne sais pas quoi faire.
Pour l'instant je ne me soucie pas du critere bien que cela reste un pbm au fond.
Si vous avez compris mon souci et si vous avez la solution miracle je vous attend et je vous remercie d'avance de votre reponse :wink:
Pourquoi une loi gaussienne ? Pour modéliser des comptages ou des probas, on utilise plutôt une loi de Poisson ou binomiale car les observations sont discrètes par nature. Cela peut marcher avec la loi gaussienne mais il y a parfois des gags douloureux (valeurs prédites < 0, par exemple). Sur un plan stat, je crois qu'il faut choisir un modèle respectant la nature des données, i.e. pas une régression linéaire.
Pas sûr d'avoir tt compris, mais je pense que vous pouvez faire:
Code:
fm1 <- glm(taux ~ -1 + age + annee, family = binomial, weigths = popu)
fm2 <- glm(taux ~ -1 + age * annee, family = binomial, weigths = popu)
anova(fm1, fm2, test = "chisq")
pour faire un test du rapport des vraisemblance jugeant de l'intérêt de l'interaction age:annee dans le modèle binomial
ou
Code:
fm3 <- glm(nb_cas ~ -1 + age + annee + offset(log(pop)), family = poisson)
fm4 <- glm(nb_cas ~ -1 + age * annee + offset(log(pop)), family = poisson)
anova(fm3, fm4, test = "chisq")
pour faire la même chose avec des modèles de Poisson.
Le choix de binomial ou poisson peut se faire selon la valeur des propas observées: plutôt Poisson si probas faibles, plutôt binomial sinon.
Code : Tout sélectionner
glm(taux ~ -1+ age*annee,family=poisson(identity),weigths=popu)
En fait vu que dans mon premier modele je modelise le taux , on m'a dit d'utiliser une loi gaussienne, pour les 2 autres je modelise le nombre de cas donc c'est du comptage et vu qu'il y a du log j'utilise une loi de poisson qui est plus adaptee.
Mais vous pensez que je devrais mettre une loi de poisson quand meme ds mon premier modele ?
mais dans ce cas j'aurais:
Code : Tout sélectionner
glm(taux ~ -1+ age*annee,family=poisson(identity),weigths=popu)
Code : Tout sélectionner
glm(taux ~ -1+ age * annee, family = binomial, weigths = popu)
Code : Tout sélectionner
glm(taux ~ -1+ age * annee + offset(log(popu)), family = poisson)
glm(taux ~ -1+ age * annee + offset(log(popu)), family = poisson)
Je ne comprend pas trop la solution que vous me proposez pour mon premier modele.
Mes taux sont vraiment faibles de l'ordre de 10^-5 .
Et taux=cas/popu
or cas ~Poisson mais je vois mal le taux suivre une loi de Poisson je ne saurais pas vous expliquer pourquoi d'ailleurs...
Vous me dites de faire ainsi:
Citation:
glm(taux ~ -1+ age * annee + offset(log(popu)), family = poisson)
mais dans ce cas mon modele n'est plus taux=alpha(i)+beta(i)*t
mais log(taux/popu)=alpha(i)+beta(i)*t
C'est juste une regression lineaire pour chaque tranche d'age donc je ne devrais pas avoir de log dans mes formules c'est pour ca que je mettrais une fonction de lien identite.
Sinon, je suis allee voir votre fiche sur le AIC.
Alors je ne peux pas comparer les AIC avec les modeles que j'avais au depart en prenant des distributions differentes?
Attention l'AIC n'est pas un critère de qualité de l'ajustement des modèles. La qualité de l'ajustement est un autre domaine. L'AIC est un critère de comparaison de modèles, souvent utilisé pour sélectionner le "meilleur" modèle.
Retourner vers « Archives : Fonctions statistiques »
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité