Was bedeutet abgeschnittene Verteilung?

14

In einem Forschungsartikel über die Sensitivitätsanalyse eines gewöhnlichen Differentialgleichungsmodells eines dynamischen Systems hat der Autor die Verteilung eines Modellparameters als Normalverteilung (Mittelwert = 1e-4, Standard = 3e-5) angegeben, die auf den Bereich [0,5e abgeschnitten ist -4 1,5e-4]. Anschließend verwendet er Stichproben aus dieser abgeschnittenen Verteilung für Simulationen des Modells. Was bedeutet es, eine abgeschnittene Verteilung zu haben und eine Stichprobe aus dieser abgeschnittenen Verteilung zu erstellen?

Ich könnte mir dazu zwei Möglichkeiten ausdenken:

  • Stichprobe aus einer Normalverteilung, aber ignorieren Sie alle Zufallswerte, die außerhalb des angegebenen Bereichs liegen, bevor Sie mit der Simulation beginnen.
  • Besorgen Sie sich irgendwie eine spezielle "Truncated Normal" -Verteilung und holen Sie sich Samples daraus.

Sind das gültige und gleichwertige Ansätze?

Ich glaube, wenn man im ersten Fall das experimentelle cdf / pdf der Probe plottet, würde es nicht wie eine Normalverteilung aussehen, da die Kurven nicht bis reichen ±.

Kavka
quelle

Antworten:

16

Eine Verteilung abzuschneiden bedeutet, ihre Werte auf ein Intervall zu beschränken und die Dichte so zu normalisieren, dass das Integral über diesen Bereich 1 beträgt.

Die N(μ,σ2) -Verteilung auf ein Intervall (ein,b) kürzen, würde also bedeuten, eine Zufallsvariable mit Dichte zu erzeugen

pein,b(x)=ϕμ,σ2(x)einbϕμ,σ2(y)dyich{x(ein,b)}

wobei ϕμ,σ2(x) die Dichte von N(μ,σ2) ist. Sie können aus dieser Dichte auf verschiedene Weise eine Stichprobe erstellen. Ein Weg (der einfachste Weg, den ich mir vorstellen kann), dies zu tun, wäre, N(μ,σ2) -Werte zu generieren und diejenigen herauszuwerfen, die außerhalb von (ein,b)Intervall, wie Sie erwähnt haben. Ja, diese beiden Kugeln, die Sie aufgelistet haben, würden dasselbe Ziel erreichen. Sie haben auch Recht, dass sich die empirische Dichte (oder das Histogramm) von Variablen aus dieser Verteilung nicht auf erstrecken würde . Es wäre natürlich auf ( a , b ) beschränkt .±(ein,b)

Makro
quelle
17

Das Simulieren von der normalen -Verteilung bis das Ergebnis in ein Intervall ( a , b ) fällt , ist in Ordnung, wenn die Wahrscheinlichkeit ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(ein,b) ist groß genug. Wenn es zu klein ist, ist dieses Verfahren zu kostspielig, da die durchschnittliche Anzahl der Ziehungen für eine Annahme 1 / ϱ beträgt.

ϱ=einbφμ,σ2(x)dx
1/ϱ

Wie in den statistischen Monte-Carlo-Methoden (Kapitel 2, Beispiel 2.2) sowie in meinem Artikel in arXiv beschrieben , besteht eine effizientere Methode zur Simulation dieser verkürzten Normalen in der Verwendung einer Akzeptanz-Zurückweisungsmethode, die auf einer exponentiellen -Verteilung basiert .E(α)

Betrachten Sie ohne Einschränkung der Allgemeinheit den Fall und σ = 1 . Wenn b = + , ist eine mögliche instrumentelle Verteilung die translatierte Exponentialverteilung E ( α , a ) mit der Dichte g α ( z ) = α e - α ( z - a ).μ=0σ=1b=+E(α,ein) Das Verhältnis p a , ( z ) / g α ( z ) α e - α ( z - a ) e - z 2 / 2 wird dann durch begrenzte exp ( α 2 / 2 - α a ) , wenn α > a und exp ( - a 2 / 2 ) anders. Die entsprechende (obere) Schranke ist

