2017-02-12 1 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 есть числовой пакет (возможно, rootolve?), Который может помочь. Не уверен, что мне здесь не хватает - любые советы будут оценены. Благодаря!

+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, спасибо за этот пример - я должен был проверить мой (0, + Inf). Есть ли способ пройти открытые интервалы до uniroot? – sqlck

+0

Просто запустите его по интервалам отдельно – MichaelChirico

+0

@sqlck Can вы объясните, почему у копа есть корень на (0, + inf)? Я не понимаю его. Я вижу его (-1, 0). –

Смежные вопросы