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