Cosa significa distribuzione troncata?


14

In un articolo di ricerca sull'analisi di sensibilità di un normale modello di equazione differenziale di un sistema dinamico, l'autore ha fornito la distribuzione di un parametro del modello come distribuzione normale (media = 1e-4, std = 3e-5) troncata nell'intervallo [0,5e -4 1,5e-4]. Quindi utilizza i campioni di questa distribuzione troncata per simulazioni del modello. Che cosa significa avere una distribuzione troncata e un campione da questa distribuzione troncata?

Potrei trovare due modi per farlo:

  • Campione da una distribuzione normale ma ignora tutti i valori casuali che non rientrano nell'intervallo specificato prima delle simulazioni.
  • In qualche modo ottenere una distribuzione speciale "Troncated Normal" e ottenere campioni da essa.

Sono approcci validi ed equivalenti?

Credo nel primo caso, se si dovesse tracciare il cdf / pdf sperimentale del campione, non sembrerebbe una distribuzione normale perché le curve non si estendono a .±

Risposte:


16

Troncare una distribuzione significa limitare i suoi valori a un intervallo e ri-normalizzare la densità in modo che l'integrale su quell'intervallo sia 1.

Quindi, troncare la distribuzione N(μ,σ2) in un intervallo (a,b) sarebbe generare una variabile casuale che ha densità

pa,b(x)=ϕμ,σ2(x)abϕμ,σ2(y)dyI{x(a,b)}

dove è la densità . È possibile campionare da questa densità in diversi modi. Un modo (il modo più semplice a cui riesco a pensare) di farlo sarebbe quello di generare valori e buttare via quelli che non rientrano nell'intervallo , come hai detto. Quindi, sì, quei due proiettili che hai elencato avrebbero raggiunto lo stesso obiettivo. Inoltre, hai ragione nel dire che la densità empirica (o istogramma) delle variabili di questa distribuzione non si estenderebbe a . Sarebbe limitato a , ovviamente.N ( μ , σ 2 ) N ( μ , σ 2 ) ( a , b ) ± ( a , b )ϕμ,σ2(x)N(μ,σ2)N(μ,σ2)(a,b)±(a,b)


17

Simulando dalla normale distribuzione fino a quando il risultato rientra in un intervallo va bene quando la probabilità è abbastanza grande. Se è troppo piccola, questa procedura è troppo costosa poiché il numero medio di pareggi per un'accettazione è .( a , b ) ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(a,b)1 / ϱ

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

Come descritto nei Metodi statistici di Monte Carlo (Capitolo 2, Esempio 2.2), così come nel mio documento arXiv , un modo più efficiente per simulare questo normale troncato è utilizzare un metodo accetta-rifiuta basato su un esponenziale distribuzione.E(α)

