나는 내가 지금 생각하는 것을 차선책이라고 제안했다. 따라서 더 나은 제안으로 시작하기 위해 답변을 편집했습니다.
포도 나무 방법 사용
이 스레드에서 : 임의의 양의 반음계 상관 행렬을 효율적으로 생성하는 방법은 무엇입니까? -랜덤 상관 행렬을 생성하는 두 가지 효율적인 알고리즘에 대한 코드를 설명하고 제공했습니다. 둘 다 Lewandowski, Kurowicka 및 Joe (2009) 의 논문에서 나온 것입니다 .
많은 그림과 MATLAB 코드에 대한 내 대답을 참조하십시오 . 여기서 포도 나무 방법을 사용하면 부분 상관 관계 분포 ( "부분"참고)로 임의의 상관 관계 행렬을 생성 할 수 있으며 큰 비 대각선 값을 갖는 상관 관계 행렬을 생성하는 데 사용할 수 있습니다. 해당 스레드의 관련 그림은 다음과 같습니다.
서브 플롯간에 변경되는 유일한 것은 부분 상관 분포가 주위로 집중되는 정도를 제어하는 하나의 매개 변수입니다 . OP가 대략 직각이 아닌 정규 분포를 요구함에 따라, 위와 같은 행렬에 대해 비 대각선 요소의 히스토그램이있는 그림이 있습니다.±1
이 분포는 합리적으로 "정상"이며 표준 편차가 점차 증가하는 것을 볼 수 있습니다. 알고리즘이 매우 빠르다는 것을 추가해야합니다. 자세한 내용은 연결된 스레드를 참조하십시오.
내 원래 답변
당신의 방법의 직선 앞으로 수정 수있는 트릭을 할은 (당신이 분포가 정상으로되고 싶어 얼마나 근접에 따라 다름). 이 답변은 위의 @cardinal의 의견과 내 자신의 질문에 대한 @psarka의 답변에서 영감을 얻었습니다. 강한 상관 관계가있는 큰 전체 순위 무작위 상관 행렬을 생성하는 방법은 무엇입니까?
트릭은 샘플을 상관 관계가 아닌 샘플로 만드는 것 입니다. 다음은 그 예이다 : I는 임의의 행렬을 발생 의 크기 (표준 정규 모든 소자) 다음에서 임의의 번호를 추가 의 각 행에 대한 . 옵션 상관 행렬 (기능 표준화 후) 약 정상적으로 표준 편차 분산 요소 대각 오프 것이다 . 들어X 1000 × 100 [ − a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 X ⊤ X 1 / √XX1000×100[−a/2,a/2]a=0,1,2,5a=0X⊤X a>0aa=0,1,2,51/1000−−−−√a>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