Glm, décimales et poissons

Voir le sujet précédent Voir le sujet suivant Aller en bas

Glm, décimales et poissons

Message par Poisson le Lun 12 Mai 2014 - 13:56

Bonjour à toutes et à tous,

Je travaille actuellement sur les poissons migrateurs, dont l’anguille, et je cherche à déterminer l’évolution des populations dans divers cours d’eau.
H0 : la population est stable
H1 : la population présente des tendances (positives ou négatives)
Pour ce faire, j’ai à disposition un jeu de données collectées par d’autres professionnels. Il s’agit de comptages réalisés sur divers stations. Le problème étant que ces comptages n’étaient pas prévus pour mon étude (!).
Je me retrouve avec des échantillonnages réalisés sur 1000m² certaines années et 2000m² d’autres années, sur la même station. Fort heureusement la densité (nombre de poisson pour 100m²) est indiquée et c’est sur celle-ci que je compte me baser tout en gardant à l’esprit que des biais existent.

Jeu de données:

J’ai pensé à réaliser un glm avec une loi de poisson pour connaître l’évolution de la densité au fil des années. Mais R ne l’entends pas de cette oreille et me donne des warnings car les valeurs sont des décimales alors que la loi de poisson est prévue pour les entiers.

"in aic (y, n, mu, weights, dev) : non integer x = 17.110000"

Mais le problème c’est que je ne vois pas bien ce que je pourrais faire d’autre. J’ai pensé à tout bêtement supprimer les virgules pour obtenir des entiers (exemple : 0,17 → 17 ou 31,84--> 3184) ou à utiliser la troncature (31,84 → 31) mais je me demande si une telle « tricherie » est correcte et n’amène pas des biais supplémentaire.

J’ai trois solutions à mon problème entre lesquelles j’ai du mal à me décider :
1) Je reste sur le glm de poisson sans modifier mes données
2) Je reste sur le glm de poisson mais je transforme mes données en entiers
3) Je dois utiliser une autre méthode, auquel cas, pourriez vous me conseiller ? (mes connaissances s’arrêtent aux lois normales, binomiales et logistiques mais elles ne me semblent pas correspondre à la situation)

Je précise que le test de Shapiro m’indique que mes données suivent une loi normale ce qui impliquerait de faire un modèle linéaire tout simple mais je ne sais pas si je peux m’y fier. Il n’y a pas beaucoup de données et je sais que le test n’est sensible qu’à de gros écarts à la loi normale lorsque les données sont peu nombreuses, donc il pourrait être une mauvaise indication.

En vous remerciant par avance.

Poisson

Nombre de messages : 6
Date d'inscription : 12/05/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par droopy le Lun 12 Mai 2014 - 15:12

Bonjour,

il n'est pas anodin que tu recoives ce message, une distribution de poisson est faite pour des comptages, donc une distribution discrètes des données ce qui n'est pas le cas d'une densité. Si tu cherches réellement à modéliser cette dernière à partir d'un glm et une distribution d'erreur de poisson alors il te faut conserver les effectifs et passer la surface de pêche en offset (variable de contrôle dont le coefficient est de 1).
Code:
glm(eff~X1+X2, offset=log(surface), ..., family=poisson()) # ou
glm(eff~offset(log(surface))+..., family=poisson())

Poses toi la question de pourquoi une distribution de poisson (et stp nous dit pas parce que tu travailles de dessus Smile)

Cdlt

droopy

Nombre de messages : 985
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par Poisson le Mar 13 Mai 2014 - 12:14

Parce que je travaille dessus

S'agissant de comptages sur plusieurs années, les données sont positives et discrètes donc j'avais tout naturellement pensé à une loi de poisson.
La densité n'est effectivement pas discrète mais elle est dérivée de ces comptages, donc j'émettais l'hypothèse que sa distribution reste inchangée.
Et c'est pourquoi je me disais qu'il serait peut-être raisonnable de simplement retirer les décimales. Après tout quand on y réfléchit, 17,11 veut dire qu'il y a 17 anguilles pour 100m². Enfin, pas exactement, mais vous voyez l'idée.

