미리 지정된 상관 관계 행렬을 사용하여 데이터를 생성하려면 어떻게해야합니까?


19

평균 = , 분산 = , 상관 계수 = 상관 랜덤 시퀀스를 생성하려고합니다 . 아래 코드에서 & 를 표준 편차로 사용하고 & 를 수단으로 사용합니다.1 0.8010.8s1s2m1m2

p = 0.8 
u = randn(1, n)
v = randn(1, n)
x = s1 * u + m1
y = s2 * (p * u + sqrt(1 - p^2) * v) + m2

이것은 나에게 올바른주는 corrcoef()사이에 0.8 xy. 내 질문은 (동일한 상관 관계 ) 상관 z관계를 원 하지만 시리즈가 아닌 일련의 평균을 생성하는 방법 입니다 . 알아야 할 특정 공식이 있습니까? 하나를 찾았 지만 이해할 수 없었습니다.yr=0.8x


답변:


21

특정 상관 행렬로 데이터를 생성하는 방법을 묻는 것 같습니다.

유용한 사실은 공분산 행렬 가있는 임의의 벡터 있으면 임의의 벡터 는 평균 및 공분산 행렬 . 따라서 평균이 0 인 데이터로 시작하면 곱해도 변경되지 않으므로 첫 번째 요구 사항이 쉽게 충족됩니다. Σ A x A E ( x ) Ω = A Σ A T AxΣAxAE(x)Ω=AΣATA

상관 관계가없는 데이터 (즉, 공분산 행렬이 대각선 임)로 시작한다고 가정 해 봅시다. 상관 행렬에 대해 이야기하고 있기 때문에 취 . 당신은 선택하여 주어진 공분산 행렬과 데이터에이를 변환 할 수 있습니다 로 콜레 제곱근 의 다음 - 원하는 공분산 행렬 것 .A Ω A x ΩΣ=IAΩAxΩ

귀하의 예에서는 다음과 같은 것을 원합니다.

Ω=(1.80.81.80.81)

불행히도이 행렬은 양의 한정이 아니므로 공분산 행렬이 될 수 없습니다. 행렬식이 음수인지 확인하여이를 확인할 수 있습니다. 아마도, 대신에

Ω=(1.8.3.81.8.3.81)    or   Ω=(12/302/312/302/31)

충분할 것입니다. matlab에서 cholesky 제곱근을 계산하는 방법을 잘 모르지만 (사용중인 것으로 보입니다) 함수를 R사용할 수 있습니다 chol().

이 예제에서 위에 나열된 두 대해 적절한 행렬 배수 (각각)는Ω

A=(100.8.60.3.933.1972)    or   A=(1002/3.745300.8944.4472)

이것 R에 도달하는 데 사용 된 코드는 다음과 같습니다.

x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))

     [,1]      [,2]      [,3]
[1,]  1.0 0.0000000 0.0000000
[2,]  0.8 0.6000000 0.0000000
[3,]  0.3 0.9333333 0.1972027

x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))

      [,1]      [,2]      [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136

1
cholΩ

1
물론 그것은 @cardinal 맞습니다. 거의 특이한 행렬로 수치 적으로 일을하려고 할 때 이론적으로 정당화 된 많은 것들이 나빠집니다. 나는 목표 상관 행렬이 이것이 문제가 된 영역에 있지 않은 상황을 (편리하게) 상상했다. 이 점을 지적하는 것이 좋습니다-감사합니다 (그리고 다른 답변을 편집 해 주셔서 감사합니다)
Macro

1
내가 이것에 대해 생각한 주된 이유는 OP의 첫 제안이 긍정적 인 것이 아니라는 점을 인식 한 당신의 눈에 의한 것이 었습니다. 그리고 다른 질문에 대한 편집이 너무 열성적이지 않았 으면 좋겠습니다. 나는이 두 가지 답변을 모두 좋아한다.
추기경

7

R을 사용하는 경우 정규 분포 변수를 원한다고 가정하고 MASS 패키지에서 mvrnorm 함수를 사용할 수도 있습니다. 구현은 위의 매크로 설명과 유사하지만 cholesky 분해 대신 단일 값 분해로 스케일링 (상관 옵션이 true로 설정된 경우) 대신 상관 행렬의 고유 벡터를 사용합니다.

XΣγλΣ

X=γλXT

ΣX

상관 행렬은 양의 한정이어야하지만 R의 Matrix 패키지에서 nearPD 함수로 변환하는 것이 유용합니다.


1

ΣyxΣx=IΣyΛV

Σy=VΛVT=(VΛ)(ΛTVT)=AAT

y=Ax

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