상관 난수를 생성하는 방법 (제공된 평균, 분산 및 상관 정도)? 이해를 확인하려고합니다. 나는 두 단계 로이 작업을

이것이 너무 기본적으로 보이지만 미안하지만 여기서 이해를 확인하려고합니다. 나는 두 단계 로이 작업을 수행해야한다는 감각을 얻었으며 상관 관계 행렬을 시작하려고 시도했지만 실제로 개입하기 시작했습니다. 상관 난수를 생성하는 훌륭하고 이상적인 빠른 방법에 대한 간결한 설명 (이상적으로 의사 코드 솔루션에 대한 힌트로)을 찾고 있습니다.

알려진 평균과 분산을 가진 두 개의 의사 난수 변수 높이와 무게, 주어진 상관 관계가 주어지면 기본적 으로이 두 번째 단계의 모양을 이해하려고 노력하고 있다고 생각합니다.

   height = gaussianPdf(height.mean, height.variance)
   weight = gaussianPdf(correlated_mean(height.mean, correlation_coefficient),
                        correlated_variance(height.variance,
                        correlation_coefficient))
  • 상관 평균과 분산을 어떻게 계산합니까? 그러나 나는 이것이 실제로 관련된 문제임을 확인하고 싶습니다.
  • 매트릭스 조작에 의존해야합니까? 아니면이 문제에 대한 기본 접근 방식에 다른 문제가 있습니까?


답변

“상관 된 난수를 생성하는 우수하고 이상적인 빠른 방법”에 대한 귀하의 질문에 대답하려면 : 정의에 의해 정의 된 양의 공분산 행렬 가 주어지면 Cholesky 분해는 다음과 같습니다. = ; 은 하부 삼각 행렬입니다.C L L T L

C

C

LLT

L

이제이 행렬 을 사용 하여 상관되지 않은 임의 변수 벡터 를 투영하면 결과 투영 는 상관 된 임의 변수의 투영 이됩니다.X Y = L X

L

X

Y=LX

이런 일이 발생하는 이유 당신은 간결한 설명을 찾을 수 있습니다 여기에 .


답변

