Que signifie la distribution tronquée?

14

Dans un article de recherche sur l'analyse de sensibilité d'un modèle d'équation différentielle ordinaire d'un système dynamique, l'auteur a fourni la distribution d'un paramètre de modèle en tant que distribution normale (moyenne = 1e-4, std = 3e-5) tronquée à la plage [0,5e -4 1,5e-4]. Il utilise ensuite des échantillons de cette distribution tronquée pour des simulations du modèle. Que signifie avoir une distribution tronquée et un échantillon de cette distribution tronquée?

Je pourrais trouver deux façons de procéder:

  • Échantillonner à partir d'une distribution normale mais ignorer toutes les valeurs aléatoires tombant en dehors de la plage spécifiée avant les simulations.
  • D'une manière ou d'une autre, obtenez une distribution spéciale "Normal tronqué" et obtenez-en des échantillons.

Ces approches sont-elles valides et équivalentes?

Je crois que dans le premier cas, si l'on devait tracer le cdf / pdf expérimental de l'échantillon, cela ne ressemblerait pas à une distribution normale car les courbes ne s'étendent pas à ± .

Kavka
la source

Réponses:

16

Tronquer une distribution revient à restreindre ses valeurs à un intervalle et à normaliser à nouveau la densité de sorte que l'intégrale sur cette plage soit 1.

Donc, tronquer la distribution à un intervalle reviendrait à générer une variable aléatoire de densitéN(μ,σ2)(a,b)

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

ϕμ,σ2(x) est la densité N(μ,σ2) . Vous pouvez échantillonner à partir de cette densité de plusieurs façons. Une façon (la façon la plus simple à laquelle je peux penser) de le faire serait de générer N(μ,σ2) valeurs et de jeter celles qui se situent en dehors des (a,b)intervalle, comme vous l'avez mentionné. Donc, oui, ces deux balles que vous avez énumérées atteindraient le même objectif. De plus, vous avez raison de dire que la densité empirique (ou histogramme) des variables de cette distribution ne s'étendrait pas à ± . Il serait limité à (a,b) , bien sûr.

Macro
la source
17

La simulation à partir de la distribution normale de jusqu'à ce que le résultat tombe dans un intervalle ( a , b ) est correcte lorsque la probabilité ϱ = b a φ μ , σ 2 ( x )N(μ,σ2)(a,b) est assez grand. S'il est trop petit, cette procédure est trop coûteuse car le nombre moyen de tirages pour une acceptation est de 1 / ϱ .

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

Comme décrit dans Monte Carlo Statistical Methods (Chapitre 2, Exemple 2.2), ainsi que dans mon article arXiv , un moyen plus efficace de simuler cette normale tronquée consiste à utiliser une méthode d'acceptation-rejet basée sur une distribution exponentielle .E(α)

Considérons, sans perte de généralité, le cas et σ = 1 . Lorsque b = + , une distribution instrumentale potentielle est la distribution exponentielle traduite, E ( α , a ) , avec une densité g α ( z ) = α e - α ( z - a )μ=0σ=1b=+E(α,a) Le rapport p a , ( z ) / g α ( z ) α e - α ( z - a ) e - z 2 / 2 est alors délimitée par exp ( α 2 / 2 - α a ) si α > a et par exp ( - a deux / deux ) autrement. La limite (supérieure) correspondante est

gα(z)=αeα(za)Iza.
pa,(z)/gα(z)eα(za)ez2/2
exp(α2/2αa)α>aexp(a2/2) La première expression est minimisée par α=1
{1/αexp(α2/2αa)if α>a,1/αexp(a2/2)autrement.
alors que ˜ α = a minimise la deuxième borne. Le choix optimal de α est donc (1).
α=12une+12une2+4,(1)
α~=uneα
Xi'an
la source
2
Je peux manquer quelque chose, mais ce qui ne va pas avec juste prendre et laisser X = Φ - 1 ( U ) ? Cela ne donne-t-il pas la distribution souhaitée? UUnif(Φ(a),Φ(b))X=Φ1(U)
bnaul
2
a0
1
Xi'an a raison, @bnaul. Courir qnormdans une boucle R n'est pas une bonne idée.
Stéphane Laurent
@ Xi'an: C'est vrai, mais ces fonctions peuvent être conçues pour avoir une précision arbitraire.
Neil G
9

Échantillonner à partir d'une distribution normale mais ignorer toutes les valeurs aléatoires tombant en dehors de la plage spécifiée avant les simulations.

Cette méthode est correcte, mais, comme l'a mentionné @ Xi'an dans sa réponse, cela prendrait beaucoup de temps lorsque la plage est petite (plus précisément, lorsque sa mesure est petite sous la distribution normale).

F1(U)FUUnif(0,1)FG(a,b)G1(U)UUnif(G(a),G(b))

G1G1GG1abG

Simuler une distribution tronquée à l'aide d'un échantillonnage d'importance

N(0,1)GGG(q)=arctan(q)π+12G1(q)=tan(π(q12))

UUnif(G(a),G(b))G1(U)tan(U)UUnif(arctan(a),arctan(b))

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

xiϕ(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)

(Xje,w(Xje))[u,v]

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

Cela fournit une estimation de la fonction cumulative cible. Nous pouvons rapidement l'obtenir et le tracer avec le spatsatpackage:

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

(Xje)

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

hist

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

Une autre méthode: l'échantillonnage à transformée inverse rapide

Olver et Townsend ont développé une méthode d'échantillonnage pour une large classe de distribution continue. Il est implémenté dans la bibliothèque chebfun2 pour Matlab ainsi que dans la bibliothèque ApproxFun pour Julia . J'ai récemment découvert cette bibliothèque et elle semble très prometteuse (pas seulement pour un échantillonnage aléatoire). Fondamentalement, c'est la méthode d'inversion, mais en utilisant des approximations puissantes du cdf et du cdf inverse. L'entrée est la fonction de densité cible jusqu'à la normalisation.

L'exemple est simplement généré par le code suivant:

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

[2,4]

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