Comment gérer l'avertissement «non entier» du GLM binomial négatif?

11

J'essaie de modéliser les intensités moyennes des parasites affectant un hôte dans R en utilisant un modèle binomial négatif. Je reçois toujours 50 avertissements ou plus qui disent:

In dpois(y, mu, log = TRUE) : non-integer x = 251.529000

Comment puis-je gérer cela? Mon code ressemble à ceci:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season, data=MI.df)
Natasha
la source
1
Veuillez ajouter un exemple reproductible pour les personnes avec lesquelles travailler.
gung - Rétablir Monica
5
Un GLiM binomial négatif est une sorte de modèle de comptage. La réponse est censée être un décompte. Un compte , par définition, ne peut pas être une valeur fractionnaire. Avez-vous de telles valeurs?
gung - Réintégrer Monica
1
Pouvez-vous préciser ce que vous entendez par «intensités»? Divisez-vous le nombre d'un parasite par, disons, une superficie pour un hôte?
gung - Réintégrer Monica
1
J'ai des données de comptage, mais j'ai dû calculer les intensités pour tenir compte des différents efforts d'échantillonnage. Je comprends que j'ai besoin de données de comptage là-bas, mais je me demandais simplement s'il y avait une autre façon de travailler avec des nombres non entiers en utilisant le même modèle. Pour les intensités, j'ai divisé le nombre de parasites avec le nombre d'hôtes infectés.
Natasha
2
@Natasha, ne le fais pas. Il est extrêmement probable que la bonne façon de gérer ce problème est, selon la réponse de Gung, avec un décalage. Si vous voulez en être sûr, modifiez votre question pour expliquer un peu plus d'où viennent les intensités d'échantillonnage différentielles. Ces nombres d'hôtes sont-ils différents? Différentes durées d'échantillonnage ou nombre de collecteurs?
Ben Bolker

Réponses:

9

Le binôme négatif est une distribution pour les données de comptage, vous voulez donc vraiment que votre variable de réponse soit un comptage (c'est-à-dire des nombres entiers non négatifs). Cela dit, il convient de tenir compte de "différents efforts d'échantillonnage" (je ne sais pas exactement de quoi vous parlez, mais je comprends l'essentiel). Cependant, vous ne devriez pas essayer de le faire en divisant vos chiffres par un autre nombre. Au lieu de cela, vous devez utiliser cet autre numéro comme décalage . Il y a une belle discussion sur le CV de ce qu'est un décalage ici: Quand utiliser un décalage dans une régression de Poisson? Je suppose que votre modèle devrait être quelque chose comme:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season + offset(log(num.hosts)), 
                data=MI.df)
gung - Réintégrer Monica
la source
Je vous remercie. Je vais essayer et je reviendrai pour vous dire ce que j'ai fait.
Natasha
OT: il me manque quelque chose, qu'est-ce que cela signifie d'avoir de nombreux résultats dans une régression ??
Bakaburg
@Bakaburg, je ne peux pas dire de quoi vous parlez.
gung - Réintégrer Monica
La partie "Larves + Nymphes + Adultes ~" du code.
Bakaburg
1
@Bakaburg, il s'agit du fonctionnement de R. L'addition est élément par élément. L'ajout de 3 vecteurs vous donne un seul vecteur où chaque élément est la somme des 3 éléments correspondants. Pour avoir plusieurs variables de réponse sur le LHS d'une formule R, vous devez utiliser cbind().
gung - Rétablir Monica
4

C'est un avertissement, pas une erreur fatale. glm.nb () attend des comptes comme variable de résultat, qui sont des entiers. Vos données ne sont pas des nombres entiers: 251.529.

R dit "Hmmm ... vous voudrez peut-être vérifier cela et vous assurer que tout va bien, car cela pourrait ne pas sembler bien." Si ma mémoire est correcte, SPSS ne donne pas un tel avertissement.

Si vous êtes sûr d'utiliser le bon modèle, même si vous n'avez pas d'entiers, ignorez-le et continuez.

Jeremy Miles
la source
1
Je sais que c'est un avertissement, je me demandais simplement s'il y avait un moyen de contourner cela. J'ai des entiers, donc j'essayais de voir s'il y avait un moyen de travailler avec des entiers mais en utilisant le même modèle avec un code différent.
Natasha
1
Comment supprimer les avertissements expliqués ici: stackoverflow.com/questions/16194212/…
kjetil b halvorsen
-2

Je suis un parasitologue écologique .. la façon dont vous devez gérer cela est de lier les hôtes qui ont été parasités et ceux qui ne l'ont pas été, puis d'utiliser une distribution binomiale .. voir le code ci-dessous.

Je n'ai pas non plus utilisé de glm avec plus d'une variable y .. alors disons que vous voulez regarder les larves parasitées: vous auriez # de larves qui étaient saines, et le # qui étaient parasitées.

Disons: Lh et Lp

Donc par exemple

parasitizedL = cbind (Lp, Lh) hist (parasitized) #Im devinant que vous pouvez simplement utiliser une distribution binomiale régulière w / glm .. et que vous pourriez ne pas avoir besoin du modèle bin.ial binomial PLarvae1 = glm (parasitizedL ~ B.type + Month + Season, famille = binôme, données = MI.df)

puis faites une réduction du modèle par étapes pour voir lequel de vos facteurs affecte de manière significative le parasitisme ... voir le lien ci-dessous

http://bbolker.github.io/mixedmodels-misc/glmmFAQ.html

Cependant, il semble que vous ayez besoin d'effets aléatoires pour tenir compte de l'échantillonnage répétitif. Il est donc probable que votre effet aléatoire sera (1 | Saison / Mois) ... mais difficile à dire sans connaître vos données

JULIE HOPPER
la source