Somme des variables aléatoires tronquées normales


8

Supposons que j'ai variables aléatoires normales indépendantesn

X1N(μ1,σ12)X2N(μ2,σ22)XnN(μn,σn2)

et . Comment pourrais-je caractériser la densité de si la distribution de chaque est tronquée à l'intérieur ? En d'autres termes, partir de distributions normales indépendantes , je échantillons qui ne se pas à moins de de chaque moyenne et je les additionne.Oui=X1+X2++XnOuiXje(μje-2σje,μje+2σje)n2σje

En ce moment, je fais cela avec le code R ci-dessous:

x_mu <- c(12, 18, 7)
x_sd <- c(1.5, 2, 0.8)
a <- x_mu - 2 * x_sd
b <- x_mu + 2 * x_sd

samples <- sapply(1:3, function(i) {
  return(rtruncnorm(100000, a[i], b[i], x_mu[i], x_sd[i]))
})

y <- rowSums(samples)

Existe-t-il une méthode pour générer directement la densité de ?Oui


2
Votre question implique que vous connaissez tous les . Est - ce vraiment le cas ou êtes - vous l' estimation eux? Il y a une énorme différence! Par curiosité, pourquoi jetez-vous ces données? Selon vos objectifs, je soupçonne qu'il existe (beaucoup) de meilleures procédures. σje
whuber

Je connais tous les moyens et SD pour mes données, oui.
Devin

7
Je crois que vous pourriez le qualifier de "gâchis". Cet article, jstor.org/stable/2236545 , examine la question avec plus de rigueur scientifique.
Alecos Papadopoulos

2
En dehors de l'approximation via CLT, cela est relativement délicat. Je suppose que si est assez petit, vous pouvez essayer la convolution numérique. n
Glen_b -Reinstate Monica

2
@Silverfish En fonction de la mise en œuvre, de la plate-forme et de la précision d'une grille tolérable, des centaines devraient être correctes (peut-être plus); en plus de la vitesse, cependant, avec suffisamment de termes, vous devez être beaucoup plus prudent sur les détails de la mise en œuvre ou un certain nombre de problèmes numériques peuvent commencer à apparaître.
Glen_b -Reinstate Monica

Réponses:


2

Vous pouvez utiliser l'approximation par les méthodes de point de selle, pour la somme des normales tronquées. Je ne donnerai pas les détails maintenant, vous pouvez consulter ma réponse à la somme générale des distributions Gamma pour obtenir des conseils. Ce dont nous avons besoin, c'est de trouver la fonction de génération de moment pour une normale tronquée, ce qui est facile. Je vais le faire ici pour une normale standard tronquée à±2, qui a une densité

F(X)={1Cϕ(X),|X|20,|X|>2
C=Φ(2)-Φ(-2) ici ϕ(X),Φ(X) sont respectivement la densité et le cdf pour une normale standard.

La fonction de génération de moment peut être calculée comme

M(t)=EetX=1C-22etXϕ(X)X=1Ce12t2[Φ(2-t)-Φ(-2-t)]
puis nous pouvons utiliser des approximations de point de selle.

-3

Je suis curieux de savoir pourquoi, mais oui, il existe un moyen simple de générer le pdf de cette somme de distributions:

## install.packages("truncnorm")
## install.packages("caTools")
library(truncnorm)

x.mu <- c(12, 18, 7)
x.sd <- c(1.5, 2, 0.8)
x.a <- x.mu - 2*x.sd
x.b <- x.mu + 2*x.sd

dmulti <- function(x, a, b, mu, sd)
  rowSums(
    sapply(1:length(mu),
           function(idx)
             dtruncnorm(x, a=a[idx], b=b[idx], mean=mu[idx], sd=sd[idx])))/length(mu)
pmulti <- function(q, a, b, mu, sd)
  rowSums(
    sapply(1:length(mu),
           function(idx)
             ptruncnorm(q, a=a[idx], b=b[idx], mean=mu[idx], sd=sd[idx])))/length(mu)

pointrange <- range(c(x.a, x.b))
pointseq <- seq(pointrange[1], pointrange[2], length.out=100)
## Plot the probability density function
plot(pointseq, dmulti(pointseq, x.a, x.b, x.mu, x.sd),
     type="l")

## Plot the cumulative distribution function
plot(pointseq, pmulti(pointseq, x.a, x.b, x.mu, x.sd),
     type="l")

Si je lis correctement ce code, vous semblez implémenter quelque chose comme un mélange plutôt qu'une sommation. L'intrigue produite par ce code est terriblement incorrecte. Ce n'est même pas une fonction de densité de probabilité valide!
whuber

@whuber, merci pour la capture. J'ai normalisé le pdf et ajouté le cdf.
Bill Denney

3
Je vous remercie. Cependant, l'erreur de base persiste: vous calculez une distribution de mélange plutôt que la somme.
whuber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.