#r
#r
Вопрос:
Я запускаю функцию, вычисляющую логистическую вероятность. Он отлично работает в Matlab, но в R он генерирует NaN
значения из-за 0*-Inf
возврата NaN
во внутреннем вычислении.
Коды являются
g <- 10
ff <- 4
y <- 1
probs = 1/(1 exp(-g*ff))
llh = sum(y*log(probs) (1-y)*log(1-probs))
когда значение в exp(-g*ff)
слишком мало, probs
оно будет очень близко к 1 и log(1-probs)
будет близко к -Inf и NaN
будет произведено.
Комментарии:
1. можете ли вы привести воспроизводимый пример? Использование
plogis(x, log.p=TRUE)
иplogis(x, lower.tail=FALSE, log.p=TRUE)
для получения log (p) и log (1-p) напрямую, вероятно, решит большинство ваших проблем…2. Привет, Бен, спасибо за твой ответ. Я только что отредактировал вопрос, давайте предположим, что ff = 4, y = 1, тогда llh даст NaN.
Ответ №1:
plogis()
является встроенной функцией в R для логистической функции (это CDF логистического распределения). Использование plogis(g*ff, log.p=TRUE)
для получения логарифмической вероятности и plogis(g*ff, log.p=TRUE, lower.tail=FALSE)
для получения дополнительной логарифмической вероятности должно работать:
llh <- sum(y*plogis(g*ff,log.p=TRUE)
(1-y)*plogis(g*ff, log.p=TRUE, lower.tail=FALSE))
Для менее экстремальных значений (например, g <- 1
) это, похоже, согласуется с вашим подходом.
Комментарии:
1. StackOverflow не одобряет комментарии «спасибо»; если это решит вашу проблему, вам рекомендуется установить флажок, чтобы принять ответ.