2014-05-20 3 views
4

Je débogue un plus grand ensemble de modèles imbriqués qui ne rencontrent que des problèmes lors de l'optimisation. Au cours du processus de réduction à zéro de ce qui, selon moi, cause les erreurs, j'ai rencontré un comportement inhabituel dans la fonction rpois().rpois génère NA avec de grands moyens (lambda) dans R

Il semble qu'avec de très grandes valeurs moyennes, rpois() renvoie NA au lieu d'une valeur. Ce problème ne génère pas d'avertissement. Voir ci-dessous pour un jeu de code reproductible.

> rpois(1,3000000000) 
[1] NA 

Ma question est double:
1 - pourquoi est-il montre ce comportement (? Est-il une limite maximale de la taille d'un nombre entier pour la fonction rpois) et
2 - est-il un travail autour pour empêcher la génération de NA (même si c'est pour limiter la taille de l'entrée moyenne à une valeur plus petite)?

Je courais 32x version R 3.0.2 dans 64x Windows 7.

+0

Pourquoi utilisez-vous 32bit R sur un système d'exploitation 64 bits? – Roland

Répondre

6

Le problème est que rpois retourne un entier, et il convertit la valeur en NA si la valeur est supérieure à la valeur entière maximale possible (.Machine$integer.max).

rpois(1,.Machine$integer.max/1.00001) 
## [1] 2147428954 
rpois(1,.Machine$integer.max/1) 
## [1] NA 

L'approximation normale doit être incroyablement précis dans ce cas (il est généralement très bien si la moyenne est supérieure à 100!): Si votre moyenne est supérieure à (disons) 0.999*.Machine$integer.max, vous pouvez utiliser round(rnorm(1,mean=lambda,sd=sqrt(lambda)))