@ user11852와 @ jem77bfp의 +1은 좋은 답변입니다. 필자 가 실제로 더 나아 졌다고 생각하는 것이 아니라 유익하다고 생각하기 때문에 다른 관점에서 접근 해 보겠다. 다음은 우리가 이미 알고있는 몇 가지 관련 사실입니다.

  1. X Y
    r

    은 와 가 모두 표준화 될 때 회귀선의 기울기입니다 ( 예 : .

    X

    Y

    N(0,1)

  2. r2

    의 변화의 비율 인 의 차이에 기인 한 ,

    Y

    X

    (또한 분산 규칙에서 ) :

  3. 랜덤 변수의 분산에 상수를 곱한 값 은 원래 분산 의 상수에 제곱을 곱한 값입니다.

    Var[aX]=a2Var[X]

  4. variances add , 즉 두 개의 임의 변수 합계의 분산 (독립이라고 가정)은 두 분산의 합입니다.

    Var[X+ε]=Var[X]+Var[ε]

이제이 네 가지 사실을 결합하여 모집단 에 (더 적절하게는 )의 상관 관계가있는 두 개의 표준 정규 변수를 만들 수 있지만 생성하는 샘플에는 다양한 샘플 상관 관계가 있습니다. 아이디어는 의사 랜덤 변수를 생성하는 그 정상 표준, , 다음 계수 찾아 와, 오차의 분산, 되도록을 , 여기서 입니다. ( 이 기능이 작동 하려면 이어야하며 또한 이어야합니다 .) 따라서

r

ρ

X

N(0,1)

a

ve

YN(0,a2+ve)

a2+ve=1

|a|

1

a=r

r

당신이 원하는 ; 즉, 당신의 계수의 . 그런 다음 필요한 오차 분산을 계산하면 입니다. (소프트웨어에서 표준 편차를 사용해야하는 경우 해당 값의 제곱근을 취하십시오.) 마지막으로 생성 한 각 의사 난수 변수 에 대해 적절한 오류 분산 와 함께 의사 난수 오류 변수 생성하십시오 . 곱하고 더함으로써 상관 된 의사 난수 변수 계산합니다 .

a

1r2

xi

ei

ve

yi

R에서이 작업을 수행하려는 경우 다음 코드가 적합 할 수 있습니다.

correlatedValue = function(x, r){
  r2 = r**2
  ve = 1-r2
  SD = sqrt(ve)
  e  = rnorm(length(x), mean=0, sd=SD)
  y  = r*x + e
  return(y)
}

set.seed(5)
x = rnorm(10000)
y = correlatedValue(x=x, r=.5)

cor(x,y)
[1] 0.4945964

(편집 : 언급하는 것을 잊었습니다 🙂 설명 했듯이이 절차는 두 가지 표준 정규 상관 변수를 제공합니다. 당신이 원하지 않는 경우 표준 법선을하지만, 원하는 변수는 상관 관계에 영향을주지 않고 그들을 변환 할 수 있습니다, 일부 특정 수단 (안 0)과 (하지 1) 표준 편차를 가지고있다. 따라서 관측 된 평균을 빼서 평균이 정확히 이고 변수에 원하는 SD를 곱한 다음 원하는 평균을 더합니다. 관측 평균이 원하는 평균 주위에서 정상적으로 변동되도록하려면 초기 차이를 다시 추가합니다. 본질적으로 이것은 반대로 z- 점수 변환입니다. 이것은 선형 변환이므로 변환 된 변수는 이전과 다른 변수와 동일한 상관 관계를 갖습니다.

0

다시 말하지만, 이것은 가장 간단한 형태로 한 쌍 의 상관 변수 만 생성 할 수있게하며 (확장 가능하지만 추악하게 빠짐) 확실히 작업을 수행하는 가장 편리한 방법은 아닙니다. R에서는 MASS 패키지 에서 ? mvrnorm 을 사용하는 것이 더 쉽고 주어진 모집단 상관 행렬로 많은 변수를 생성 할 수 있기 때문에 둘 다 사용하려고합니다 . 그럼에도 불구하고, 나는 몇 가지 기본 원리가 간단한 방식으로 어떻게 작동하는지보기 위해이 과정을 살펴 보는 것이 가치가 있다고 생각합니다.


답변

일반적으로 이것은 간단한 일이 아니지만 공변량 행렬과 평균 벡터를 입력하는 다변량 정규 변수 생성 (적어도 R에서는 패키지 mvrnorm에서 참조) 패키지가 있다고 생각 MASS합니다.

또 하나의 “구성 적”접근 방식이 있습니다. 랜덤 벡터 를 모델링 하고 분포 함수 가 있다고 가정합니다 . 첫 번째 단계는 한계 분포 함수를 얻는 것입니다. 즉 , 모든 를 통합합니다 .

그런 다음 의 역함수 인 간격으로 균일하게 분포 된 임의 변수 을 연결 합니다. 이 단계에서 첫 번째 좌표 합니다.

(X1,X2)

F(x1,x2)

F

x2

FX1(x1)=F(x1,x2)dx2.

FX11

FX1

ξ1

[0,1]

x^1=FX11(ξ)

이제 좌표가 하나이므로 초기 분포 함수 에 연결 한 다음 조건의 조건부 분포 함수를 .

여기서 은 한계 분포; 즉 입니다.

F(x1,x2)

x1=x^1

F(x2|X1=x^1)=F(x^1,x2)fX1(x^1),

fX1

X1

FX1(x1)=fX1(x1)

그런 다음 다시 에 균일하게 분포 된 변수 를 생성하고 ( 과 ) 의 역에 연결합니다 . 따라서 ; 즉, 는 충족 합니다. 이 방법은 더 많은 차원의 벡터로 일반화 할 수 있지만 단점은 분석적으로나 수치 적으로 많은 함수를 계산해야한다는 것입니다. 아이디어는뿐만 아니라이 문서에서 찾을 수 있습니다 http://www.econ-pol.unisi.it/dmq/pdf/DMQ_WP_34.pdf .

ξ2

[0,1]

ξ1

F(x2|X1=x^1)

x^2=(F(x2|X1=x^1))1(ξ)

x^2

F(x^2|X1=x^1)=ξ

균일 확률 변수를 역 확률 분포 함수에 연결하는 의미를 이해하지 못하는 경우 일 변량 사례를 스케치 한 다음 역 함수의 기하학적 해석이 무엇인지 기억하십시오.


답변

효율성을 포기할 준비가된다면, 버리기 알고리즘을 사용할 수 있습니다. 장점은 가우시안뿐만 아니라 모든 종류의 분포를 허용한다는 것입니다.

원하는 분포로 및 의 두 개의 상관되지 않은 난수 시퀀스를 생성하여 시작하십시오 . 상관 계수의 원하는 값으로 를 보자 . 그런 다음 다음을 수행하십시오.

{xi}i=1N

{yi}i=1N

C

1) 계산 상관 계수

cold=corr({xi},{yi})

n1

n2:1n1,2N

xn1

xn2

cnew=corr({xi},{yi})

|Ccnew|<|Ccold|

그런 다음 스왑을 유지하십시오. 그렇지 않으면 스왑을 취소하십시오.

|Cc|<ϵ

랜덤 스왑은 의 한계 분포를 변경하지 않습니다

xi

.

행운을 빕니다!


답변