Nếu tôi có một vectơ xác suất tương quan. Làm thế nào tôi có thể biến chúng thành nhị phân mà không phá hủy mối tương quan?


8

Mục tiêu cuối cùng của tôi là có thể có một cách để tạo ra một vectơ kích thước của các biến ngẫu nhiên Bernoulli tương quan. Một cách tôi đang làm là sử dụng phương pháp Gaussian Coupla. Tuy nhiên, cách tiếp cận Gaussian Coupla chỉ để lại cho tôi một vectơ:N

(p1,,pN)[0,1]N

Giả sử rằng tôi đã tạo sao cho mối tương quan phổ biến giữa chúng là . Bây giờ, làm thế nào tôi có thể biến đổi chúng thành một vectơ mới hoặc ? Nói cách khác, tôi muốn:ρ 0 1(p1,,pN)ρ01

(X1,,XN){0,1}N

nhưng với cùng một mối tương quan .ρ

Một cách tiếp cận tôi nghĩ đến là gán một quy tắc cắt cứng sao cho nếu , thì hãy để và nếu , thì hãy để .X i = 0 p i0,5 X i = 1pi<0.5Xi=0pi0.5Xi=1

Điều này dường như hoạt động tốt trong các mô phỏng ở chỗ nó vẫn giữ cấu trúc tương quan nhưng nó rất tùy tiện đối với tôi nên chọn giá trị ngưỡng nào ngoài .0.5

Một cách khác là coi mỗi là biến ngẫu nhiên Bernoulli với xác suất thành công và lấy mẫu từ nó. Tuy nhiên, cách tiếp cận này dường như gây mất tương quan và thay vì , tôi có thể nhận được hoặc .p i ρ ρXipiρ ρρ2ρ3

Có ai có bất kỳ suy nghĩ hoặc đầu vào vào điều này? Cảm ơn bạn.


3
Bạn có N biến. Tại sao bạn chỉ nói về rho duy nhất mà không phải là một ma trận của rhos?
ttnphns

Câu trả lời:


3

Tôi không hiểu Gaussian Copula đủ để biết vấn đề là gì. Nhưng tôi đã tìm thấy một cách để tạo ra các vectơ Bernoulli tương quan.

Theo dõi https://mathoverflow.net/a/19436/105908 nếu chúng ta lấy một tập các vectơ cố định và một vectơ ngẫu nhiên trên quả cầu đơn vị , chúng ta có thể chuyển đổi thành nhị phân trong đó . Trong thiết lập này, trong đó là góc giữa và . u u X X i = ( u v i > 0 ) c o r ( X i , X j ) = π - 2 θ ( i , j )v1...vnuuXXi=(uvi>0) q(i,j)vivjcor(Xi,Xj)=π2θ(i,j)πθ(i,j)vivj

Cách tìm ma trận phù hợpđể tạo ra ma trận tương quan mong muốn ? Điều kiện góc chuyển thành và do đó chúng ta có thể tìm thấy với phân tách Cholesky.R V V T = c o s ( - π R - πV=|v1...vn|RVVVT=cos(πRπ2)V

Một mã ví dụ trong R như sau:

#Get a simple correlation matrix 
N = 3
cor_matrix <- matrix(c(1,0.5,0.8,0.5,1,0.3,0.8,0.3,1), N, N)

#Calculate the vectors with desired angles
vector_matrix <- chol(cos( (pi * cor_matrix - pi) * -0.5))

#You can generate random unit vectors by normalizing a vector 
#of normally distributed variables, note however that the normalization
#does not affect the sign of the dot product and so we ignore it
num_samples <- 10000
normal_rand <- matrix(rnorm(num_samples * N), num_samples, N)

#Generate the target variables
B <- (normal_rand %*% vector_matrix) > 0

#See for yourself that it works
cor(B)  
cor(B) - cor_matrix 

Cảm ơn @ jakub-bartczuk vì đã liên kết với câu hỏi MO - tôi sẽ không tự mình tìm thấy câu hỏi đó.


Đoạn mã trên có một hạn chế lớn: các phân phối biên được cố định tại . Tôi hiện không biết làm thế nào để mở rộng cách tiếp cận này để phù hợp với cả tương quan và phân phối biên. Một câu trả lời khác có một cách tiếp cận cho trường hợp chung, nhưng nó mất rất nhiều sự đơn giản (nó liên quan đến tích hợp số). Ngoài ra còn có một bài báo gọi là Tạo các Xe lửa Spike với các Hệ số Tương quan được Chỉ địnhgói Matlab đi kèm trong đó việc lấy mẫu liên quan đến việc "chỉ" tìm số 0 duy nhất của hàm đơn điệu bằng cách chia đôi.XiBernoulli(0.5)


Cảm ơn bạn, điều này là tuyệt vời! Tôi có thể hỏi làm thế nào bạn có được điều kiện góc là không? Cảm ơn! VVT=cos(πRπ2)
dùng321627

1
@ user321627 Bạn bắt đầu với và mối quan hệ của sản phẩm chấm với góc Từ đó đại số tuyến tính tương đối đơn giản Tôi quá lười để viết xuống máy tính :-) q(i,j)=mộtrccos(vi.vjRi,j=π2θ(i,j)πθ(i,j)=arccos(vi.vj|vi|.|vj|)
Martin Modrák
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.