Tạo dữ liệu với ma trận hiệp phương sai mẫu đã cho


22

Đưa ra ma trận hiệp phương sai , làm thế nào để tạo dữ liệu sao cho ma trận hiệp phương sai mẫu \ hat {\ boldsymbol \ Sigma} = \ boldsymbol \ Sigma_s ?Σ = Σ sΣsΣ^=Σs


Tổng quát hơn: chúng ta thường quan tâm đến việc tạo dữ liệu từ mật độ f(x|θ) , với dữ liệu x được cung cấp một số tham số vector θ . Điều này dẫn đến một mẫu, từ đó chúng ta có thể ước tính lại một giá trị θ^ . Điều tôi quan tâm là vấn đề ngược lại: Điều gì sẽ xảy ra nếu chúng ta được cung cấp một bộ tham số θs và chúng tôi muốn tạo một mẫu x như vậy, đó là θ^= =θS .

Đây có phải là một vấn đề được biết đến? Là một phương pháp hữu ích? Các thuật toán có sẵn?


Một giải pháp có thể mở rộng được cung cấp bởi Attilio Meucci. Xem Điều khoản rủi ro này và mã MATLAB
Peter Cotton

Câu trả lời:


16

Có hai tình huống điển hình khác nhau cho các loại vấn đề này:

i) bạn muốn tạo một mẫu từ một phân phối nhất định có các đặc điểm dân số khớp với các mẫu được chỉ định (nhưng do biến thể lấy mẫu, bạn không có các đặc điểm mẫu khớp chính xác).

ii) bạn muốn tạo một mẫu có các đặc điểm mẫu khớp với các mẫu được chỉ định (nhưng, do các ràng buộc của số lượng mẫu phù hợp chính xác với một bộ giá trị được chỉ định trước, không thực sự đến từ phân phối bạn muốn).

Bạn muốn trường hợp thứ hai - nhưng bạn có được nó bằng cách làm theo cách tiếp cận tương tự như trường hợp thứ nhất, với một bước tiêu chuẩn hóa bổ sung.

Vì vậy, đối với các quy tắc đa biến, có thể được thực hiện theo cách khá đơn giản:

Với trường hợp đầu tiên, bạn có thể sử dụng các quy tắc ngẫu nhiên mà không có cấu trúc dân số (chẳng hạn như tiêu chuẩn iid bình thường có kỳ vọng 0 và ma trận hiệp phương sai danh tính) và sau đó áp dụng nó - biến đổi để có được ma trận hiệp phương sai và có nghĩa là bạn muốn. Nếu và là trung bình dân số và hiệp phương sai bạn cần và là iid chuẩn bình thường, bạn tính , đối với một số trong đó (ví dụ: phù hợp có thể thu được thông qua phân tách Cholesky) . Sau đó có các đặc điểm dân số mong muốn.Σ z y = L z + μ L L L = Σ L yμΣzy=Lz+μLLL=ΣLy

Với thứ hai, trước tiên bạn phải chuyển đổi normals ngẫu nhiên của bạn để loại bỏ ngay cả những sự thay đổi ngẫu nhiên ra khỏi giá trị trung bình và bản sắc hiệp phương sai không (làm cho không có ý nghĩa mẫu và hiệp phương sai mẫu ), sau đó tiến hành như trước đây. Nhưng bước ban đầu đó để loại bỏ độ lệch mẫu khỏi giá trị trung bình chính xác , phương sai cản trở phân phối. (Trong các mẫu nhỏ, nó có thể khá nghiêm trọng.) 0 tôiIn0I

Điều này có thể được thực hiện bằng cách trừ trung bình mẫu của ( ) và tính toán phân tách Cholesky của . Nếu là hệ số Cholesky bên trái, thì nên có giá trị trung bình mẫu 0 và hiệp phương sai mẫu. Sau đó, bạn có thể tính và có một mẫu với các khoảnh khắc mẫu mong muốn. (Tùy thuộc vào cách xác định số lượng mẫu của bạn, có thể có thêm một câu đố nhỏ liên quan đến nhân / chia theo các yếu tố như , nhưng đủ dễ để xác định nhu cầu đó.)z * = z - ˉ z z * L * z ( 0 ) = ( L * ) - 1 z * y = L z ( 0 ) + L zz=zz¯z*L*z(0)= =(L*)-1z*y=Lz(0)+μn1n


1
+1. Vào một ngày khác, tôi cần tạo một số dữ liệu với ma trận hiệp phương sai mẫu nhất định, không biết cách thực hiện và vì một số lý do, tôi đã mất rất nhiều thời gian để tìm câu trả lời của bạn. Để tăng khả năng hiển thị của chủ đề này và để minh họa các đề xuất của bạn, tôi đã đăng một câu trả lời khác ở đây với một số mã Matlab.
amip nói rằng Phục hồi lại

@amoeba Tôi tự hỏi liệu có khả năng đưa một trong số các cụm từ tìm kiếm mà bạn đã sử dụng chưa có ở đây vào các thẻ câu hỏi không (hoặc có thể chèn một số trong một chỉnh sửa nhỏ vào văn bản của câu hỏi, vẫn sẽ giúp tìm thấy nó ). Bây giờ tôi đang tự hỏi liệu tôi có nên làm điều tương tự trong R ... nhưng sau đó nó sẽ tốt hơn trong câu trả lời của tôi, hoặc là một bổ sung cho bạn?
Glen_b -Reinstate Monica

1
Tôi đã tự do chỉnh sửa câu hỏi và cũng cố gắng đưa ra câu trả lời của mình sao cho nó bao gồm càng nhiều từ khóa càng tốt. Hy vọng điều này sẽ giúp. Nhân tiện, tôi đã rất ngạc nhiên khi mẹo đơn giản này (làm trắng dữ liệu được tạo trước khi chuyển sang hiệp phương sai cần thiết) rất khó để google; không thể tìm thấy bất cứ điều gì (trên CV hoặc ở nơi khác), cho đến khi tôi cuối cùng đã tìm thấy câu trả lời của bạn.
amip nói rằng Phục hồi lại

1
@amoeba ơi, được rồi, cảm ơn. Vâng, thực sự, tôi không thể nói rằng tôi nhớ rằng đã từng thấy nó được đề cập ở bất cứ đâu cho trường hợp đa biến (không nghi ngờ gì nữa, vì đó là một ý tưởng khá rõ ràng, đặc biệt là nếu bạn đã nghĩ về nó cho trường hợp đơn biến, hoặc có đã thấy nó trong trường hợp đơn biến).
Glen_b -Reinstate Monica

@Glen_b Như bạn nói, phân phối kết quả của các mẫu "được làm sạch" này không thể bình thường. Bạn có biết phân phối kết quả có thể là gì không? Hoặc có thể bằng hoặc không bằng phân phối có điều kiệnZz¯=μ,Cov(z)=Σ
gg

17

@Glen_b đã đưa ra một câu trả lời tốt (+1), mà tôi muốn minh họa bằng một số mã.

ndΣchol(Σ)

n = 100;
d = 2;
Sigma = [ 1    0.7  ; ...
          0.7   1   ];
rng(42)
X = randn(n, d) * chol(Sigma);

Σcov(X)

1.0690    0.7296
0.7296    1.0720

Làm cách nào để tạo dữ liệu với ma trận mẫu hoặc ma trận hiệp phương sai được chỉ định trước ?

Ichol(Σ)

Đây là phần tiếp theo của ví dụ Matlab của tôi:

X = randn(n, d);
X = bsxfun(@minus, X, mean(X));
X = X * inv(chol(cov(X)));
X = X * chol(Sigma);

Bây giờ cov(X), theo yêu cầu, trả về

1.0000    0.7000
0.7000    1.0000

+1. Bằng cách nào đó câu hỏi này ở nhiều dạng khác nhau ở các vị trí khác nhau trong CV. Có cách nào để tiến hành nếu chúng ta biết rằng phân phối đa biến là không phải là gaussian?
rgk

Nếu bạn biết hình thức phân phối đa biến bạn muốn nó trông như thế nào, có lẽ trong một số trường hợp.
Glen_b -Reinstate Monica
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.