다변량 가우스 분포에서 값 생성


14

I는 현재의 시뮬레이션 값을 시도하고 N 차원 랜덤 변수 X 의 평균 벡터 다변량 정규 분포를 갖는 μ=(μ1,...,μN)T 및 공분산 행렬 S .

역 CDF 방법과 유사한 절차를 사용하고 싶습니다. 먼저 N 차원의 균일 랜덤 변수 생성 한 U다음이 분포의 역 CDF에 연결하여 값 X 를 생성 하고 싶습니다.X .

절차가 잘 문서화되어 있지 않고 MATLABmvnrnd 함수Wikipedia에서 찾은 설명 간에 약간의 차이가 있기 때문에 문제가 있습니다 .

필자의 경우 분포의 매개 변수를 임의로 선택합니다. 특히, 균일 분포 U ( 20 , 40 ) 에서 각 평균 생성합니다 . 그런 다음 다음 절차를 사용하여 공분산 행렬 S 를 작성합니다.μiU(20,40)S

  1. 하 삼각 행렬 생성 L ( I , I ) = 1을 위한 = 1 ... NL이 ( I , J ) = U ( - 1 , 1 ) 에 대한 I < JLL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. 하자. 여기서 L TL 의 전치를 나타낸다 .S=LLTLTL

이 절차를 통해 가 대칭적이고 양의 명확한 지 확인할 수 있습니다. 또한 더 낮은 삼각 행렬 L을 제공 하므로 S = L L TSLS=LLT 이므로 분포에서 값을 생성해야합니다.

Wikipedia의 지침을 사용하여 다음과 같이 N 차원 유니폼을 사용하여 값을 생성 할 수 있어야 합니다.XN

  • X=μ+LΦ1(U)

그러나 MATLAB 함수에 따르면 일반적으로 다음과 같이 수행됩니다.

  • X=μ+LTΦ1(U)

여기서 N 차원, 분리 가능, 정규 분포 의 역 CDF이며 두 방법의 유일한 차이점은 단순히 L 또는Φ1NL입니다.LT

MATLAB 또는 Wikipedia가 갈 길입니까? 아니면 둘 다 잘못 되었습니까?


2
언급했듯이 는 행 벡터이고 T * i n v n o r m ( U ) 열 벡터 여야 하므로 둘 다 잘못되었습니다 . 당신이 당신의 행과 열이 밖으로 곧게받을 때,이 문제는 단순히의 버전을 확인하여 자신을 대답해야합니다 ( X - μ ) ' ( X - μ ) 또는 ( X - μ ) ( X - μ ) 'μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)행렬을 제공하고 어떤 버전에 숫자 만 제공합니다. 행렬 버전의 기대치를 계산할 수 있고 제공하는지 확인하십시오 . S
whuber

@whuber Yeap. 질문 형식을 변경했습니다. 팁 주셔서 감사합니다-확인하는 가장 쉬운 방법.
Berk U.

답변:


14

경우 를 설정하면 다음, 표준 정규 RV의의 열 벡터이다 Y = L X를 ,의 공분산 Y는 이다 L L T는XN(0,I)Y=LXYLLT .

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 T . XZ=XLTZT=LXTZTE[ZTZ]=LLT

비록 당신이 쓴 것에 기초하여, Wikipedia 공식은 정확합니다 : 만약 가 matlab에 의해 반환 된 행 벡터라면, L T로 왼쪽 곱할 수 없습니다 . (그러나 L T에 오른쪽 곱하면 L L T의 공분산이 동일한 표본이 제공됩니다 ).Φ1(U)LTLTLLT


NDNDN×D
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.