Generieren Sie identisch verteilte abhängige normale Zufallszahlen mit einer vorgegebenen Summe

7

Wie generiere ich identisch verteilte, aber nicht unabhängige normale Zufallszahlen, so dass ihre Summe mit der Wahrscheinlichkeit in ein vorgegebenes Intervall fällt ?n[a,b]p

(Diese Frage wird durch die Erzeugung eines zufälligen Spaziergangs motiviert, der an einem vorgegebenen Punkt endet: Zufälliger Prozess, der doch nicht so zufällig ist (deterministisch) . Da eine kontinuierliche Zufallsvariable keine Wahrscheinlichkeit hat, eine genaue Zahl zu erreichen, tun wir das zweitbeste und Bitten Sie um ein ganzes Intervall.)


BEARBEITEN: Das Generieren von Stichproben aus der singulären Gaußschen Verteilung wurde als Duplikat vorgeschlagen, das wiederum als Duplikat von Generieren normalverteilter Zufallszahlen mit nicht positiv definierter Kovarianzmatrix geschlossen wird . Ich bin damit einverstanden, dass beide hilfreich sind. Bei der aktuellen Frage (genauer gesagt bei der Antwort) geht es jedoch erstens darum, herauszufinden, dass wir eine multivariate Normalverteilung verwenden können, um die Frage zu beantworten, und zweitens, welche Art von Kovarianzmatrix funktioniert. Das Abtasten aus einer Distribution mit dieser Kovarianz ist ein dritter Schritt, bei dem die verknüpften Threads hilfreich sind.

Stephan Kolassa
quelle
2
siehe auch die Literatur über Brownsche Brücken ?
Ben Bolker
@ BenBolker: Das klingt nach einer viel besseren Idee als meine. Möchten Sie eine Antwort schreiben?
Stephan Kolassa
Vielleicht komme ich dazu, aber jeder andere, der dies liest, sollte sich frei fühlen, einzuspringen und eine Antwort zu schreiben. Es macht mir nichts aus.
Ben Bolker
1
(Sorry, natürlich meine ich "BB-BB".)
Stephan Kolassa

Antworten:

7

Wir werden multivariate Normalen mit und erzeugen, so dass ihre Summe erfüllt unser Zustand. Sei .XMN(μ,Σ)μRnΣRn×nZ=X1++Xn

Als gemeinsames Mittel wählen wir

μ1==μn=a+b2n.

Damit mit der Wahrscheinlichkeit seine Standardabweichung erfülltZ[a,b]p

σZ=baqα,

Dabei ist das normale Standardquantil für die Ebene , hier .qααα=11p2

Wir müssen jetzt angeben . Wir haben hier viel Spielraum. Nehmen wir an, wir wollen, dass die Varianz jedes und die Kovarianz für . Der Schlüssel zum Erstellen eines "guten" ist diese vorherige Antwort von Wahrscheinlichkeitslogik . Es ergibt sich, dass die Summe unserer s Varianz hatΣXiσ2cov(Xi,Xj)=τijΣXi

nσ2+n(n1)τ

also brauchen wir das

nσ2+n(n1)τ=baqα.

Wir müssen auch sicherstellen, dass definitiv positiv ist, aber dies ist nicht übermäßig schwierig. Der einfachste Weg, dies zu tun, besteht darin, sicherzustellen, dass alle Einträge in positiv sind, z. B. durch FestlegenΣΣ

σ2:=σZ22n,τ:=σZ22n(n1),

Dies ergibt jedoch sehr kleine Werte und sehr langweilige kumulative Summen und Flugbahnen:

langweilig

Weniger langweilig ist zu setzen

σ2:=1,τ:=1n1(σZ2nσ2),

was viel interessantere Flugbahnen ergibt:

interessant

Beachten Sie, dass das Setzen dieser tatsächlich eine gültige Kovarianzmatrix ergibt, da dann die Form , nämlichΣΣij=m(ij)

m(0)=σ2,m(j)=τ for j>0,

und das haben wir

j>0|m(j)|=(n1)|τ|=|σZ2nσ2|=|σZ2n1|<1=σ2=m(0),

Dies ist eine ausreichende Bedingung, damit von Wikipedia streng positiv bestimmt wird (Punkt 7 unter "Weitere Eigenschaften" ).Σ

R-Code unten, aber bitte gehen Sie zuerst und stimmen Sie der Antwort von Wahrscheinlichkeitslogik zu .

n_steps <- 1000
target_min <- 1.99
target_max <- 2.01
target_prob <- 0.99

target_mean <- mean(c(target_min,target_max))
target_sd <- (target_max-target_mean)/qnorm(p=1-(1-target_prob)/2)

mm <- rep(target_mean/n_steps,n_steps)

# boring setting:
# sigma_sq <- target_sd^2/(2*n_steps)
# tau <- target_sd^2/(2*n_steps*(n_steps-1))

sigma_sq <- 1
tau <- (target_sd^2/n_steps-sigma_sq)/(n_steps-1)

CC <- matrix(tau,nrow=n_steps,ncol=n_steps)
diag(CC) <- sigma_sq

library(MASS)
foo <- mvrnorm(1,mu=mm,Sigma=CC)
sum(foo)

plot(cumsum(foo),type="l",xlab="",ylab="")
abline(h=target_mean,lty=2)
Stephan Kolassa
quelle