Das ist ein schwieriges Problem. Ich dachte zuerst darüber nach, die Momenterzeugungsfunktion der lognormalen Verteilung zu verwenden (eine Annäherung an diese). Das funktioniert nicht, wie ich erklären werde. Aber zuerst etwas Notation:
Sei die Standardnormaldichte und die entsprechende kumulative Verteilungsfunktion. Wir werden nur die logarithmische Verteilung analysieren , die die Dichtefunktion
und kumulative Verteilungsfunktion
Angenommen, und sind unabhängige Zufallsvariablen mit der obigen logarithmischen Normalverteilung. Wir interessieren uns für die Verteilung von , die eine symmetrische Verteilung mit dem Mittelwert Null ist. Sei die momenterzeugende Funktion von& Phi; L n N ( 0 , 1 ) f ( x ) = 1ϕΦl n N( 0 , 1 )F(x)=Φ(lnx)XYD=X-YM(t)=EetXXt∈(-∞,0]DMD(t)=Eet(X-Y)=EetX
f( x ) = 12 π--√xe- 12( lnx )2
F( x ) = Φ ( lnx )
XY.D = X- YM( t ) = Eet XX. Es ist nur für definiert, also nicht in einem offenen Intervall mit Null definiert. Die Momenterzeugungsfunktion für ist Die Momenterzeugungsfunktion für ist also nur für , also nicht sehr nützlich.
t ∈ ( - ∞ , 0 ]DD t = 0MD( t ) = Eet ( X- Y)= Eet XEe- t Y= M( t ) M( - t )Dt = 0
Das bedeutet, dass wir einen direkteren Ansatz benötigen, um Näherungen für die Verteilung von . Angenommen, , berechne
(und der Fall wird durch Symmetrie gelöst, wir erhalten ). t ≥ 0 P ( D ≤ t )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 | )
Dieser Ausdruck kann zur numerischen Integration oder als Grundlage für die Simulation verwendet werden. Zuerst ein Test:
integrate(function(y) plnorm(y)*dlnorm(y), lower=0, upper=+Inf)
0.5 with absolute error < 2.3e-06
das ist klar richtig. Lassen Sie uns dies in eine Funktion einschließen:
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)
was gibt:
Dann können wir die Dichtefunktion finden, indem wir unter dem Integralzeichen differenzieren und erhalten
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)
}
was wir testen können:
> integrate(dDIFF, lower=-Inf, upper=+Inf)
0.9999999 with absolute error < 1.3e-05
Und zeichnen Sie die Dichte auf, die wir erhalten:
plot(dDIFF, from=-5, to=5)
Ich habe auch versucht, eine analytische Annäherung zu finden, aber bisher ist dies nicht gelungen, es ist kein einfaches Problem. Die in R programmierte numerische Integration ist jedoch auf moderner Hardware sehr schnell und daher eine gute Alternative, die wahrscheinlich viel häufiger verwendet werden sollte.