它是否正确 ?(生成截断范数多元高斯)


10

如果 ,即 XRn, XN(0_,σ2I)

fX(x)=1(2πσ2)n/2exp(||x||22σ2)

我想要多元情况下的截断正态分布的类似版本。

更确切地说,我想生成一个范数约束(值)的多元高斯 st ,其中ÿ ˚F ýÝ = { Ç f Xy  如果  | | y | | 一个0  否则  c = 1aY

fY(y)={c.fX(y), if ||y||a0, otherwise .
c=1Prob{||X||a}

现在,我观察到以下内容:

如果,| | x | | x=(x1,x2,,xn)||x||a

|xn|Tmax(0,(a21n1xi2))

因此,通过选择x1,,xn1作为高斯样本,可以将x_n限制xn截断正态分布(遵循高斯尾T)分布NT(0,σ2),除了它的符号以概率1/2随机选择1/2

现在我的问题是

如果我产生每个矢量样品(x1,,xn)(X1,,Xn)为,

x1,,xn1N(0,σ2)

ž 1{ ± 1 W.P. 1 / 2 } ž 2Ñ Ť0 σ 2ţ X 1... X Ñ - 1xn=Z1Z2 其中,,,(即a具有 Z1{±1 w.p. 1/2}Z2NT(0,σ2)T(x1,,xn1)max(0,(a21n1xi2))

将是一个规范约束()多元高斯?(即与上面定义的相同)。我应该如何验证?还有其他建议吗?一个ÿ(X1,X2,,Xn)aY

编辑:

这是二维情况下点的散点图,范数被截断为“ 1”以上的值 范数截断多元高斯

注意:以下提供了一些很好的答案,但是缺少有关此建议错误的理由。实际上,这是这个问题的重点。


1
@西安感谢您的查询和关注。这是我要说明的理由:有问题的算法需要RV,当每个样本看到它们时,它们是高斯和一个截断的高斯;更具体地说,每个样本的分布之一都不同。它们不是各自的边缘。因为每个出现在两个术语中:和 ; 和显然是时变的截断阈值对于每个样本而变化。您提供的分解证明存在完全相同的问题。边际利润不可用。 n 1 x ii = 1 n 1 x i x n x nX1Xnn1xi,i=1,,n1xixnxn
爱概率

您的算法(错误)首先生成,然后生成给定。因此,第一代来自边际,第二代来自条件。我的证明表明,边际不是(n-1)维高斯分布。X ÑÑ Ť0 σ 2X 1... X Ñ - 1
X1,,Xn1N(0,σ2)
XnNT(0,σ2)
X1,,Xn1
西安

@西安有条件高斯不等于边际高斯!!
Loves Probability 2015年

@西安好吧,我的意思是这个。当作为高斯生成时,以后的项取决于这些值,则边际将不是高斯。你说的完全一样。他们可能是“有条件的高斯”,但绝对不是“边际的高斯”。我之前的评论就是这样。 X 1... X n - 1X1,,Xn1X1,,Xn1
Loves Probability 2015年

1
@西安非常感谢您的耐心回答。我终于明白了我的错误是由于你的刺激,我也写了我自己的详细答案来解释这个错误。但是抱歉,希望您不要介意,我可能应该接受Whuber的回答,因为他的详细解释有助于实际解决问题。
Loves Probability

Answers:


11

的多元正态分布是球对称的。您寻找的分布在处将半径截短。因为此条件仅取决于的长度,所以截断的分布保持球形对称。由于与球角无关 并且具有分布,因此您可以通过几个简单的步骤就从截断的分布中生成值:ρ = | | X | | 2一个X ρ X / | | X | | ρXρ=||X||2aXρX/||X||χ Ñ ρσχ(n)

  1. 生成。XN(0,In)

  2. 生成作为分布的平方根,截断为。χ 2d / σ 2Pχ2(d)(a/σ)2

  3. 令。Y=σPX/||X||

在步骤1中,将作为标准正态变量的独立实现的序列获得。dXd

在步骤2中,可容易地通过反转位数函数生成一个的分布:产生一个均匀的可变之间支撑在所述范围(分位数的)和并设置。˚F - 1 χ 2d Ü ˚F / σ 21 P = PF1χ2(d)UF((a/σ)2)1P=F(U)

下面是一个直方图的这样的独立的实现为在的尺寸,在截断低于。生成大约花了一秒钟,证明了该算法的效率。 σ P σ = 3 Ñ = 11 一个= 7105σPσ=3n=11a=7

数字

红色曲线是截断的分布的密度,该分布由缩放。它与直方图非常匹配,证明了该技术的有效性。σ = 3χ(11)σ=3

为了获得截断的直觉,请考虑,在维中的情况。这是对的散点图(对于独立实现)。它清楚地显示了半径为的孔:σ = 1个ñ = 2 ý 2 ý 1 10 4a=3σ=1n=2Y2Y1104a

图2

最后,请注意,(1)分量必须具有相同的分布(由于球对称性),以及(2)除了,该公共分布不是正态分布。实际上,随着增大,(单变量)正态分布的迅速减小会导致球形截断的多元正态分布在(半径为)球表面附近的大部分概率。因此,边际分布必须近似集中在区间的缩放对称Beta分布。这在上一个散点图中很明显,其中一个= 0 ñ - 1 ñ - 1 / 2 Ñ - 1 / 2 - 一个= 3 σ 2 - 1 3 σXia=0an1a((n1)/2,(n1)/2)(a,a)a=3σ在两个维度上已经很大:点沿半径为的环(球体)倾斜。213σ

以下是在维中大小为且,的边际分布的直方图(其近似Beta分布是均匀的): 3 一个= 10 σ = 1 1 1 1053a=10σ=1(1,1)

图3

由于问题中描述的过程的前边际是正常的(通过构造),因此该过程是不正确的。n1


以下R代码生成了第一个图形。它被构造成并行步骤1-3用于产生。它被修改以产生通过改变变量第二图形,,,和然后发出绘图命令后产生。Yadnsigmaplot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010")y

的产生在代码修改较高数值分辨率:代码实际上产生,并使用该计算到。1 U PU1UP

根据假定的算法对数据进行模拟,将其与直方图进行汇总并叠加直方图的相同技术可用于测试问题中所述的方法。它将确认该方法无法按预期工作。

a <- 7      # Lower threshold
d <- 11     # Dimensions
n <- 1e5    # Sample size
sigma <- 3  # Original SD
#
# The algorithm.
#
set.seed(17)
u.max <- pchisq((a/sigma)^2, d, lower.tail=FALSE)
if (u.max == 0) stop("The threshold is too large.")
u <- runif(n, 0, u.max)
rho <- sigma * sqrt(qchisq(u, d, lower.tail=FALSE)) 
x <- matrix(rnorm(n*d, 0, 1), ncol=d)
y <- t(x * rho / apply(x, 1, function(y) sqrt(sum(y*y))))
#
# Draw histograms of the marginal distributions.
#
h <- function(z) {
  s <- sd(z)
  hist(z, freq=FALSE, ylim=c(0, 1/sqrt(2*pi*s^2)),
       main="Marginal Histogram",
       sub="Best Normal Fit Superimposed")
  curve(dnorm(x, mean(z), s), add=TRUE, lwd=2, col="Red")
}
par(mfrow=c(1, min(d, 4)))
invisible(apply(y, 1, h))
#
# Draw a nice histogram of the distances.
#
#plot(y[1,], y[2,], pch=16, cex=1/2, col="#00000010") # For figure 2
rho.max <- min(qchisq(1 - 0.001*pchisq(a/sigma, d, lower.tail=FALSE), d)*sigma, 
               max(rho), na.rm=TRUE)
k <- ceiling(rho.max/a)
hist(rho, freq=FALSE, xlim=c(0, rho.max),  
     breaks=seq(0, max(rho)+a, by=a/ceiling(50/k)))
#
# Superimpose the theoretical distribution.
#
dchi <- function(x, d) {
  exp((d-1)*log(x) + (1-d/2)*log(2) - x^2/2 - lgamma(d/2))
}
curve((x >= a)*dchi(x/sigma, d) / (1-pchisq((a/sigma)^2, d))/sigma, add=TRUE, 
      lwd=2, col="Red", n=257)

1
多数民众赞成在一个很好的答案!但是,您是否也可以提出一些疑问为什么建议中的提案失败了?(西安的回答还不够令人满意,我认为他的论点存在一些问题,例如当他整合时)
爱的可能性

1
非常感谢你。但是,我是否也可以请您回答我的上述第一条评论?看来,我的建议还给出了足够接近的良好直方图。我很困惑!!错误在哪里?请注意,这是问题的重点,并且IF CORRECT,该方法仅需要一个“截断的高斯”样本PLUS加上现有快速算法的可用性,可以节省大量费用(除了除法之外还避免了除法和乘法)避免需要相对更复杂的截断ChiSquare)
Loves Probability

2
据我所知,您建议从正态分布绘制 iid,从两侧截断的正态绘制。这显然不是MVN分布被截断的原因,因为很容易发现的散点图,所以我认为我无法理解您的问题。更一般地,那请问为什么有些东西问题的负担不是工作,是对提问者提供证据证明它确实工作。也许如果您提供这样的证据,您的问题的性质就会变得很清楚。 X n n = 2X1,,Xn1Xnn=2
ub

1
感谢您的详细信息。如您所说,我添加了二维散点图,并修复了一些句子。顺便说一句,对不起,我并不是要把全部举证责任转移给您。我的建议似乎可以通过所有简单的检查工作,因此我很好奇为什么它是错误的,这也是这个问题的主要目的。
Loves Probability 2015年

1
查看边际分布是我可以发现的最直接的方法来说明过程中的差异。我添加了一个图和一些代码来显示这些边际。
ub

7

我写这个是假设您不希望任何点具有|| y ||。> a,它是通常的一维截断的类似物。但是,您已经写过您想保持点具有| y ||的点 > = a并丢弃其他。不过,如果您确实确实希望保持点具有| y ||,则可以对我的解决方案进行明显的调整。> = a。

最简单的方法(恰好是一种非常通用的技术)是使用Acceptance-Rejection https://en.wikipedia.org/wiki/Rejection_sampling。只要Prob(|| X ||> a)相当低,它就会相当快,因为​​这样就不会有很多拒绝。

从不受约束的多元法线生成样本值x(即使您的问题表明多元法线是球形的,即使不是这种方法也可以应用)。如果|| x || <= a,接受,即使用x,否则拒绝它并生成一个新样本。重复此过程,直到获得所需数量的可接受样品为止。如果|| y ||,则应用此过程的效果是生成y,使其密度为c * f_X(y)。<= a,如果|| y ||则为0。> a,根据我对问题开头部分的更正。您永远不需要计算c;它实际上是由算法根据拒绝样本的频率自动确定的。


3
+1我喜欢您的建议适用于非球形对称MVN,您已清楚描述了将在有效情况下使用的情况,并且强调了在决定是否使用拒绝采样时需要评估拒绝率。
ub

2
是的,还请注意,它可以用于任意形状的接受区域,而不仅仅是2范数在此处高于或低于阈值。
Mark L. Stone

5

这是一个不错的尝试,但是由于“归一化常数”而无法使用:如果考虑联合密度 分解

fX(x)1(2πσ2)n/2exp(||x||22σ2)I||x||>a=1(2πσ2)n/2exp(x12++xn22σ2)I||x||>a
fX(x)1(2πσ2)(n1)/2exp(||xn||22σ2)1(2πσ2)1/2exp(xn22σ2)I||x||>a
=1(2πσ2)(n1)/2exp(||xn||22σ2)1(2πσ2)1/2exp(xn22σ2)I||xn||2+xn2>a2
=P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
×P(Xn2>a2||xn||2)1(2πσ2)1/2exp(xn22σ2)Ixn2>a||xn||2
集成到 在,说明
fXn(xn)P(Xn2>a2||xn||2)(2πσ2)(n1)/2exp(||xn||22σ2)
xn
  1. 给定其他分量的的条件分布是截断的正态分布。XnXn
  2. 的其它成分,所述的边缘分布,是正常的分布,因为额外的术语的 ;XnP(Xn2>a2||xn||2)

我可以看到利用此属性的唯一方法是使用截断的正态条件分布来一次运行一个组件的Gibbs采样器。


1
非常感谢您提供详细的答案。只是澄清一下,密度(第二当量)下的面积之和不等于1!---我认为,一旦更正,它将抵消您正在谈论的“标准化因子”。有什么想法吗?fX(x)
Loves Probability

3

这个问题源于使用想法-联合分布的基本条件分解-来绘制矢量样本。

令为具有iid分量的多元高斯。X

令 和 Prob(||X||>a)TYX.I||X||>a

该算法是基于以下(全正确但具有欺骗性的解释)条件因式分解提出的:

fY(y)=1T1(2πσ2)n/2exp(||y||22σ2)I||y||>a=1T1(2πσ2)n/2exp(y12++yn22σ2)I||y||>a=(i=1n112πσ2exp(yi22σ2))(1T12πσ2exp(yn22σ2)I||y||>a)=(i=1n112πσ2exp(yi22σ2))Gaussians(1T12πσ2exp(yn22σ2)Iyn2>(a2y12yn12))Truncated Gaussian??

最简单的答案是,后一个因素不是截断的高斯分布,(更重要的是)甚至不是分布。


这是为什么上述分解本身具有一些基本缺陷的详细说明。一句话:给定联合分布的任何条件因式分解都必须满足一些非常基本的属性,而上述因式分解不能满足它们(请参阅下文)。

通常,如果我们将则是的边际,而是的条件分布。意思是:fXY(x,y)=fX(x)fY|X(y|x)fX(x)XfY|X(y|x)Y

  1. 假定为的因子必须是分布。和,f(x,y)fX(x)
  2. 第二个因子“假定为”必须是每个选择的分布fY|X(y|x)x

在上面的示例中,我们尝试将条件设置为。这意味着属性1应该保持高斯因子,而属性2应该保持高斯因子。Yn|(Y1Yn1)

显然,属性-1在第一个因素上保持良好。但是问题出在property-2。不幸的是,上述最后一个因素根本不是几乎任何值的分布了截断的高斯分布!(Y1Yn1)


这样的算法建议可能是以下误解的结果:一旦分布自然地从联合分布中分解出来(例如上述的高斯分布),就会导致条件分解。---- 没有!----其他(第二个)因素也必须很好。


注意:@whuber之前有一个很好的答案,它实际上解决了生成标准截断多元高斯函数的问题。我接受他的回答。这个答案只是为了阐明和分享我自己的理解和问题的起源。


2
+1感谢您分享您的想法:他们为该主题增加了宝贵的见解。
ub
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.