Интеграция дистрибуции Logisti c в R - PullRequest
2 голосов
/ 12 июля 2020

Функция плотности вероятности Логисти c распределение $ f (x) = e ^ {- x} (1 + e ^ {- x}) ^ {- 2} $

LL_cdf <- function(x) ((1+exp(-x))^(-1) # cumulative distribution function of logistic distribution

LL_pdf <- function(x) ( (exp(-x))*(1+exp(-x))^-2 ) # Probability density function (pdf) of logistic distribution

Интеграция pdf любого дистрибутива на его поддержку должна быть одной. Мы интегрируем PDF-файл logisti c distribution на его поддержку $ x \ in [- \ infty, \ infty] $ , но он выдает сообщение об ошибке. Мы упоминаем сообщение об ошибке в коде ниже . Почему pdf-файл распределения logisti c не интегрируется поверх его поддержки $ x \ in [- \ infty, \ infty] $ in R ?

integrate( LL_pdf, lower = -Inf, upper = Inf)$value 

Error in integrate(LL_pdf, lower = -Inf, upper = Inf) : 
  non-finite function value

1 Ответ

4 голосов
/ 12 июля 2020

Это связано с вашей реализацией функции плотности, поскольку она производит rat ios типа Inf/Inf = NaN для больших отрицательных значений

> LL_pdf(-1000)
[1] NaN

Реализация функции должна избегать такого рода числовые проблемы (0/0, Inf/Inf).

Решение состоит в том, чтобы реализовать плотность журналов, которая является численно стабильной, и возвращать экспоненту плотности журналов, что позволяет избежать таких проблем:

LL_pdf2 <- Vectorize(function(x){
  log.val <- -x -2*log(1+exp(-x))
  return(exp(log.val))
  })  # Probability density function (pdf) of logistic distribution

Тогда вы получите

> LL_pdf2(-1000)
[1] 0
> 
> integrate( LL_pdf2, lower = -Inf, upper = Inf)$value
[1] 1

. Вы можете сравнить эти результаты с результатами, полученными с помощью dlogis

> dlogis(-1000)
[1] 0
> integrate( dlogis, lower = -Inf, upper = Inf)$value
[1] 1
...