C'est un problème difficile. J'ai d'abord pensé à utiliser (une approximation de) la fonction de génération de moment de la distribution lognormale. Cela ne fonctionne pas, comme je vais l'expliquer. Mais d'abord une notation:
Soit la densité normale standard et Φ la fonction de distribution cumulative correspondante. Nous n'analyserons que la distribution log-normale des cas l n N ( 0 , 1 ) , qui a une fonction de densité
f ( x ) = 1ϕΦlnN(0,1)
et fonction de distribution cumulative
F(x)=Φ(lnx)
Supposons queXetYsont des variables aléatoires indépendantes avec la distribution log-normale ci-dessus. Nous nous intéressons à la distribution deD=X-Y, qui est une distribution symétrique à zéro moyen. SoitM(t)=EetXest la fonction de génération de moment deX. Il est défini uniquement pourt
f(x)=12π−−√xe−12(lnx)2
F(x)=Φ(lnx)
XYD=X−YM(t)=EetXX , donc non défini dans un intervalle ouvert contenant zéro. La fonction de génération de moment pour
D est
M D ( t ) = E e t ( X - Y ) = E e t X E e - t Y = M ( t ) M ( - t ) . Ainsi, la fonction de génération de moment pour
D n'est définie que pour
t = 0t∈(−∞,0]DMD(t)=Eet(X−Y)=EetXEe−tY=M(t)M(−t)Dt=0, donc pas très utile.
Cela signifie que nous aurons besoin d' une approche plus directe pour trouver des approximations pour la distribution de . Supposons que t ≥ 0 , calculez
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 est résolu par symétrie, on obtient
P( D ≤ t ) = 1 - P( D ≤ | t | )).
Cette expression peut être utilisée pour l'intégration numérique ou comme base de simulation. D'abord un test:
integrate(function(y) plnorm(y)*dlnorm(y), lower=0, upper=+Inf)
0.5 with absolute error < 2.3e-06
ce qui est clairement correct. Enveloppons cela dans une fonction:
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)
qui donne:
On peut alors trouver la fonction de densité en se différenciant sous le signe intégral, en obtenant
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 nous pouvons tester:
> integrate(dDIFF, lower=-Inf, upper=+Inf)
0.9999999 with absolute error < 1.3e-05
Et en traçant la densité que nous obtenons:
plot(dDIFF, from=-5, to=5)
J'ai également essayé d'obtenir une approximation analytique, mais jusqu'à présent, je n'ai pas réussi, ce n'est pas un problème facile. Mais l'intégration numérique comme ci-dessus, programmée en R est très rapide sur du matériel moderne, c'est donc une bonne alternative qui devrait probablement être beaucoup plus utilisée.