+1 cho @ user11852 và @ jem77bfp, đây là những câu trả lời hay. Hãy để tôi tiếp cận điều này từ một khía cạnh khác, không phải vì tôi nghĩ nó thực sự tốt hơn trong thực tế , mà bởi vì tôi nghĩ nó mang tính hướng dẫn. Dưới đây là một vài sự thật có liên quan mà chúng tôi đã biết:
- X Y N ( 0 , 1 )r là độ dốc của đường hồi quy khi cả và được chuẩn hóa , nghĩa là , XYN(0,1)
Y Xr2 là tỷ lệ của phương sai trong quy cho phương sai trong , YX
(cũng, từ các quy tắc cho phương sai ):
- phương sai của một biến ngẫu nhiên nhân với một hằng số là bình phương nhân với phương sai ban đầu:
Var[aX]=a2Var[X]
- phương sai thêm , tức là phương sai của tổng hai biến ngẫu nhiên (giả sử chúng là độc lập) là tổng của hai phương sai:
Var[X+ε]=Var[X]+Var[ε]
Bây giờ, chúng ta có thể kết hợp bốn sự kiện này để tạo ra hai biến thông thường tiêu chuẩn mà quần thể của chúng sẽ có mối tương quan nhất định, (đúng hơn, ), mặc dù các mẫu bạn tạo sẽ có tương quan mẫu khác nhau. Ý tưởng là tạo ra một biến giả ngẫu nhiên , đó là tiêu chuẩn thông thường, , sau đó tìm một hệ số, và phương sai lỗi, , sao cho , trong đó . (Lưu ý rằng phải là để nó hoạt động và hơn nữa, .) Vì vậy, bạn bắt đầu vớiρ X N ( 0 , 1 ) a v e Y ∼ N ( 0 , a 2 + v e ) a 2 + v e = 1 | một | ≤ 1 a = r r a 1 - r 2 x i e i v e y irρXN(0,1)aveY∼N(0,a2+ve)a2+ve=1|a| ≤1a=rr mà bạn muốn; đó là hệ số của bạn, . Sau đó, bạn tìm ra phương sai lỗi mà bạn sẽ cần, đó là . (Nếu phần mềm của bạn yêu cầu bạn sử dụng độ lệch chuẩn, hãy lấy căn bậc hai của giá trị đó.) Cuối cùng, với mỗi biến thể giả ngẫu nhiên, , mà bạn đã tạo, tạo ra một sai số giả ngẫu nhiên, , với phương sai lỗi thích hợp , và tính toán các biến giả ngẫu nhiên tương quan, , bằng cách nhân và thêm. a1−r2xieiveyi
Nếu bạn muốn làm điều này trong R, đoạn mã sau có thể phù hợp với bạn:
correlatedValue = function(x, r){
r2 = r**2
ve = 1-r2
SD = sqrt(ve)
e = rnorm(length(x), mean=0, sd=SD)
y = r*x + e
return(y)
}
set.seed(5)
x = rnorm(10000)
y = correlatedValue(x=x, r=.5)
cor(x,y)
[1] 0.4945964
(Chỉnh sửa: Tôi quên đề cập :) Như tôi đã mô tả, quy trình này cung cấp cho bạn hai biến tương quan chuẩn thông thường. Nếu bạn không muốn các quy tắc chuẩn , nhưng muốn các biến có một số phương tiện cụ thể (không phải 0) và SD (không phải 1), bạn có thể chuyển đổi chúng mà không ảnh hưởng đến mối tương quan. Do đó, bạn sẽ trừ đi giá trị trung bình quan sát được để đảm bảo rằng giá trị trung bình chính xác bằng , nhân biến số với SD bạn muốn và sau đó thêm giá trị trung bình bạn muốn. Nếu bạn muốn giá trị trung bình quan sát dao động bình thường xung quanh giá trị trung bình mong muốn, bạn sẽ thêm lại chênh lệch ban đầu. Về cơ bản, đây là một phép biến đổi điểm z theo chiều ngược lại. Bởi vì đây là một biến đổi tuyến tính, biến được chuyển đổi sẽ có cùng mối tương quan với biến khác như trước đây. 0
Một lần nữa, điều này, ở dạng đơn giản nhất, chỉ cho phép bạn tạo ra một cặp biến tương quan (điều này có thể được nhân rộng, nhưng trở nên xấu nhanh), và chắc chắn không phải là cách thuận tiện nhất để hoàn thành công việc. Trong R, bạn sẽ muốn sử dụng ? Mvrnorm trong gói MASS , vì cả hai đều dễ dàng hơn và vì bạn có thể tạo nhiều biến với ma trận tương quan dân số nhất định. Tuy nhiên, tôi nghĩ rằng đáng để thực hiện quy trình này để xem một số nguyên tắc cơ bản diễn ra theo cách đơn giản.