Це складна проблема. Спочатку я подумав про використання (деякого наближення) функції, що генерує момент, для лонормального розподілу. Як я поясню, це не працює. Але спочатку кілька позначень:
Нехай - стандартна нормальна щільність і Φ відповідна кумулятивна функція розподілу. Проаналізуємо лише випадок логічного нормального розподілу l n N ( 0 , 1 ) , який має функцію щільності
f ( x ) = 1ϕΦl n N( 0 , 1 )
і функція кумулятивного розподілу
F(x)=Φ(lnx)
Припустимо,Xіє незалежними випадковими величинами з вищенаведеним логічним нормальним розподілом. Нас цікавить розподілє. Отже, функція, що генерує момент для
f(x)=12π−−√xe−12(lnx)2
F(x)=Φ(lnx)
XD = X - Y M ( t ) = E e t X X t ∈ ( - ∞ , 0 ] D M D ( t ) = E e t ( X - Y ) = E e t X E e - t Y = M ( t ) M ( - t ) D tYD = X- Y , який є симетричним розподілом із середнім нулем. Нехай виробляє момент функція . Він визначається лише для , тому не визначається у відкритому інтервалі, що містить нуль. Функція генерування моменту для
М( t ) = Eеt XХt ∈ ( - ∞ , 0 ]DМD(t)=Eet(X−Y)=EetXEe−tY=M(t)M(−t)D визначається лише для , тому не дуже корисна.
t=0
Це означає , що нам будуть потрібні більш прямий підхід для знаходження апроксимації для розподілу . Припустимо, , обчислити
(і випадок розв’язується симетрією, отримуємо ). t ≥ 0 P ( D ≤ t )Dt≥0
P(D≤t)=P(X−Y≤t)=∫∞0P(X−y≤t|Y=y)f(y)dy=∫∞0P(X≤t+y)f(y)dy=∫∞0F(t+y)f(y)dy
t<0П( D ≤ t ) = 1 - P( D ≤ | t | )
Цей вираз може бути використаний для чисельної інтеграції або як основа для моделювання. Перший тест:
integrate(function(y) plnorm(y)*dlnorm(y), lower=0, upper=+Inf)
0.5 with absolute error < 2.3e-06
що явно правильно. Давайте завершимо це всередині функції:
pDIFF <- function(t) {
d <- t
for (tt in seq(along=t)) {
if (t[tt] >= 0.0) d[tt] <- integrate(function(y) plnorm(y+t[tt])*dlnorm(y),
lower=0.0, upper=+Inf)$value else
d[tt] <- 1-integrate(function(y) plnorm(y+abs(t[tt]))*dlnorm(y),
lower=0.0, upper=+Inf)$value
}
return(d)
}
> plot(pDIFF, from=-5, to=5)
що дає:
Тоді ми можемо знайти функцію щільності, диференціюючи під цілісним знаком, отримуючи
dDIFF <- function(t) {
d <- t; t<- abs(t)
for (tt in seq(along=t)) {
d[tt] <- integrate(function(y) dlnorm(y+t[tt])*dlnorm(y),
lower=0.0, upper=+Inf)$value
}
return(d)
}
яку ми можемо перевірити:
> integrate(dDIFF, lower=-Inf, upper=+Inf)
0.9999999 with absolute error < 1.3e-05
І будуючи густину, ми отримуємо:
plot(dDIFF, from=-5, to=5)
Я також намагався отримати деяке аналітичне наближення, але поки це не вдалося, це непроста проблема. Але чисельна інтеграція, як зазначено вище, запрограмована в R дуже швидко на сучасному обладнанні, тому є хорошою альтернативою, яку, мабуть, слід використовувати набагато більше.