NaN, созданный в логистической модели

#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 не одобряет комментарии «спасибо»; если это решит вашу проблему, вам рекомендуется установить флажок, чтобы принять ответ.