¿Cómo determinar los cuantiles (isolinas?) De una distribución normal multivariada

24

ingrese la descripción de la imagen aquí

Estoy interesado en cómo se puede calcular un cuantil de una distribución multivariada. En las figuras, he dibujado los cuantiles de 5% y 95% de una distribución normal univariada dada (izquierda). Para la distribución normal multivariada correcta, estoy imaginando que un análogo sería una isolina que rodea la base de la función de densidad. A continuación se muestra un ejemplo de mi intento de calcular esto usando el paquete mvtnorm, pero sin éxito. Supongo que esto podría hacerse calculando un contorno de los resultados de la función de densidad multivariada, pero me preguntaba si hay otra alternativa ( por ejemplo , análogo de qnorm). Gracias por tu ayuda.

Ejemplo:

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 en la caja
fuente
3
Se proporciona una solución de Mathematica (y se ilustra para el caso 3D) en Mathica.stackexchange.com/questions/21396/… . Reconoce que los niveles de contorno están dados por una distribución de chi-cuadrado.
whuber
@whuber: ¿le importaría demostrar lo que quiere decir con "... el elipsoide de confianza es un contorno del inverso de la matriz de covarianza"? Aclamaciones.
Marc en la caja el
2
Esto es más fácil de ver en una dimensión, donde la "matriz de covarianza" (para una distribución de muestreo) es un número , por lo que su inverso es 1 / s 2 , considerado como un mapa cuadrático en R 1 a través de x x 2 / s 2 . Un contorno en el nivel λ por definición es el conjunto de x para el cual x 2 / s 2 = λ ; es decir, x 2 = λ s 2 o equivalente x = ± s21/ /s2R1XX2/ /s2λXX2/ /s2=λX2=λs2. Cuandoλes elcuantil1-αde unadistribuciónχ2(1),X=±λsλ1-αχ2(1) es elcuantil1-αde unadistribuciónt(1), de donde recuperamos los límites de confianza habituales±t 1 - α ; 1 s. λ1-αt(1)±t1-α;1s
Whuber
Puede usar la primera fórmula en esta respuesta eligiendo en ( 0 , 1 ) para obtener la elipse S α (la línea punteada roja en sus gráficos) para cualquier xR 2α(0,1)SαxR2
usuario603

Respuestas:

25

La línea de contorno es un elipsoide. La razón es porque hay que mirar el argumento de la exponencial, en el pdf de la distribución normal multivariante: las isolinas serían líneas con el mismo argumento. Entonces obtienes donde Σ es la matriz de covarianza. Esa es exactamente la ecuación de una elipse; en el caso más simple, μ = ( 0 , 0 ) y Σ es diagonal, por lo que obtienes ( x

(xμ)TΣ1(xμ)=c
Σμ=(0,0)Σ SiΣno es diagonal, diagonalizando se obtiene el mismo resultado.
(xσx)2+(yσy)2=c
Σ

Ahora, tendría que integrar el pdf del multivariado dentro (o fuera) de la elipse y solicitar que sea igual al cuantil que desea. Digamos que sus cuantiles no son los habituales, sino elípticos en principio (es decir, está buscando la Región de mayor densidad, HDR, como señala la respuesta de Tim). Cambiaría las variables en el pdf a , me integraría en el ángulo y luego para z de 0 a z2=(x/σx)2+(y/σy)2z0 0 1-α=do A continuación, sustitutos s = - z 2 / 2 :

1-α=0 0dorezzmi-z2/ /22π0 02πreθ=0 0dozmi-z2/ /2
s=-z2/ /2
0 0dozmi-z2/ /2=-do/ /20 0misres=(1-mi-do/ /2)

μΣ-2Enα

(X-μ)TΣ-1(X-μ)=-2Enα
chuse
fuente
4

Usted preguntó sobre multivariante normal, pero comenzó su pregunta preguntando sobre "cuantil de una distribución multivariada" en general. Según la redacción de su pregunta y el ejemplo proporcionado, parece que está interesado en las regiones de mayor densidad . Son definidos por Hyndman (1996) de la siguiente manera

F(z)X100(1-α)%R(Fα)X

R(Fα)={X:F(X)Fα}

FαPr(XR(Fα))1-una

Los HDR se pueden obtener por integración, pero, como lo describe Hyndman, puede hacerlo utilizando un método numérico más simple. Si , entonces se puede obtener de tal manera que simplemente tomando cuantil de . Se puede estimar utilizando cuantiles de muestra de un conjunto de observaciones . El método se aplica incluso si no conocemos , pero solo tenemos un conjunto de observaciones iid. Este método funcionaría también para distribuciones multimodales.f α Pr ( f ( x ) f α ) 1 - α α Y y 1 , . . . , y m f ( x )Y=F(X)FαPr(F(X)Fα)1-ααYy1,...,ymetroF(X)


Hyndman, RJ (1996). Calcular y graficar regiones de mayor densidad. El estadístico estadounidense, 50 (2), 120-126.

Tim
fuente
2

La respuesta correcta debería ser . Hubo un error en el cálculo anterior. La versión corregida: -2En(α)

0 0dozmi-z2/ /2=-do/ /20 0misres=(1-mi-do/ /2)
chunjiw
fuente
1

Podrías dibujar una elipsis correspondiente a las distancias 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)

O con círculos alrededor del 95%, 75% y 50% de los datos

drawMahal(x,center=x.mcd$center,covariance=x.mcd$cov,quantile=c(0.95,.75,.5))
margarita
fuente
44
Bienvenido al sitio @ user98114. ¿Puede proporcionar algún texto para explicar qué está haciendo este código y cómo resuelve el problema del OP?
gung - Restablece a Monica