2017-02-12 36 views
0

我正在研究最大似然估計器,其中一個參數是使用digamma函數估計的。我試圖用uniroot解決方程,但無法做到這一點。這裏是我的代碼:R中的digamma函數的根

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) 

這將產生以下錯誤:

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 

的第一個錯誤排序使得基於該曲線感,但第二個有我卡住了。我完全有可能誤解如何找到digamma函數的根源,或者在R中有一個數值包(也許是rootolve?),這可能會有所幫助。不知道我錯過了什麼 - 任何提示將不勝感激。謝謝!

+1

'伽馬。 – MichaelChirico

+1

...還有你的'dig(0)'返回'NaN'。從曲線上可以清楚地看出,(0,10)間隔內沒有任何根,所以不要理解爲什麼你使用'uniroot'。 – nicola

回答

1

考慮(0)`沒有定義以下

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,感謝這個例子 - 我應該檢查我的功能更密切,我發現挖根源於區間(-1,0)和(0,+ Inf)。是否有辦法將開放間隔傳遞給uniroot? – sqlck

+0

只需在間隔上分別運行 – MichaelChirico

+0

@sqlck Can你解釋爲什麼dig在(0,+ inf)上有一個根?我不理解它,我確實看到了(-1,0)上的那個。 –