2016-11-21 1 views
1

J'ai des problèmes pour exécuter des modèles binomiaux négatifs. Fondamentalement, j'ai un ensemble de données avec des comptes d'animaux. Cependant, l'effort est différent et donc je peux calculer le taux d'animaux par jour. Je le fais avec un assez grand ensemble de données (> 100000 observations). Je suis assez surpris de ne pas pouvoir trouver d'autres sujets qui couvraient ma question, si vous en connaissez un: cela serait utile!Utilisation de non-entiers et d'entiers: avertissements avec des non-entiers mais le modèle ne fonctionnera pas avec des entiers

Lorsque j'essaie d'adapter un modèle à mes données, je rencontre des problèmes. Soit je lance un modèle binomial négatif avec les taux

> m1<-glm.nb(Rates ~ Par1+Par2+...+Par7+Par8,data=data) 

puis-je obtenir les messages d'avertissement suivants:

>Warning messages: 
1: In dpois(y, mu, log = TRUE) : non-integer x = 25.913718 
2: In dpois(y, mu, log = TRUE) : non-integer x = 5.457385 
3: In dpois(y, mu, log = TRUE) : non-integer x = 2.195133 
4: In dpois(y, mu, log = TRUE) : non-integer x = 2.721088 
5: In dpois(y, mu, log = TRUE) : non-integer x = 6.971678 
6: In dpois(y, mu, log = TRUE) : non-integer x = 21.863799 
7: In dpois(y, mu, log = TRUE) : non-integer x = 5.300733 
8: In dpois(y, mu, log = TRUE) : non-integer x = 7.157865 
9: In dpois(y, mu, log = TRUE) : non-integer x = 14.117588 
10: In dpois(y, mu, log = TRUE) : non-integer x = 6.505993, etc. 

Ou je lance le modèle avec un

décalage
> m2<-glm.nb(Count ~ Par1+Par2+...+Par7+Par8+offset(Effort),data=data) 

Cependant, cela donne l'erreur suivante:

> Error: no valid set of coefficients has been found: please supply starting values 
In addition: Warning messages: 
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted rates numerically 0 occurred 

J'ai déjà essayé de fournir les coefficients du premier modèle comme coefficients de départ pour le second, mais cela ne marchera pas. En utilisant également le paquet pscl ne fonctionne pas, ou en augmentant la quantité d'itérations. C'est un sous-ensemble de mes données (une espèce) avec très peu de zéros.

Des suggestions? Je pense que la deuxième façon de modéliser est la bonne façon de le faire, mais je ne sais pas comment faire fonctionner ce modèle. Des idées? Serait très apprécié.

Répondre

1

Vous voulez certainement l'un des éléments suivants, en supposant Rates = Count/Effort. Soit placer le taux, et d'utiliser l'effort comme une variable de pondération:

glm.nb(Rates ~ *, weights=Effort, data=data) 

Ou, monter les comptes et le journal d'utilisation (effort) comme un décalage:

glm.nb(Count ~ * + offset(log(Effort)), data=data) 

Voir aussi my answer on CrossValidated sur les compensations dans les modèles binomiaux poisson/négatif.

+0

Donc, juste pour ma propre compréhension: puisque vous regardez le journal de la variable de réponse, vous devez également modéliser le journal de l'offset? La deuxième méthode semble fonctionner parfaitement, aucun avertissement et aucun problème d'exécution du modèle. Merci beaucoup! – Tommele

+0

C'est vrai. Les deux formulations sont équivalentes, donc la première méthode devrait également fonctionner. –

+0

Ok, parfait. Pour une raison quelconque, la première méthode me donne un résultat différent avec des p-valeurs extrêmement basses. Peut-être cela a-t-il à voir avec une distribution binomiale négative, et glm.nb devant trouver thêta en premier? – Tommele