2017-02-12 19 views
0

입니다. 최대 우도 추정량에 대해 연구 중이며 매개 변수 중 하나는 digamma 함수를 사용하여 추정됩니다. 나는 방정식을 풀기 위해 uniroot를 사용하려하지만 그렇게 할 수 없다.digamma 함수의 근본 원인은 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) 

이 다음과 같은 오류가 발생합니다 : 여기에 내 코드의

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에 숫자로 된 패키지 (아마도 rootsolve?)가있을 수 있다는 것이 완전히 가능할 수 있습니다. 내가 무엇을 여기에서 놓치고 있는지 명확히하지 않고있다 - 어떤 팁이라도 인정 될 것이다. 감사!

+1

감마 '(0)'정의되지 고려한다. – MichaelChirico

+1

... 또한'dig (0)'은'NaN'을 반환합니다. 커브에서, (0,10) 간격에 루트가 없다는 것이 확실하므로'uniroot'를 사용하는 이유를 모르겠다. – nicola

답변

1

는 다음

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)을 보았습니다. –