Este es un problema dificil. Primero pensé en usar (alguna aproximación de) la función generadora de momento de la distribución lognormal. Eso no funciona, como explicaré. Pero primero alguna notación:
Sea la densidad normal estándar y la función de distribución acumulativa correspondiente. Solo analizaremos la distribución lognormal de casos , que tiene la función de densidad
y función de distribución acumulativa
Suponga que e son variables aleatorias independientes con la distribución lognormal anterior. Estamos interesados en la distribución de , que es una distribución simétrica con media cero. Sea la función generadora de momentos deΦ l n N ( 0 , 1 ) f ( x ) = 1ϕΦlnN(0,1)F(x)=Φ(lnx)XYD=X-
f(x)=12π−−√xe−12(lnx)2
F(x)=Φ(lnx)
XYM ( t ) = E e t X X t ∈ ( - ∞ , 0 ] D M D ( t ) = E e t ( X - Y ) = E e t XD=X−YM(t)=EetXX. Se define solo para , por lo que no se define en un intervalo abierto que contenga cero. La función de generación de momentos para es . Entonces, la función generadora de momento para solo se define para , por lo que no es muy útil.
t∈(−∞,0]DMD(t)=Eet(X−Y)=EetXEe−tY=M(t)M(−t)Dt=0
Eso significa que vamos a necesitar algún enfoque más directo para encontrar aproximaciones para la distribución de . Suponga que , calcule
(y el caso se resuelve por simetría, obtenemos ). Dt≥0 t<0P(D≤t)=1-P(D≤|t|)
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<0P(D≤t)=1−P(D≤|t|)
Esta expresión se puede usar para la integración numérica o como base para la simulación. Primero una prueba:
integrate(function(y) plnorm(y)*dlnorm(y), lower=0, upper=+Inf)
0.5 with absolute error < 2.3e-06
Lo cual es claramente correcto. Vamos a resumir esto dentro de una función:
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)
lo que da:
Luego podemos encontrar la función de densidad diferenciando bajo el signo integral, obteniendo
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)
}
que podemos probar:
> integrate(dDIFF, lower=-Inf, upper=+Inf)
0.9999999 with absolute error < 1.3e-05
Y trazando la densidad que obtenemos:
plot(dDIFF, from=-5, to=5)
También intenté obtener una aproximación analítica, pero hasta ahora no tuve éxito, no es un problema fácil. Pero la integración numérica como la anterior, programada en R es muy rápida en el hardware moderno, por lo que es una buena alternativa que probablemente debería usarse mucho más.