«Странное» поведение функции интегрирования с truncdist в R - PullRequest
1 голос
/ 26 февраля 2020

Математически следующее невозможно для

library(truncdist)
q = function(x, L, R ) dtrunc(x, "exp", rate=0.1, a=L,b=R) 
integrate(q, L=2, R=3, lower  =0, upper = 27 )
integrate(q, L=2, R=3, lower  =0, upper = 29 )
integrate(q, L=2, R=3, lower  =27, upper = 29 )
integrate(q, L=2, R=3, lower  =0, upper = 30 )

Мы нашли первый интеграл, дающий положительное число, второй, оценивающий в ноль, добавляя третий интервал, который интегрируется в ноль. Это проблема в integrate или truncdist?

Чтобы найти больше таких проблем, мы можем использовать следующее

z=numeric()
for(i in 1:50){
  z[i]=integrate(q, L=2, R=3, lower  =0, upper = i)$value
}

Что мне нужно сделать, чтобы найти правильные интегралы ( какие все равны 1 при интегрировании от 0 до i>=3)?

1 Ответ

1 голос
/ 26 февраля 2020

С help("integrate"):

Как и все процедуры численного интегрирования, они оценивают функцию по конечному набору точек. Если функция приблизительно постоянна (в частности, равна нулю) практически во всем диапазоне, возможно, что результат и оценка ошибки могут быть серьезно неверными.

Вы нашли пример этого:

curve(q(x, 2, 3), from = -1, to = 30)

resulting plot

Не следует численно интегрировать функции плотности распределения. Используйте накопительную функцию распределения:

diff(ptrunc(c(0, 29), "exp", rate = 0.1, a = 2, b = 3))
#[1] 1
...