Interesuje mnie, jak można obliczyć kwantyl rozkładu wielowymiarowego. Na rysunkach narysowałem 5% i 95% kwantyli danego rozkładu jednowymiarowego normalnego (po lewej). Dla właściwego wielowymiarowego rozkładu normalnego wyobrażam sobie, że analog byłby izoliną otaczającą podstawę funkcji gęstości. Poniżej znajduje się przykład mojej próby obliczenia tego za pomocą pakietu mvtnorm
- ale bez powodzenia. Przypuszczam, że można tego dokonać, obliczając kontur wyników funkcji wielowymiarowej gęstości, ale zastanawiałem się, czy istnieje inna alternatywa ( np. Analog qnorm
). Dzięki za pomoc.
Przykład:
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()