Comment déterminer les quantiles (isolignes?) D'une distribution normale multivariée

24

entrez la description de l'image ici

Je m'intéresse à la façon de calculer un quantile d'une distribution multivariée. Dans les figures, j'ai tracé les quantiles 5% et 95% d'une distribution normale univariée donnée (à gauche). Pour la bonne distribution normale multivariée, j'imagine qu'un analogue serait une isoline qui entoure la base de la fonction de densité. Ci-dessous est un exemple de ma tentative de calcul en utilisant le package mvtnorm- mais sans succès. Je suppose que cela pourrait être fait en calculant un contour des résultats de la fonction de densité multivariée, mais je me demandais s'il y avait une autre alternative ( par exemple , analogique de qnorm). Merci de votre aide.

Exemple:

mu <- 5
sigma <- 2 
vals <- seq(-2,12,,100)
ds <- dnorm(vals, mean=mu, sd=sigma)

plot(vals, ds, t="l")
qs <- qnorm(c(0.05, 0.95), mean=mu, sd=sigma)
abline(v=qs, col=2, lty=2)


#install.packages("mvtnorm")
require(mvtnorm)
n <- 2
mmu <- rep(mu, n)
msigma <- rep(sigma, n)
mcov <- diag(msigma^2)
mvals <- expand.grid(seq(-2,12,,100), seq(-2,12,,100))
mvds <- dmvnorm(x=mvals, mean=mmu, sigma=mcov)

persp(matrix(mvds,100,100), axes=FALSE)
mvqs <- qmvnorm(0.95, mean=mmu, sigma=mcov, tail = "both") #?

#ex. plot   
png("tmp.png", width=8, height=4, units="in", res=400)
par(mfcol=c(1,2))

#univariate
plot(vals, ds, t="l")
qs <- qnorm(c(0.05, 0.95), mean=mu, sd=sigma)
abline(v=qs, col=2, lty=2)

#multivariate
pmat <- persp(seq(-2,12,,100), seq(-2,12,,100), matrix(mvds,100,100), axes=FALSE, shade=TRUE, lty=0)
cont <- contourLines(seq(-2,12,,100), seq(-2,12,,100), matrix(mvds,100,100), levels=0.05^2)
lines(trans3d(cont[[1]]$x, cont[[1]]$y, cont[[1]]$level, pmat), col=2, lty=2)

dev.off()
Marc dans la boîte
la source
3
Une solution Mathematica est donnée (et illustrée pour le cas 3D) à l' adresse mathica.stackexchange.com/questions/21396/… . Il reconnaît que les niveaux de contour sont donnés par une distribution chi carré.
whuber
@whuber - cela vous dérangerait de démontrer ce que vous entendez par "... l'ellipsoïde de confiance est un contour de l'inverse de la matrice de covariance"? À votre santé.
Marc dans la boite
2
C'est plus facile à voir dans une dimension, où la "matrice de covariance" (pour une distribution d'échantillonnage) est un nombre , donc son inverse est , considéré comme une carte quadratique sur via . Un contour au niveau par définition est l'ensemble de 1 / s 2 R 1 x x 2 / s 2 λ x pour lesquels x 2 / s 2 = λ ; c'est-à-dire, x 2 = λ s 2 ou de manière équivalente x = ± s21/s2R1xx2/s2λxx2/s2=λx2=λs2. Lorsqueλest lequantile1-αd'unedistributionχ2(1),x=±λsλ1αχ2(1) est lequantile1-αd'unedistributiont(1), d'où nous retrouvons les limites de confiance habituelles±t 1 - α ; 1 s. λ1αt(1)±t1α;1s
whuber
Vous pouvez utiliser la première formule de cette réponse en choisissant dans ( 0 , 1 ) pour obtenir l'ellipse correspondante S α (la ligne pointillée rouge dans vos graphiques) pour tout xR 2α(0,1)SαxR2
user603

Réponses:

25

La ligne de contour est un ellipsoïde. La raison en est qu'il faut regarder l'argument de l'exponentielle, dans le pdf de la distribution normale multivariée: les isolignes seraient des lignes avec le même argument. On obtient alors Σ est la matrice de covariance. C'est exactement l'équation d'une ellipse; dans le cas le plus simple, μ = ( 0 , 0 ) et Σ est diagonale, donc vous obtenez ( x

(xμ)TΣ1(xμ)=c
Σμ=(0,0)Σ SiΣn'est pas diagonal, la diagonalisation vous donne le même résultat.
(XσX)2+(yσy)2=c
Σ

Maintenant, vous devez intégrer le pdf du multivarié à l'intérieur (ou à l'extérieur) de l'ellipse et demander qu'il soit égal au quantile souhaité. Disons que vos quantiles ne sont pas les quantiles habituels, mais elliptiques en principe (c'est-à-dire que vous recherchez la région de densité la plus élevée, HDR, comme le souligne la réponse de Tim). Je changerais les variables du pdf en , intégrerais dans l'angle puis pour z de 0 à z2=(X/σX)2+(y/σy)2z0 1-α=c Ensuitevous remplacement de s = - z 2 / 2 :

1-α=0czze-z2/22π02πθ=0cze-z2/2
s=-z2/2
0cze-z2/2=-c/20ess=(1-e-c/2)

μΣ-2lnα

(X-μ)TΣ-1(X-μ)=-2lnα
chuse
la source
4

Vous avez posé des questions sur la normale multivariée, mais avez commencé votre question en posant des questions sur le "quantile d'une distribution multivariée" en général. D'après le libellé de votre question et l'exemple fourni, il semble que vous vous intéressez aux régions à plus forte densité . Ils sont définis par Hyndman (1996) comme suit:

f(z)X100(1α)%R(fα)X

R(fα)={x:f(x)fα}

fαPr(XR(fα))1a

Y=f(x)fαPr(f(x)fα)1ααYy1,...,ymf(x)


Hyndman, RJ (1996). Calcul et représentation graphique des régions de plus haute densité. The American Statistician, 50 (2), 120-126.

Tim
la source
2

-2ln(α)

0cze-z2/2=-c/20ess=(1-e-c/2)
chunjiw
la source
1

Vous pouvez dessiner des ellipses correspondant aux distances de Mahalanobis.

library(chemometrics)
data(glass)
data(glass.grp)
x=glass[,c(2,7)]
require(robustbase)
x.mcd=covMcd(x)
drawMahal(x,center=x.mcd$center,covariance=x.mcd$cov,quantile=0.90)

Ou avec des cercles autour de 95%, 75% et 50% des données

drawMahal(x,center=x.mcd$center,covariance=x.mcd$cov,quantile=c(0.95,.75,.5))
Marguerite
la source
4
Bienvenue sur le site @ user98114. Pouvez-vous fournir du texte pour expliquer ce que fait ce code et comment il résout le problème du PO?
gung - Rétablir Monica