Considera, senza perdita di generalità, il caso e . Quando , una potenziale distribuzione strumentale è la distribuzione esponenziale tradotta, , con densità Il rapporto è quindi limitato di se e di contrario. Il limite (superiore) corrispondente è σ = 1 b = + E ( αμ=0σ=1b=+g α ( z ) = α e - α ( z - a )E(α,a)p un , ( z ) / g α ( z ) α e - α ( z - a ) e - z 2 / 2 exp ( α 2 / 2 - α una ) α > un exp ( - un 2 / 2 ) { 1 / α

gα(z)=αeα(za)Iza.
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>aexp(a2/2)α=1
{1/αexp(α2/2αa)if α>a,1/αexp(a2/2)otherwise.
La prima espressione è minimizzata da mentre minimizza il secondo limite. La scelta ottimale di è quindi (1).˜ α = a α
α=12a+12a2+4,(1)
α~=un'α

2
Forse mi manca qualcosa, ma cosa c'è di sbagliato nel prendere semplicemente e lasciare ? Questo non dà la distribuzione desiderata? UUnif(Φ(a),Φ(b))X=Φ-1(U)
bnaul,

2
@bnaul: questo è completamente giusto, essendo basato sulla trasformazione inversa di cdf. Implica tuttavia che la funzione quantile della distribuzione normale sia estremamente precisa. Soprattutto quando è molto più grande di . a0
Xi'an,

1
Xi'an ha ragione, @bnaul. Correre qnormin un ciclo R non è una buona idea.
Stéphane Laurent,

@ Xi'an: è vero, ma tali funzioni possono essere progettate per avere una precisione arbitraria.
Neil G,

9

Campione da una distribuzione normale ma ignora tutti i valori casuali che non rientrano nell'intervallo specificato prima delle simulazioni.

Questo metodo è corretto, ma, come menzionato da @ Xi'an nella sua risposta, ci vorrebbe molto tempo quando l'intervallo è piccolo (più precisamente, quando la sua misura è piccola sotto la distribuzione normale).

Come ogni altra distribuzione, si potrebbe usare il metodo di inversione (chiamato anche campionamento di trasformazione inversa ), dove è la (funzione cumulativa della) distribuzione di interesse e . Quando è la distribuzione ottenuta troncando una parte della distribuzione su un intervallo , questo equivale al campione con .F1(U)FU~Unif(0,1)Fsol(un',B)sol-1(U)U~Unif(sol(un'),sol(B))

Tuttavia, e questo è già menzionato da @ Xi'an in un commento, per alcune situazioni il metodo di inversione richiede una valutazione molto precisa della funzione quantile , e aggiungerei che richiede anche un rapido calcolo di . Quando è una distribuzione normale, la valutazione di è piuttosto lento, e non è molto preciso per valori di e fuori del "range" di .sol-1sol-1solsol-1un'Bsol

Simula una distribuzione troncata utilizzando il campionamento per importanza

Una possibilità è utilizzare il campionamento di importanza . Si consideri il caso della distribuzione gaussiana standard . Dimentica le notazioni precedenti, ora lascia che sia la distribuzione di Cauchy. I due requisiti sopra menzionati sono soddisfatti per : uno ha semplicemente e . Pertanto, la distribuzione troncata di Cauchy è facile da campionare con il metodo di inversione ed è una buona scelta della variabile strumentale per il campionamento di importanza della distribuzione normale troncata.N(0,1)solsolsol(q)=arctan(q)π+12sol-1(q)=abbronzatura(π(q-12))

Dopo un po 'di semplificazioni, campionare e prendere equivale a prendere con :U~Unif(sol(un'),sol(B))sol-1(U)abbronzatura(U')U'~Unif(arctan(un'),arctan(B))

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

Ora si deve calcolare il peso per ciascun valore campionato , definito come il rapporto delle due densità fino alla normalizzazione, quindi possiamo prendere ma potrebbe essere più sicuro prendere i pesi del log:Xioφ(X)/g(X)

w(X)=exp(-X2/2)(1+X2),
log_w <- -sims^2/2 + log1p(sims^2)
w <- exp(log_w) # unnormalized weights
w <- w/sum(w)

Il campione ponderato consente di stimare la misura di ogni intervallo sotto la distribuzione target, sommando i pesi di ciascun valore campionato che rientra nell'intervallo:(Xio,w(Xio))[u,v]

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

Ciò fornisce una stima della funzione cumulativa di destinazione. Possiamo rapidamente ottenerlo e tracciarlo con il spatsatpacchetto:

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

Ovviamente, il campione è sicuramente un campione della distribuzione target, ma della distribuzione strumentale di Cauchy, e si ottiene un campione della distribuzione target eseguendo un ricampionamento ponderato , ad esempio usando il campionamento multinomiale:(Xio)

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

hist

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

Un altro metodo: campionamento rapido della trasformata inversa

Olver e Townsend hanno sviluppato un metodo di campionamento per un'ampia classe di distribuzione continua. È implementato nella libreria chebfun2 per Matlab e nella libreria ApproxFun per Julia . Ho scoperto di recente questa libreria e sembra molto promettente (non solo per il campionamento casuale). Fondamentalmente questo è il metodo di inversione, ma usando potenti approssimazioni del cdf e del cdf inverso. L'input è la funzione di densità target fino alla normalizzazione.

L'esempio è semplicemente generato dal seguente codice:

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

Come verificato di seguito, fornisce una misura stimata dell'intervallo vicino a quello precedentemente ottenuto dal campionamento per importanza:[2,4]

sum((x.>2) & (x.<4))/nsims
## 0.14191
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.