Come determinare quantili (isoline?) Di una distribuzione normale multivariata


24

inserisci qui la descrizione dell'immagine

Sono interessato a come si può calcolare un quantile di una distribuzione multivariata. Nelle figure, ho disegnato i quantili del 5% e del 95% di una data distribuzione normale univariata (a sinistra). Per la giusta distribuzione normale multivariata, sto immaginando che un analogo sarebbe un isolino che circonda la base della funzione di densità. Di seguito è riportato un esempio del mio tentativo di calcolare questo utilizzando il pacchetto mvtnorm, ma senza successo. Suppongo che ciò possa essere fatto calcolando un contorno dei risultati della funzione di densità multivariata, ma mi chiedevo se ci fosse un'altra alternativa ( ad esempio , analogo di qnorm). Grazie per l'aiuto.

Esempio:

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

3
Una soluzione Mathematica viene fornita (e illustrata per il caso 3D) su mathematica.stackexchange.com/questions/21396/… . Riconosce che i livelli di contorno sono dati da una distribuzione chi-quadrata.
whuber

@whuber - ti dispiacerebbe dimostrare cosa intendi con "... l'ellissoide di fiducia è un contorno dell'inverso della matrice di covarianza"? Saluti.
Marc nella scatola

2
Questo è più facile da vedere in una dimensione, dove la "matrice di covarianza" (per una distribuzione campionaria) è un numero , quindi il suo inverso è 1 / s 2 , pensato come una mappa quadratica su R 1 via x x 2 / s 2 . Un contorno al livello λ per definizione è l'insieme di x per cui x 2 / s 2 = λ ; cioè x 2 = λ s 2 o equivalentemente x = ±s21/s2R1xx2/s2λxx2/s2=λx2=λs2. Quandoλè ilquantile1-αdi una distribuzioneχ2(1),x=±λsλ1αχ2(1) è ilquantile1-αdi una distribuzionet(1), da cui recuperiamo i soliti limiti di confidenza±t 1 - α ; 1 s. λ1αt(1)±t1α;1s
whuber

Puoi usare la prima formula in questa risposta scegliendo in ( 0 , 1 ) per ottenere l'ellisse corrispondente S α (la linea tratteggiata rossa nelle tue trame) per qualsiasi xR 2α(0,1)SαxR2
user603

Risposte:


25

La linea di contorno è un ellissoide. Il motivo è perché devi guardare l'argomento dell'esponenziale, nel pdf della distribuzione normale multivariata: gli isolini sarebbero linee con lo stesso argomento. Quindi ottieni dove Σ è la matrice di covarianza. Questa è esattamente l'equazione di un'ellisse; nel caso più semplice, μ = ( 0 , 0 ) e Σ è diagonale, quindi ottieni ( x

(xμ)TΣ1(xμ)=c
Σμ=(0,0)Σ SeΣnon è diagonale, in diagonale si ottiene lo stesso risultato.
(xσx)2+(yσy)2=c
Σ

Ora, dovresti integrare il pdf del multivariato all'interno (o all'esterno) dell'ellisse e richiedere che questo sia uguale al quantile che desideri. Diciamo che i tuoi quantili non sono i soliti, ma di principio ellittici (cioè stai cercando la regione di densità più alta, HDR, come sottolinea Tim risposta). Vorrei cambiare le variabili nel pdf in , integrare nell'angolo e quindi per z da 0 a z2=(x/σx)2+(y/σy)2z0 1-α=c Poi si sostitutivi s = - z 2 / 2 :

1α=0cdzzez2/22π02πdθ=0czez2/2
s=z2/2
0czez2/2=c/20esds=(1ec/2)

Quindi, in linea di principio, devi cercare l'ellisse centrata in , con asse sopra gli autovettori di Σ e raggio effettivo - 2 lnμΣ : ( x - μ ) T Σ - 1 ( x - μ ) = - 2 ln α2lnα

(xμ)TΣ1(xμ)=2lnα

4

Hai fatto domande sulla multivariata normale, ma hai iniziato la tua domanda chiedendo "quantile di una distribuzione multivariata" in generale. Dalla formulazione della tua domanda e dell'esempio fornito sembra che tu sia interessato alle regioni a più alta densità . Sono definiti da Hyndman (1996) come segue

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). Calcolo e rappresentazione grafica delle regioni a più alta densità. The American Statistician, 50 (2), 120-126.


2

-2*ln(α). Si è verificato un errore nel calcolo sopra. La versione corretta:

0cze-z2/2=-c/20eSdS=(1-e-c/2)

1

Potresti disegnare un'ellissi corrispondente alle distanze di 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 cerchi intorno al 95%, 75% e 50% dei dati

drawMahal(x,center=x.mcd$center,covariance=x.mcd$cov,quantile=c(0.95,.75,.5))

4
Benvenuto nel sito @ user98114. Potete fornire del testo per spiegare cosa sta facendo questo codice e come risolve il problema del PO?
gung - Ripristina Monica
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.