R
如何確定多元正態分佈的分位數(等值線?)
我對如何計算多元分佈的分位數很感興趣。在圖中,我繪製了給定單變量正態分佈的 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中的變量更改為,在角度積分,然後為從到
然後你替換:
所以原則上,你必須尋找以, 軸在特徵向量上和有效半徑: