특정 상관 행렬로 데이터를 생성하는 방법을 묻는 것 같습니다.
유용한 사실은 공분산 행렬 가있는 임의의 벡터 있으면 임의의 벡터 는 평균 및 공분산 행렬 . 따라서 평균이 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=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.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