Par contre je ne connaissais pas l'offset. J'ai essayé sur mes données et cela me paraît effectivement plus fiable qu'un glm de poisson avec des décimales. Cela consiste en quoi? R l'utilise pour transformer les comptages en densité justement? La crainte que j'ai par rapport à mes données est le fort risque de biais à cause de la diversité des surfaces sur lesquelles furent réalisés les comptages. L'offset est-il suffisamment puissant pour palier ce genre de désagrément pour les cas les plus extrêmes?

Par extrême, j'entends cela :

Spoiler:

La densité varie mais cela est du, non pas au nombre de poisson pêché, mais à la surface de pêche! Je m'étais résigné à utiliser ces comptages à cause du biais mais si l'offset est suffisamment puissant, elles seront peut-être utilisables.

Poisson

Nombre de messages : 6
Date d'inscription : 12/05/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par droopy le Mer 14 Mai 2014 - 13:46

Oui mais comme tu le dis le comptage c'est bien les effectifs, les densités bien que dérivées de données de comptage ne sont plus des variables discrètes. Retirer les décimale n'a pas de sens non plus, car ça reste un nombre d'individus pour une surface donnée et non pas juste un nombre d'individus.

L'offset consiste à donner à une variable un coefficient de 1.
Donc tu vas expliquer le log(eff) en fonction du log(aire) et des années tu vas avoir : log(eff) = log(aire) + a +b*date
donc log(eff)-log(aire) = a + b*date et encore log(eff/aire) = a + b*date

cdlt

droopy

Nombre de messages : 985
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par Poisson le Mar 3 Juin 2014 - 10:04

Bonjour

J'aurais une autre question. Je prévois de prendre en compte la surdispersion de mes données. Les moyens les plus connus, selon mes recherches, sont la quasi-poisson et la loi binomiale négative.

Le problème est que l'offset ne fonctionne pas avec la loi binomiale négative.
Je précise que j'utilise le code glm.nb de la library MASS et que j'ai essayé d'intégrer l'offset, sous forme log, et cela n'a pas fonctionné. R m'explique que les arguments de l'offset n'ont pas été utilisés.

Donc mes questions seraient :

1) Comment intégrer un offset à une loi binomiale négative si cela est possible, sinon quelles autres lois que celles que j'ai déjà énoncées seraient à même de répondre à mes exigences?
2) Comment savoir quel modèle prenant en compte la surdispersion est le plus adapté?

Cdlt

Poisson

Nombre de messages : 6
Date d'inscription : 12/05/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par droopy le Mar 3 Juin 2014 - 12:24

Bonjour,

Poisson a écrit:Le problème est que l'offset ne fonctionne pas avec la loi binomiale négative.
Il n'y a aucune raison pour que ça ne fonctionne pas. Par contre les deux synthaxes ne fonctionnent pas avec glm.nb, seule celle-ci te donnera des résultats adéquats :
Code:
glm.nb(eff~offset(log(surface))+...)
Cdlt

droopy

Nombre de messages : 985
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par Poisson le Mar 3 Juin 2014 - 13:20

J'ai utilisé votre synthaxe, cependant un message d'erreur apparaît :
1 : In theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace = control$trace > :
nombre limite d'iterations atteint
2 : In theta.ml (Y, mu, sum(w), w, limit = control$maxit, trace = control$face > :
nombre limite d'iterations atteint

Une recherche rapide m'indique que tetha est le paramètre de dispersion et que le message d'erreur indique en fait que son estimation n'est pas complètement fiable. Y a-t-il une dernière formule à intégrer dans le modèle de manière à résoudre ce type de problème?

Cdlt

Poisson

Nombre de messages : 6
Date d'inscription : 12/05/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par droopy le Mer 4 Juin 2014 - 6:24

Code:
glm.nb(eff~offset(log(surface))+..., ..., control=glm.control(maxit = 200))

droopy

Nombre de messages : 985
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par Poisson le Mer 4 Juin 2014 - 9:32

Cela fonctionne. Merci à vous Droopy pour votre patience et vos conseils avisés  Very Happy 

Poisson

Nombre de messages : 6
Date d'inscription : 12/05/2014

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Glm, décimales et poissons

Message par Contenu sponsorisé Aujourd'hui à 18:08


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum