Làm thế nào để tạo ma trận tương quan ngẫu nhiên có các mục ngoài đường chéo được phân phối bình thường với độ lệch chuẩn đã cho?


11

Tôi muốn tạo ra một ma trận tương quan ngẫu nhiên sao cho sự phân bố các phần tử nằm ngoài đường chéo của nó trông gần giống như bình thường. Tôi làm nó như thế nào?

Động lực là thế này. Đối với một tập hợp dữ liệu chuỗi thời gian , phân phối tương quan thường trông khá gần với bình thường. Tôi muốn tạo ra nhiều ma trận tương quan "bình thường" để thể hiện tình hình chung và sử dụng chúng để tính toán số rủi ro.n


Tôi biết một phương thức, nhưng độ lệch chuẩn kết quả (phân phối các phần tử ngoài đường chéo) quá nhỏ so với mục đích của tôi: tạo đồng nhất hoặc ngẫu nhiên bình thường của ma trận X , chuẩn hóa các hàng (trừ giá trị trung bình, chia cho độ lệch chuẩn), sau đó ma trận tương quan mẫu 1nXđã thường được phân phối off-diagonal mục [Updatesau khi nhận xét: độ lệch chuẩn sẽ~n-1/2].1n1XXn1/2

Bất cứ ai có thể đề xuất một phương pháp tốt hơn mà tôi có thể kiểm soát độ lệch chuẩn?


1
@Richard, cảm ơn câu hỏi của bạn. Thật không may, phương pháp bạn mô tả ở trên sẽ không tạo ra các mục thường được phân phối. Các đường chéo là 1 với xác suất một và các đường chéo được giới hạn trong khoảng từ đến + 1 . Bây giờ, các mục được thay đổi tỷ lệ sẽ hội tụ không có triệu chứng với phân phối bình thường tập trung vào khoảng không. Bạn có thể cho chúng tôi biết thêm thông tin về vấn đề bạn thực sự đang cố gắng giải quyết không? Và, tại sao bạn muốn "phân phối bình thường" ra khỏi đường chéo? 1+1
Đức hồng y

1
@ Richard, những gì tôi có nghĩa là, giả sử Y = ( Y 1 , Y 2 , ... , Y n ) là hai vectơ độc lập như vậy mà mục của từng iid Tiêu chuẩn bình thường. Tính ρ n = s x y / ( s x s y ) ; đó là, mối tương quan mẫu giữa XX=(X1,X2,,Xn)Y=(Y1,Y2,,Yn)ρ^n=sxy/(sxsy)X . Sau đó n 1 / 2 ρ n hội tụ trong phân phối cho một biến ngẫu nhiên tiêu chuẩn bình thường. Bằng cách "rescaled", tôi đồng nghĩa với việc nhân giống bằng n 1 / 2 đó là những gì là cần thiết để có được một mạt pháp hạn chế phân phối phi. Yn1/2ρ^nn1/2
Đức hồng y

1
@Richard, bản chất của "vấn đề" là bằng cách đưa ra hai hạn chế (a) rằng các chỉ tiêu của mỗi hàng là 1 và (b) rằng các mục được tạo từ một mẫu ngẫu nhiên, bạn nhất thiết phải buộc các mối tương quan phải khá nhỏ (vào thứ tự của . lý do là bạn không thể có tương quan tùy tiện lớn giữa các hàng và vẫn nhận được các chỉ tiêu của mỗi hàng là 1 trong sự hiện diện của rất nhiều độc lập.n1/2
hồng y

1
... bây giờ, bạn có thể nhận được các mối tương quan lớn hơn về độ lớn bằng cách trước tiên tương quan các hàng với nhau trước khi tái chuẩn hóa. Nhưng, về cơ bản, bạn chỉ có một tham số để chơi, vì vậy cả trung bình và phương sai tiệm cận sẽ được gắn với tham số đó. Vì vậy, điều đó có lẽ sẽ không cung cấp cho bạn sự linh hoạt mà bạn dường như muốn.
Đức hồng y

1
Chắc chắn, hãy lấy một trường hợp đơn giản. Gọi ma trận tạo , mà chúng ta sẽ giả sử là m × n mà không mất tính tổng quát. Bây giờ, tạo ra các cột của X là iid vectơ như vậy mà các yếu tố của mỗi vector là các biến ngẫu nhiên bình thường tiêu chuẩn được equicorrelated với tương quan ρ . Bây giờ, sử dụng các thủ tục bạn đã được. Hãy ρ i j biểu thị mối tương quan mẫu giữa i th và j thứ * hàng * của X . Sau đó cho cố định m , cho phép n ,Xm×nXρρ^ijijXmn hội tụ trong phân phối cho một N ( 0 , ( 1 - ρ 2 ) 2 ) biến ngẫu nhiên. n1/2(ρ^ijρ)N(0,(1ρ2)2)
Đức hồng y

Câu trả lời:


5

Trước tiên tôi đã cung cấp những gì tôi tin là một câu trả lời tối ưu; do đó tôi chỉnh sửa câu trả lời của mình để bắt đầu với một gợi ý tốt hơn.


Sử dụng phương pháp cây nho

Trong chủ đề này: Làm thế nào để tạo hiệu quả các ma trận tương quan dương-semidefinite ngẫu nhiên? - Tôi đã mô tả và cung cấp mã cho hai thuật toán hiệu quả để tạo ma trận tương quan ngẫu nhiên. Cả hai đều đến từ một bài báo của Lewandowski, Kurowicka và Joe (2009).

Xin vui lòng xem câu trả lời của tôi ở đó cho rất nhiều số liệu và mã MATLAB. Ở đây tôi chỉ muốn nói rằng phương pháp cây nho cho phép tạo ra ma trận tương quan ngẫu nhiên với bất kỳ phân phối tương quan một phần nào (lưu ý từ "một phần") và có thể được sử dụng để tạo ma trận tương quan với các giá trị đường chéo lớn. Đây là con số liên quan từ chủ đề đó:

Phương pháp Vine

±1

Các yếu tố ngoài đường chéo

Tôi nghĩ rằng sự phân phối này là "bình thường" một cách hợp lý, và người ta có thể thấy độ lệch chuẩn tăng dần. Tôi nên thêm rằng thuật toán rất nhanh. Xem chủ đề liên kết để biết chi tiết.


Câu trả lời ban đầu của tôi

Một sửa đổi thẳng về phương pháp của bạn có thể thực hiện thủ thuật (tùy thuộc vào mức độ bạn muốn phân phối trở nên bình thường). Câu trả lời này được lấy cảm hứng từ những bình luận của @ cardinal ở trên và bởi câu trả lời của @ psarka cho câu hỏi của riêng tôi Làm thế nào để tạo ra một ma trận tương quan ngẫu nhiên đầy đủ thứ hạng lớn với một số tương quan mạnh hiện diện?

XX1000×100[a/2,a/2]a=0,1,2,5a=0XX1/1000a>0aa=0,1,2,5

ma trận tương quan ngẫu nhiên

Tất cả các ma trận này tất nhiên là tích cực xác định. Đây là mã 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

Đầu ra của mã này (giá trị riêng tối thiểu và tối đa) là:

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

bạn có thể vẽ giá trị của các giá trị riêng nhỏ nhất bạn có được bằng phương pháp này cùng với các ô không?
user603

1
Không thay đổi hình, tôi có thể chỉ cần viết ở đây rằng các giá trị riêng nhỏ nhất lần lượt là 0,5, 0,4, 0,3 và 0,1 (cho mỗi hàng của hình của tôi). Những con lớn nhất tăng từ 1,7 lên 48.
amip nói rằng Rebstate Monica

nhưng đây có phải là giá trị riêng của ma trận tương quan hay của X'X?.
dùng603

C

Tôi không nghĩ là không thể, tôi chỉ không thể nhìn thấy nó từ mã (đã không sử dụng MATLAB trong nhiều năm tại thời điểm này)
user603


1

Nếu bạn đang cố gắng tạo ma trận tương quan ngẫu nhiên, hãy xem xét lấy mẫu từ phân phối Wishart. Câu hỏi sau đây cung cấp thông tin về phân phối Wishart cũng như lời khuyên về cách lấy mẫu: Làm thế nào để tạo hiệu quả các ma trận tương quan dương-semidefinite ngẫu nhiên?


Nhưng liệu người ta có thể kiểm soát độ lệch chuẩn của các phần tử đường chéo kết quả với các tham số của phân phối Wishart không? Nếu vậy thì thế nào?
amip nói Phục hồi lại

1

Đây không phải là một câu trả lời quá phức tạp, nhưng tôi không thể không nghĩ rằng đó vẫn là một câu trả lời hay ...

Nếu động lực của bạn là các tham số tương quan được tạo ra bởi dữ liệu chuỗi thời gian có xu hướng trông bình thường, tại sao không chỉ mô phỏng dữ liệu chuỗi thời gian, tính toán các tham số tương quan và sử dụng chúng?

Bạn có thể có một lý do chính đáng để không làm điều này, nhưng nó không rõ ràng với tôi từ câu hỏi của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.