2017-02-12 1 views
0

Je travaille sur un estimateur du maximum de vraisemblance, et l'un des paramètres est estimé en utilisant la fonction digamma. J'essaie d'utiliser uniroot pour résoudre l'équation mais je suis incapable de le faire. Voici mon code:Racines de la fonction digamma dans R

dig = function(alpha){ 
    digamma(2 + alpha) - digamma(alpha) - (1/(2+alpha)) + (2/(2+alpha)) 
} 

curve(dig, from = 0, to = 10) 
uniroot(dig, lower = 0, upper = 10) 

Ce produit l'erreur suivante:

Error in uniroot(dig, lower = 0, upper = 10) : f.lower = f(lower) is NA 
In addition: Warning messages: 
1: In digamma(alpha) : NaNs produced 
2: In digamma(alpha) : NaNs produced 

La première fait sorte de sens erreur basée sur la courbe, mais le second a me coincé. Il est tout à fait possible que je ne comprenne pas comment trouver les racines de la fonction digamma, ou qu'il y ait un paquet numérique (peut-être rootsolve?) Dans R qui pourrait aider. Je ne sais pas ce qu'il me manque ici, des conseils seraient appréciés. Merci!

+1

'gamma (0)' est pas défini. – MichaelChirico

+1

... et aussi 'dig (0)' renvoie 'NaN'. De la courbe, il est assez clair qu'il n'y a pas de racine dans l'intervalle (0,10), donc ne comprenez pas pourquoi vous utilisez 'uniroot' – nicola

Répondre

1

Considérons la suite

curve(dig, from = 0.01, to = 10) 
uniroot(dig, lower = 0.01, upper = 10) 

enter image description here

Error in uniroot(dig, lower = 0.01, upper = 10) : f() values at end points not of opposite sign

+0

MichaelChirico, merci pour cet exemple - j'aurais dû vérifier fonctionne de plus près.Je trouve que creuser a des racines dans les intervalles (-1, 0) et (0, + Inf) Y at-il un moyen de passer des intervalles ouverts à uniroot? – sqlck

+0

Il suffit de le courir sur les intervalles séparément – MichaelChirico

+0

@sqlck Can vous expliquez pourquoi dig a une racine sur (0, + inf)? Je ne comprends pas, je vois celui sur (-1, 0) –