Giả sử chúng ta có
X 2 ~ unif ( n , 0 , 1 ) ,
trong đó là mẫu ngẫu nhiên đồng nhất có kích thước n và
Khi đó tương quan giữa và là .Z 0,4
Làm cách nào tôi có thể mở rộng biến này thành ba biến: , , ?X 2 X 3
Giả sử chúng ta có
X 2 ~ unif ( n , 0 , 1 ) ,
trong đó là mẫu ngẫu nhiên đồng nhất có kích thước n và
Khi đó tương quan giữa và là .Z 0,4
Làm cách nào tôi có thể mở rộng biến này thành ba biến: , , ?X 2 X 3
Câu trả lời:
Câu hỏi có một số lỗi như đã lưu ý trong các nhận xét - như được xác định trong câu hỏi, Z không đồng nhất và cũng không có mối tương quan được chỉ định.
Đức hồng y đề cập đến các công thức, và đó là cách tổng quát nhất để nói về nó. Tuy nhiên, có một số cách khá dễ dàng để có được đồng phục tương quan (có thể được xem như là các phím tắt đơn thuần cho các loại công thức khác nhau).
Vì vậy, hãy bắt đầu với một số cách để có được một cặp đồng phục tương quan.
1) Nếu bạn thêm hai đồng phục, kết quả là hình tam giác, không đồng nhất. Nhưng bạn có thể sử dụng cdf của biến kết quả làm biến đổi để đưa kết quả trở lại đồng phục. Tất nhiên, kết quả không tương quan tuyến tính nữa.
Đây là hàm R để biến đổi một tam giác đối xứng trên (0,2) thành đồng phục tiêu chuẩn
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
Hãy kiểm tra xem nó có đồng phục không
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
Và nó tương quan với u1 và u2:
> cor(cbind(u1,u2,v1))
u1 u2 v1
u1 1.000000000 0.006311667 0.7035149
u2 0.006311667 1.000000000 0.7008528
v1 0.703514895 0.700852805 1.0000000
nhưng không tuyến tính, do sự biến đổi đơn điệu thành đồng nhất
Với công cụ này, chúng tôi có thể tạo ra một số biến bổ sung để có được ba đồng phục tương đương:
u3 = runif(30000)
v2 = t2u(u1+u3)
v3 = t2u(u2+u3)
cor(cbind(v1,v2,v3))
v1 v2 v3
v1 1.0000000 0.4967572 0.4896972
v2 0.4967572 1.0000000 0.4934746
v3 0.4896972 0.4934746 1.0000000
Mối quan hệ giữa các biến v đều giống như thế này:
-
Một cách khác là tạo ra bằng cách lấy hỗn hợp . Thay vì tổng hợp đồng phục, hãy mang chúng với xác suất cố định.
ví dụ
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
Mà một lần nữa có thể được sử dụng để tạo ra nhiều đồng phục tương quan.
-
Cách tiếp cận đơn giản thứ ba là tạo ra các quy tắc tương quan và biến đổi thành tính đồng nhất.
n1=rnorm(30000)
n2=rnorm(30000)
n3=rnorm(30000)
x=.6*n1+.8*n2
y=.6*n2+.8*n3
z=.6*n3+.8*n1
cor(cbind(x,y,z))
x y z
x 1.0000000 0.4763703 0.4792897
y 0.4763703 1.0000000 0.4769403
z 0.4792897 0.4769403 1.0000000
Vì vậy, bây giờ chúng tôi chuyển đổi sang đồng phục:
w1 = pnorm(x)
w2 = pnorm(y)
w3 = pnorm(z)
cor(cbind(w1,w2,w3))
w1 w2 w3
w1 1.0000000 0.4606723 0.4623311
w2 0.4606723 1.0000000 0.4620257
w3 0.4623311 0.4620257 1.0000000
Một điều thú vị về phương pháp 2 và 3 là bạn có nhiều sự lựa chọn về cách mọi thứ có thể tương quan (và chúng không phải được đánh giá tương tự như các ví dụ ở đây).
Tất nhiên có rất nhiều cách tiếp cận khác, nhưng tất cả đều nhanh chóng và dễ dàng.
Phần khó khăn là nhận được chính xác mối tương quan dân số mong muốn; nó không hoàn toàn đơn giản như khi bạn chỉ muốn các Gaussian tương quan. Câu trả lời của Quantibex tại Tạo các cặp số ngẫu nhiên được phân bổ và tương quan thống nhất đưa ra một cách tiếp cận sửa đổi phương pháp thứ ba của tôi ở đây để đưa ra mối tương quan dân số mong muốn.
Điều này sẽ bắt đầu cho bạn trên con đường phân tách một chuỗi thành các thành phần của nó giống như cách bạn phân tách một vectơ thành các thành phần trực giao của nó.