주어진 표준 편차로 대략 정규 분포 된 비 대각선 항목을 갖는 랜덤 상관 행렬을 생성하는 방법은 무엇입니까?


11

비 대각선 요소의 분포가 대략 일반처럼 보이도록 임의 상관 행렬을 생성하고 싶습니다. 내가 어떻게 해?

동기는 이것입니다. 시계열 데이터 세트의 경우 상관 분포는 종종 정규에 가깝게 보입니다. 일반적인 상황을 나타 내기 위해 많은 "정상"상관 행렬을 생성하고이를 사용하여 위험 수를 계산하려고합니다.n


나는 한 가지 방법을 알고 있지만 (대각선 이외의 요소 분포에 대한) 표준 편차는 너무 작습니다 : 행렬 의 균일하거나 정상적인 임의의 행을 생성 하고 행을 표준화합니다 (평균을 빼고, 표준 편차로 나눈 다음 샘플 상관 행렬 은 일반적으로 비 대각선 항목을 분포 시킵니다 [ 주석 후 업데이트 : 표준 편차는 \ sim n ^ {-1/2} ].X 1nX1n1XXn1/2

누구든지 표준 편차를 제어 할 수있는 더 나은 방법을 제안 할 수 있습니까?


1
@Richard, 질문 해 주셔서 감사합니다. 불행히도, 위에서 설명한 방법 은 정상적으로 배포되는 항목을 생성 하지 않습니다 . 대각선은 1이고 확률은 1이며, 대각선은 과 사이 입니다. 이제 크기가 조정 된 항목은 0을 중심으로하는 정규 분포에 대해 무조건 수렴됩니다. 실제로 해결하려는 문제에 대한 추가 정보를 제공해 주시겠습니까? 그리고 왜 대각선에서 "정규 분포"를 원하십니까? + 11+1
추기경

1
@Richard, 내 말은 이고 은 각각의 항목이 iid 표준 정규 인 두 개의 독립적 인 벡터라고 가정합니다. 계산 ; 즉, 와 사이의 샘플 상관 관계 입니다. 그런 다음 은 표준 정규 확률 변수로 분포합니다. "리 스케일링 (rescaled)"이란 비 변성 제한 분포를 얻는 데 필요한 의한 곱셈을 의미했습니다 . X=(X1,X2,,Xn)Y=(Y1,Y2,,Yn)ρ^n=sxy/(sxsy)XYn1/2ρ^nn1/2
추기경

1
@Richard, "문제"의 본질은 (a) 각 행의 규범이 1이고 (b) 임의의 표본에서 항목이 생성된다는 두 가지 제한 사항을 적용함으로써 상관 관계를 반드시 강제해야한다는 것입니다. 작음 ( 의 순서로) 그 이유는 행 사이에 임의로 큰 상관 관계를 가질 수없고 독립성이 매우 높은 경우 각 행의 규범을 1로 유지할 수 있기 때문입니다.n1/2
추기경

1
... 지금, 당신은에 의해 크기가 더 큰 상관 관계를 얻을 수 있습니다 첫째 renormalizing 전에 그들 사이 행의 상관 관계. 그러나 본질적으로 재생할 매개 변수는 하나뿐이므로 점근 평균과 분산 모두 해당 매개 변수에 연결됩니다. 따라서 원하는 유연성을 얻지 못할 수도 있습니다.
추기경

1
물론 간단한 사례를 보자. 생성 행렬 호출하면 일반성을 잃지 않고 이라고 가정합니다 . 이제 의 을 iid 벡터 로 생성하여 각 벡터의 요소가 correlation 와 동등한 상관 관계에있는 표준 정규 랜덤 변수가되도록 합니다. 지금까지의 절차를 사용하십시오. 하자 사이의 샘플의 상관 관계를 나타내는 번째 및 의 번째 행 * * . 그런 다음 고정 경우 ,m × n 개의Xm×nXρρ^ijijXmnn1/2(ρ^ijρ) 랜덤 변수 로 분포가 수렴 합니다. N(0,(1ρ2)2)
추기경

답변:


5

나는 내가 지금 생각하는 것을 차선책이라고 제안했다. 따라서 더 나은 제안으로 시작하기 위해 답변을 편집했습니다.


포도 나무 방법 사용

이 스레드에서 : 임의의 양의 반음계 상관 행렬을 효율적으로 생성하는 방법은 무엇입니까? -랜덤 상관 행렬을 생성하는 두 가지 효율적인 알고리즘에 대한 코드를 설명하고 제공했습니다. 둘 다 Lewandowski, Kurowicka 및 Joe (2009) 의 논문에서 나온 것입니다 .

많은 그림과 MATLAB 코드에 대한 내 대답을 참조하십시오 . 여기서 포도 나무 방법을 사용하면 부분 상관 관계 분포 ( "부분"참고)로 임의의 상관 관계 행렬을 생성 할 수 있으며 큰 비 대각선 값을 갖는 상관 관계 행렬을 생성하는 데 사용할 수 있습니다. 해당 스레드의 관련 그림은 다음과 같습니다.

덩굴 방법

서브 플롯간에 변경되는 유일한 것은 부분 상관 분포가 주위로 집중되는 정도를 제어하는 ​​하나의 매개 변수입니다 . OP가 대략 직각이 아닌 정규 분포를 요구함에 따라, 위와 같은 행렬에 대해 비 대각선 요소의 히스토그램이있는 그림이 있습니다.±1

비 대각선 요소

이 분포는 합리적으로 "정상"이며 표준 편차가 점차 증가하는 것을 볼 수 있습니다. 알고리즘이 매우 빠르다는 것을 추가해야합니다. 자세한 내용은 연결된 스레드를 참조하십시오.


내 원래 답변

당신의 방법의 직선 앞으로 수정 수있는 트릭을 할은 (당신이 분포가 정상으로되고 싶어 얼마나 근접에 따라 다름). 이 답변은 위의 @cardinal의 의견과 내 자신의 질문에 대한 @psarka의 답변에서 영감을 얻었습니다. 강한 상관 관계가있는 큰 전체 순위 무작위 상관 행렬을 생성하는 방법은 무엇입니까?

트릭은 샘플을 상관 관계가 아닌 샘플로 만드는 것 입니다. 다음은 그 예이다 : I는 임의의 행렬을 발생 의 크기 (표준 정규 모든 소자) 다음에서 임의의 번호를 추가 의 각 행에 대한 . 옵션 상관 행렬 (기능 표준화 후) 약 정상적으로 표준 편차 분산 요소 대각 오프 것이다 . 들어X 1000 × 100 [ a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 XX 1 / XX1000×100[a/2,a/2]a=0,1,2,5a=0XX a>0aa=0,1,2,51/1000a>0, I (이 보존 삽입 상관 관계)를 변수 센터링없이 상관 행렬을 계산하고, 오프 - 대각선 엘리먼트의 표준 편차는로 증가 이 도면에 도시 된 바와 같이 (행에 대응 )aa=0,1,2,5

랜덤 상관 행렬

이 모든 행렬은 물론 양의 한정입니다. matlab 코드는 다음과 같습니다.

offsets = [0 1 2 5];
n = 1000;
p = 100;

rng(42) %// random seed

figure
for offset = 1:length(offsets)
    X = randn(n,p);
    for i=1:p
        X(:,i) = X(:,i) + (rand-0.5) * offsets(offset);
    end
    C = 1/(n-1)*transpose(X)*X; %// covariance matrix (non-centred!)

    %// convert to correlation
    d = diag(C);
    C = diag(1./sqrt(d))*C*diag(1./sqrt(d));

    %// displaying C
    subplot(length(offsets),3,(offset-1)*3+1)
    imagesc(C, [-1 1])

    %// histogram of the off-diagonal elements
    subplot(length(offsets),3,(offset-1)*3+2)
    offd = C(logical(ones(size(C))-eye(size(C))));
    hist(offd)
    xlim([-1 1])

    %// QQ-plot to check the normality
    subplot(length(offsets),3,(offset-1)*3+3)
    qqplot(offd)

    %// eigenvalues
    eigv = eig(C);
    display([num2str(min(eigv),2) ' ... ' num2str(max(eigv),2)])
end

이 코드의 출력 (최소 및 최대 고유 값)은 다음과 같습니다.

0.51 ... 1.7
0.44 ... 8.6
0.32 ... 22
0.1 ... 48

이 방법을 사용하여 얻은 가장 작은 고유 값을 플롯과 함께 플롯 할 수 있습니까?
user603

1
그림을 변경하지 않고 가장 작은 고유 값이 각각 그림의 각 행에 대해 각각 0.5, 0.4, 0.3 및 0.1임을 간단히 쓸 수 있습니다. 가장 큰 것은 1.7에서 48로 자랍니다.
amoeba

그러나 이들은 상관 행렬의 고유 값 또는 X'X의 고유 값입니까?
user603

이것은 내 행렬 의 고유 값 으로, 대각선에 값을 갖도록 정규화되어 상관 관계 행렬과 같습니다. 코드에서 볼 수 있도록 답변을 업데이트했습니다. 이것이 가능하다는 것을 의심하게 만드는 것이 무엇인지 물어봐도 될까요? 큰 상관 행렬이 매우 작은 비 대각선 요소를 가져야한다고 생각할만한 이유가 있습니까? C
amoeba

나는 그것이 불가능하다고 생각하지 않으며, 코드에서 그것을 볼 수 없었습니다 (이 시점에서 수년간 matlab을 사용하지 않았습니다)
user603


1

랜덤 상관 행렬을 생성하려는 경우 Wishart 분포에서 샘플링을 고려하십시오. 이 다음 질문은 Wishart 분포에 대한 정보와 샘플링 방법에 대한 조언을 제공합니다 .


그러나 Wishart 분포의 매개 변수를 사용하여 결과 대각선 이외의 요소의 표준 편차를 제어 할 수 있습니까? 그렇다면 어떻게?
amoeba

1

이것은 매우 정교한 답변은 아니지만 도움이 될 수는 없지만 여전히 좋은 답변이라고 생각합니다 ...

시계열 데이터로 생성 된 상관 매개 변수가 정상적으로 보이는 경향이 있다면 시계열 데이터를 시뮬레이션하고 상관 매개 변수를 계산하여 사용하는 것이 어떻습니까?

당신이 이것을하지 않는 좋은 이유가있을 수 있지만, 당신의 질문에서 분명하지 않습니다.

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