如何确定多元正态分布的分位数(等值线)


24

在此处输入图片说明

我对如何计算多元分布的分位数感兴趣。在图中,我绘制了给定单变量正态分布的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()

3
甲Mathematica的溶液中给出(和用于3D情况示出)在mathematica.stackexchange.com/questions/21396/...。它认识到轮廓级别由卡方分布给出。
— ub

@whuber-您介意展示“ ...的置信椭球是协方差矩阵逆矩阵的轮廓”的意思吗?干杯。
— 2013年

2
这在一个维度上最容易看到,其中“协方差矩阵”(对于采样分布)为数,因此其逆值为1 / s 2,被认为是R 1上通过x → x 2的二次映射。/ 秒2。根据定义,水平为λ的轮廓是x的集合,其中x 2 / s 2 = λ;即,X 2 = λ 小号2或等效X = ± √s21/s2R1x→x2/s2λxx2/s2=λx2=λs2。当λ是1-α一个的位数χ2(1)分配, √x=±λsλ1−αχ2(1)是t(1)分布的1-α分位数,从中我们恢复了通常的置信限度±t 1 - α ; 1和小号。λ1−αt(1)±t1−α;1s
— ub

可以使用第一个公式中此答案通过选择在(0 ,1 ),以获得相应的椭圆小号α(红色虚线在图线)对于任何X ∈ - [R 2α(0,1)Sαx∈R2
— user603

Answers:


25

等高线是椭圆形。原因是因为您必须在多元正态分布的pdf中查看指数参数:等值线将是具有相同参数的线。然后,你

(x−μ)TΣ−1(x−μ)=c
其中是协方差矩阵。那就是椭圆的等式。在简单的情况下,μ = (0 ,0 )和Σ是对角,所以你 (XΣμ=(0,0)Σ 如果Σ是不是对角线,你对角化得到相同的结果。
(xσx)2+(yσy)2=c
Σ

现在,您将必须在椭圆内部(或外部)集成多变量的pdf,并要求它等于所需的分位数。假设您的分位数不是通常的分位数,而是原则上是椭圆的(即Tim指出,您正在寻找最高密度区域HDR)。我会改变在PDF变量,集成在角度,然后Ž从0到√z2=(x/σx)2+(y/σy)2z0 1-α=&Integral; √c 然后,你替代小号= - ž 2 / 2: &Integral; √

1−α=∫0cdzze−z2/22π∫02πdθ=∫0cze−z2/2
s=−z2/2
∫0cze−z2/2=∫−c/20esds=(1−e−c/2)

因此,在原则上,你必须寻找在中心的椭圆以上的特征向量,与轴Σ和有效半径- 2 LN α: (X - μ )Ť Σ - 1(X - μ )= - 2 LN αμΣ−2ln⁡α

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

4

您曾问过多元正态,但通常是从询问“多元分布的分位数”开始的。从问题的措辞和提供的示例中,您似乎对最高密度的区域感兴趣。Hyndman(1996)对它们的定义如下

F(ž)X100(1个-α)%[R(Fα)X

R(fα)={x:f(x)≥fα}

fαPr(X∈R(fα))≥1−a

Y=f(x)fαPr(f(x)≥fα)≥1−ααYy1,...,ym。即使我们不知道该方法也适用f(x)


Hyndman,RJ(1996)。计算并绘制最高密度区域。美国统计学家,50(2),120-126。


2

正确答案应该是 -2∗ln⁡(α)。上面的计算有误。更正的版本:

∫0cze−z2/2=∫−c/20esds=(1−e−c/2)

1

You could draw an ellipses corresponding to Mahalanobis distances.

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)

Or with circles around 95%, 75%, and 50% of data

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

4
Welcome to the site @user98114. Can you provide some text to explicate what this code is doing & how it resolves the OP's issue?
— gung - Reinstate Monica
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.