R

如何確定多元正態分佈的分位數(等值線?)

  • July 18, 2013

在此處輸入圖像描述

我對如何計算多元分佈的分位數很感興趣。在圖中,我繪製了給定單變量正態分佈的 5% 和 95% 分位數(左)。對於正確的多元正態分佈,我想像類似物將是環繞密度函數底部的等值線。下面是我嘗試使用包計算這個的一個例子mvtnorm- 但沒有成功。我想這可以通過計算多元密度函數結果的輪廓來完成,但我想知道是否還有另一種選擇(例如,類似物qnorm)。謝謝你的幫助。

例子:

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

等高線是橢球體。原因是您必須在多元正態分佈的 pdf 中查看指數的參數:等值線將是具有相同參數的線。然後你得到

在哪裡是協方差矩陣。這正是橢圓的方程;在最簡單的情況下,和是對角線,所以你得到

如果不是對角線,對角化你會得到相同的結果。 現在,您必須將橢圓內部(或外部)的多元 pdf 積分並要求它等於您想要的分位數。假設您的分位數不是通常的分位數,而是原則上是橢圓的(即,您正在尋找最高密度區域 HDR,正如 Tim 的回答所指出的那樣)。我會將pdf中的變量更改為,在角度積分,然後為從到

然後你替換:

所以原則上,你必須尋找以, 軸在特徵向量上和有效半徑:

引用自:https://stats.stackexchange.com/questions/64680

comments powered by Disqus