Ich versuche, Übung 3.9.10 auf S. 22 zu lösen . 66 von Ubbo F. Wiersemas "Brownian Motion Calculus" (John Wiley & Sons, 2008) , in dem das stochastische Integral simuliert werden soll
indem zunächst eine Partition von in Teilintervalle verwendet wird und Simulationen des diskreten stochastischen Integrals
für dieses n , wobei dieser Vorgang wiederholt wird, indem n wiederholt auf 2 ^ {11} verdoppelt wird . In der Übung werden die Ergebnisse mit dem Mittelwert und der Varianz der geschlossenen Form des Integrals verglichen, nämlich
\ int_0 ^ 1 B (t) \ dB (t) = \ frac {1} {2} B (1) ^ 2 - \ frac {1} {2},
die 0 bzw. \ frac {1} {2} sind (da B (1) eine normale Standardzufallsvariable ist).
Ich habe eine Simulation in R geschrieben, wie unten gezeigt. Die aus dieser Simulation resultierenden Abweichungen sind jedoch
> v_sim
8 9 10 11
0.4771895 0.4304475 0.5260542 0.4664552
die nicht auf den erwarteten Wert zu konvergieren scheinen . Das gleiche Phänomen wird beobachtet, wenn der Keim auf und geändert wird und wenn die Anzahl der Unterintervalle auf auf erhöht wird . Was mache ich falsch?
NSIMS <- 1000L # number of simulations of the integral for every "level"
LEVELS <- 8L:11L # level n corresponds to 2^n sample points between 0 and 1
SEED <- 1
set.seed(SEED)
sims <- data.frame(simid = 1L:NSIMS) # sims contains one colum per every level.
# The column simid is a dummy column
# intended to avoid an error message
# when columns are added to sims
# on the fly inside the following loop.
# This column is deleted after the loop
# ends.
for (n in LEVELS)
{
nticks <- 2^n # nticks is the number of sample points between 0 and 1
delta <- 1/nticks
ticks <- seq(from = 0, to = 1, by = delta)
std <- sqrt(delta)
sim <- vector(mode = "numeric", length = NSIMS)
for (j in 1L:NSIMS)
{
b <- cumsum(c(0, rnorm(nticks, sd = std))) # b is a simulated
# Brownian motion path
# sampled at the tick
# marks.
integral <- 0
for (i in 1L:(length(b) - 1L))
{
integral <- integral + b[i]*(b[i + 1] - b[i])
}
sim[j] <- integral
}
sims[, as.character(n)] <- sim
}
sims$simid <- NULL
m_sim <- sapply(sims, mean)
v_sim <- sapply(sims, var)
r
probability
simulation
stochastic-processes
brownian
Evan Aad
quelle
quelle
cumsum
anstelle deri
Schleife. Matrix / Apply könnte hier auch dem Datenrahmen / Sapply usw. vorgezogen werden. Dies ist eine sehr gute Übung. Tipps: Geben Sie klar an, was Sie erwarten und warum, finden Sie die gemeinsame Verteilung derAntworten:
Sie haben zwei Abweichungsquellen von 0,5 und nehmen nur Änderungen an einer davon vor. Infolgedessen erwarten Sie nicht die von Ihnen vorgeschlagene Konvergenz. [Stattdessen würde man im kleinsten Fall eine leichte Verbesserung erwartenn Werte, die dann mit zunehmendem Wert im Rauschen verschwinden n des Weiteren.]
Die erste Quelle der Divergenz wird in Ihrer Frage erkannt - die Approximation des kontinuierlichen Prozesses durch eine diskrete Approximation.
Die zweite Quelle ist die zufällige Variation aufgrund der Simulation. Bei einer endlichen Anzahl von Simulationen (b ) erwarten Sie, dass sich die Berechnung der Stichprobenvariation von dem zugrunde liegenden "wahren" Wert unterscheidet, den Sie mit einer bestimmten diskreten Näherung als erhalten würden b→∞ .
Um zu sehen, ob dies tatsächlich das Problem ist, können Sie eine Folge von versuchenn Werte, sagen wir n = 100.1000.10000 (und vielleicht mehr, wenn Sie können) bei jedem n . Alternativ können Sie eine theoretische Varianz der von Ihnen ausgedruckten Mengen (und damit einen Standardfehler) berechnen, anhand derer Sie feststellen können, ob Ihre Ergebnisse eindeutig nicht mit 1/2 übereinstimmen (asn wird groß Sie sollten feststellen, dass die Inkonsistenz schwerer zu erkennen ist, da sie viel größer erfordern würde b zu identifizieren).
quelle
LassenX.ich: = B (tich) [ B (ti + 1) - B (tich) ] zum i = 0 zu n - 1 . Die rv.s.
X.ich sind gaußsch und unabhängig aufgrund der Unabhängigkeit der Inkremente von B ( t ) . AußerdemE (X.ich) = 0 und
v_sim
entsprechenden Elementen
(sofern sie nichtn
klein sind) einfach die Varianzen unabhängiger StichprobenDie Nummern Die Anzahl der Punkte ist hier aufgrund des betrachteten spezifischen Integranden nahezu irrelevant. Die Situation kann mit der Bewertung des nichtstochastischen Integrals verglichen werden∫10td t unter Verwendung der Trapezregel. Das Ergebnis ändert sich nicht, wenn mehr Trapeze verwendet werden. Offensichtlich wären die Dinge anders, wenn ein anderer angepasster Prozess oder eine andere angepasste Funktion als Integrand verwendet würde, ein dichteres Design[tich]]ich
was dann zu einer kleineren Vorspannung führt.
quelle
Um die Konvergenz zu simulieren, simulieren Sie den Mittelwert des quadratischen UNTERSCHIEDS zwischen dem Integral basierend auf n Schritten und dem Integral basierend auf 2n Schritten. Dann das gleiche für die Differenz zwischen den Integralen für 2n Schritte und 4n Schritte. Dann der Unterschied zwischen 4n Schritten und 8n Schritten. Verwenden Sie für alle die gleiche Brownsche Bewegungsbahn (in der Zeiteinheit). Das gleiche Konvergenzmuster kann unter Verwendung der Varianz des UNTERSCHIEDS zwischen den oben erwähnten Integralpaaren gesehen werden. Abschnitt 3.4 meines Buches behandelt dies. Ubbo
quelle
3.9.10 BdB.R.
Integral B.dB
Übung 3.9.10 wie folgt umformulieren:
Löschen Sie Zeile 5 und weiter bis zum Satz von Zeile 8, der mit Wiederholen beginnt
Löschen Sie auch den Satz, der mit Vergleichen beginnt
set.seed (123) # optional; positive Ganzzahlsimulationen <- 1000 # Anzahl der Simulationen
BdB.sim <- Funktion (n) {B.Schritte <- 2 * n # Anzahl der Zeitschritte im Brownschen Bewegungspfad
}}
(n.seq <- c (2 ^ 8, 2 ^ 9, 2 ^ 10,2 ^ 11))
trail <- data.frame (n = NA, double = NA, mean.sq.diff = NA, genau = NA)
für (m in 1: Länge (n.seq)) {out <- BdB.sim (n.seq [m]) trail <- rbind (trail, out)}
Spur [-1,] # zeigt Konvergenz
write.csv (trail [-1,], "3.9.10 BdB convergence.csv", row.names = FALSE) # optional
--------------------------
Ubbo Wiersema 26. Februar 2018
quelle