从多元高斯分布中产生值


14

目前我正在试图到的模拟值维随机变量具有与平均向量一个多元正态分布和协方差矩阵。NXμ=(μ1,...,μN)TS

我希望能使用类似于逆CDF方法的过程,这意味着我想首先生成维均匀随机变量,然后把它插入到这个分布的逆CDF,所以生成值。NUX

我遇到问题是因为该过程没有得到很好的记录,并且MATLAB中mvnrnd函数我在Wikipedia上找到描述之间存在细微的差异。

就我而言,我还随机选择分布的参数。特别是,我从均匀分布生成每个均值。然后,我使用以下过程构建协方差矩阵:μiU(20,40)S

  1. 创建一个下三角矩阵,其中对于,,对于 ,LL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. 令,其中表示的转置。S=LLTLTL

此过程使我可以确保是对称且为正定的。它还提供了一个较低的三角矩阵因此,我认为需要从该分布生成值。SLS=LLT

使用Wikipedia上的指南,我应该能够使用维统一生成值,如下所示:XN

  • X=μ+LΦ1(U)

但是,根据MATLAB函数,通常按以下方式完成:

  • X=μ+LTΦ1(U)

其中是一个的逆CDF维,可分离,正态分布,并且这两种方法之间的唯一区别是简单地是否使用或。Φ1NLLT

是MATLAB还是维基百科?还是都错了?


2
如上所述,两者都是错误的,因为是行向量,而T i n v n o r m U 必须是列向量。当你得到你的行和列理顺,这个问题应该简单地通过识别哪个版本的答案本身X - μ X - μ X - μ X - μ 'μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)给出一个矩阵和哪个版本只给出一个数字:支票,你可以计算的矩阵版本的期望,它给S
ub

@whuber Yeap。对问题的格式进行了更改。感谢您的提示-绝对是最简单的检查方法。
Berk U.

Answers:


14

如果是的标准正常RV的一个列向量,然后如果设置Ŷ = 大号X,的协方差ÿ大号大号ŤXN(0,I)Y=LXYLLŤ

我认为您遇到的问题可能是由于matlab的mvnrnd函数将行向量返回为样本,即使您将平均值指定为列向量也是如此。例如,

 > size(mvnrnd(ones(10,1),eye(10))  
 > ans =
 >      1    10

请注意,转换行向量会得到相反的公式。如果是行向量,则Z = X L T也是行向量,因此Z T = L X T是列向量,并且Z T的协方差可以写成E [ Z T Z ] = L L TXž=X大号ŤžŤ=大号XŤžŤE[ZTZ]=LLT

根据你写的东西不过,维基百科的公式是正确的:如果是由MATLAB返回的行向量,你不能离开乘它大号牛逼。(但是,将L T右乘将得到具有L L T相同协方差的样本)。Φ1(U)LTLTLLT


注意,在matlab中对mvnrnd的帮助使用作为样本数。维度数目是d。因此,如果您从D维多元正态要求N个样本,它将以N × D矩阵形式返回它们。NDNDN×D
jpillow 2011年
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.