2017-01-25 4 views
0

Dans Mathematica, il existe une option see this question pour calculer la différence entre deux fonctions d'erreur. Cependant, je ne l'ai pas encore trouvé quelque chose similaire dans R.Différence entre les fonctions d'erreur

je dois calculer des choses comme Erf (1604,041) - Erf (3117,127) et d'obtenir une valeur non nulle ...

+2

R est principalement un système de calcul numérique. Wolfram Alpha donne le résultat à environ 4e-1117421. Cela dépasse de loin la portée de la précision numérique à représenter, et encore moins à calculer. La valeur minimale d'un double est par exemple de 2e-308, par exemple. – James

Répondre

5

Vous pouvez venir près de le résultat de 4e-1117421 donné dans le commentaire par @ James. Tout d'abord, la fonction d'erreur peut être calculée comme ceci dans R:

1 - 2 * pnorm(-sqrt(2) * x) 

Cependant, cela vous donnera des zéros numériques en raison de la précision en virgule flottante. Heureusement, pnorm peut renvoyer le journal des p-values. Vous pouvez ensuite exponentiate à l'aide des numéros de précision arbitraire:

library(Rmpfr) 
2 * exp(mpfr(pnorm(-sqrt(2) * 1604.041, log.p = TRUE), precBits = 32)) - 
    2 * exp(mpfr(pnorm(-sqrt(2) * 3117.127, log.p = TRUE), precBits = 32)) 
#1 'mpfr' number of precision 32 bits 
#[1] 4.2826176801e-1117421 

(. Notez que vous obtenez seulement la précision en virgule flottante pour les valeurs-p-log)

Cependant, je me demande dans quel type d'application d'une telle la précision est nécessaire. C'est essentiellement une valeur nulle.

Editer: Et je viens de découvrir que Rmpfr propose une implémentation de la fonction d'erreur complémentaire. Vous pouvez simplement faire ceci:

erfc(mpfr(3117.127, precBits = 32)) - erfc(mpfr(1604.041, precBits = 32)) 
#1 'mpfr' number of precision 32 bits 
#[1] -4.2854514871e-1117421 
+0

Nice one. J'avais essayé d'utiliser Rmpfr mais j'ai fini par l'écraser! – James

+0

Intégration numérique ... J'ai besoin d'intégrer numériquement le rapport de la différence entre deux fonctions d'erreur qui peuvent prendre ces valeurs –

+0

Je ne crois pas que ce soit la voie à suivre alors. (Et je doute que cela fasse une différence si vous intégrez 0 ou 4e-1117421.) – Roland