Gα(z)=αe-α(z-ein)ichzein.
pein,(z)/Gα(z)e-α(z-ein)e-z2/2
exp(α2/2-αein)α>einexp(-ein2/2) Der erste Ausdruck wird minimiert um α=1
{1/αexp(α2/2-αein)wenn α>ein,1/αexp(-ein2/2)Andernfalls.
während ~ α = a minimiert die zweite gebunden. Die optimale Wahl von α ist daher (1).
α=12ein+12ein2+4,(1)
α~=einα
Xi'an
quelle
2
UUnif(Φ(ein),Φ(b))X=Φ-1(U)
2
ein0
1
Xi'an hat recht, @bnaul. Das Laufen qnormin einer R-Schleife ist keine gute Idee.
Stéphane Laurent
@ Xi'an: Das stimmt, aber solche Funktionen können beliebig genau ausgelegt sein.
Neil G
9

Stichprobe aus einer Normalverteilung, aber ignorieren Sie alle Zufallswerte, die außerhalb des angegebenen Bereichs liegen, bevor Sie mit der Simulation beginnen.

Diese Methode ist richtig, aber, wie von @ Xi'an in seiner Antwort erwähnt, würde es lange dauern, wenn der Bereich klein ist (genauer gesagt, wenn sein Maß unter der Normalverteilung klein ist).

Wie bei jeder anderen Verteilung könnte man die Inversionsmethode verwenden F-1(U)(auch inverse Transformationsabtastung genannt ), wobeiF ist die (kumulative Funktion der) Zinsverteilung und UUnif(0,1). WannF ist die Verteilung, die durch Abschneiden einer Verteilung erhalten wird G in einem gewissen Intervall (ein,b)Dies ist äquivalent zu sample G-1(U) mit UUnif(G(ein),G(b)).

Und dies wird bereits von @ Xi'an in einem Kommentar erwähnt. In manchen Situationen erfordert die Inversionsmethode eine sehr genaue Bewertung der QuantilfunktionG-1, and I would add it also requires a fast computation of G1. When G is a normal distribution, the evaluation of G1 is rather slow, and it is not highly precise for values of a and b outside the "range" of G.

Simulate a truncated distribution using importance sampling

A possibility is to use importance sampling. Consider the case of the standard Gaussian distribution N(0,1). Forget the previous notations, now let G be the Cauchy distribution. The two above mentionned requirements are fulfilled for G : one simply has G(q)=arctan(q)π+12 and G1(q)=tan(π(q12)). Therefore, the truncated Cauchy distribution is easy to sample by the inversion method and it is a good choice of the instrumental variable for importance sampling of the truncated normal distribution.

After a bit of simplifications, sampling UUnif(G(a),G(b)) and taking G1(U) is equivalent to take tan(U) with UUnif(arctan(a),arctan(b)):

a <- 1
b <- 5
nsims <- 10^5
sims <- tan(runif(nsims, atan(a), atan(b)))

Now one has to calculate the weight for each sampled value xi, defined as the ratio ϕ(x)/g(x) of the two densities up to normalization, hence we can take

w(x)=exp(-x2/2)(1+x2),
aber es könnte sicherer sein, die log-gewichte zu nehmen:
log_w <- -sims^2/2 + log1p(sims^2)
w <- exp(log_w) # unnormalized weights
w <- w/sum(w)

Die gewichtete Probe (xich,w(xich)) Ermöglicht die Schätzung des Maßes für jedes Intervall [u,v] unter der Zielverteilung durch Summieren der Gewichte jedes in das Intervall fallenden Stichprobenwertes:

u <- 2; v<- 4
sum(w[sims>u & sims<v])
## [1] 0.1418

Dies liefert eine Schätzung der kumulativen Zielfunktion. Wir können es mit dem spatsatPaket schnell bekommen und plotten :

F <- spatstat::ewcdf(sims,w)
# estimated F:
curve(F(x), from=a-0.1, to=b+0.1)
# true F:
curve((pnorm(x)-pnorm(a))/(pnorm(b)-pnorm(a)), add=TRUE, col="red")

ewcdf

# approximate probability of u<x<v:
F(v)-F(u)
## [1] 0.1418

Natürlich die Probe (xich)ist definitiv keine Stichprobe der Zielverteilung, sondern der instrumentellen Cauchy-Verteilung, und man erhält eine Stichprobe der Zielverteilung , indem man ein gewichtetes Resampling durchführt , beispielsweise unter Verwendung der multinomialen Stichprobe:

msample <- rmultinom(1, nsims, w)[,1]
resims <- rep(sims, times=msample)
hist(resims) 

hist

mean(resims>u & resims<v)
## [1] 0.1446

Eine andere Methode: Schnelle inverse Transformationsabtastung

Olver und Townsend entwickelten eine Stichprobenmethode für eine breite Klasse kontinuierlicher Verteilungen. Es ist in der chebfun2-Bibliothek für Matlab sowie in der ApproxFun-Bibliothek für Julia implementiert . Ich habe diese Bibliothek kürzlich entdeckt und sie klingt sehr vielversprechend (nicht nur für Zufallsstichproben). Grundsätzlich ist dies die Inversionsmethode, jedoch unter Verwendung leistungsfähiger Approximationen von cdf und inversem cdf. Die Eingabe ist die Solldichtefunktion bis zur Normalisierung.

Das Beispiel wird einfach mit folgendem Code generiert:

using ApproxFun
f = Fun(x -> exp(-x.^2./2), [1,5]);
nsims = 10^5;
x = sample(f,nsims);

Wie unten geprüft, ergibt sich ein geschätztes Maß für das Intervall [2,4] in der Nähe der zuvor durch Stichprobenerhebung gewonnenen Bedeutung:

sum((x.>2) & (x.<4))/nsims
## 0.14191
Stéphane Laurent
quelle