2017-06-21 2 views
2

IntroGamma GLM: NaN erreurs de production et de divergence

Je suis en train de construire un GLM qui modélise la quantité (masse) d'œufs les spécimens d'une population de poissons Lays en fonction de sa taille et de l'âge .

Ainsi, les variables sont:

  • eggW: la masse totale des œufs pondus, une variable continue et positive comprise entre 300 et 30000.

  • fishW: masse du poisson, continue et positif, compris entre 3 et 55.

  • age: soit 1 ou 2 ans.

Non 0, pas de NA. Après avoir vérifié et réalisé qu'en supposant qu'une distribution normale n'était probablement pas appropriée, j'ai décidé d'utiliser une distribution Gamma. J'ai choisi Gamma essentiellement parce que la variable était positive et continue, avec une variance croissante avec des valeurs plus élevées et semblait être asymétrique, comme vous pouvez le voir dans l'image ci-dessous.

distribution de fréquence des valeurs EGGW: enter image description here

fishW vs EGGW: enter image description here

Le code

myglm <- glm(eggW ~ fishW * age, family=Gamma(link=identity), 
start=c(mean(data$eggW),1,1,1), 
maxit=100) 

j'ai ajouté le facteur maxit après l'avoir vu proposé un poste de cette page comme une solution à l'erreur glm.fit: algorithm did not converge, et cela a fonctionné.

J'ai choisi de travailler avec link=identity en raison de l'interprétation plus évidente et plus directe des résultats en termes biologiques plutôt qu'en utilisant un lien inverse ou log.

Ainsi, le code ci-dessus donne le message suivant:

Les messages d'avertissement:
1: Dans log (ifelse (y == 0, 1, y/mu)): NaN produit
2 : pas de progression tronquée en raison de la divergence

important, aucun avertissement d'erreur sont indiqués si la fishW variable est abandonné et que l'âge est conservé. Les erreurs sont signalées si un lien log est utilisé.

Questions

Si la raison d'être la conception de mon modèle est acceptable, je voudrais comprendre pourquoi ces erreurs sont signalées et comment résoudre ou de les éviter. En tout cas, j'apprécierais toute critique ou suggestion.

+0

S'il vous plaît, pourriez-vous poster la corrélation entre '' eggW' et fishW'? –

+0

Est-ce que cette deuxième intrigue est suffisante? –

+1

Gamma GLM avec lien de connexion est tout à fait interprétable. –

Répondre

0

Vous cherchez à déterminer le poids des oeufs en fonction de l'âge et du poids du poisson? Je pense que vous devez utiliser:

glm(eggW ~ fishW + age, family=Gamma(link=identity) 

Au lieu de

glm(eggW ~ fishW * age, family=Gamma(link=identity) 
+0

Au moins au début je préférerais modéliser l'interaction complète. Cependant, même si j'applique ce changement, j'obtiens encore plus d'avertissements (les deux messages se répètent 25 fois et une erreur "algorithme ne converge pas"). –

0
  1. Est-ce que votre ensemble de données ont des valeurs manquantes?
  2. Vos variables sont-elles fortement corrélées?
  3. tour fishW * âge dans une colonne séparée et passer juste que l'algo
+0

1. Aucune des valeurs manquantes 2. Pas mal de correlaion: -fishW vs EGGW 0,88 - EGGW vs âge 0,58 -fishW vs âge 0,62 (indice Spearman) 3. Les mêmes erreurs sont signalées si je ceci séparément. –