Có vẻ như bạn đang hỏi cách tạo dữ liệu với ma trận tương quan cụ thể.
Một thực tế hữu ích ở đây là nếu bạn có một véc tơ ngẫu nhiên với hiệp phương sai ma trận Σ , thì ngẫu nhiên vector Một x có nghĩa là A E ( x ) và ma trận hiệp phương saixΣAxAE(x) . Vì vậy, nếu bạn bắt đầu với dữ liệu có nghĩa là 0, nhân với A sẽ không thay đổi điều đó, vì vậy yêu cầu đầu tiên của bạn dễ dàng được thỏa mãn. Ω=AΣATA
Hãy nói rằng bạn bắt đầu với (zero bình) dữ liệu không tương quan (tức là ma trận hiệp phương sai là đường chéo) - kể từ khi chúng ta đang nói về ma trận tương quan, chúng ta hãy chỉ mất . Bạn có thể chuyển đổi dữ liệu này thành dữ liệu với ma trận hiệp phương sai đã cho bằng cách chọn AΣ=IA là căn bậc hai Cholesky của - sau đó A x sẽ có mong muốn hiệp phương sai ma trận Ω .ΩAxΩ
Trong ví dụ của bạn, bạn dường như muốn một cái gì đó như thế này:
Ω=⎛⎝⎜1.80.81.80.81⎞⎠⎟
Thật không may, ma trận không xác định dương, vì vậy nó không thể là ma trận hiệp phương sai - bạn có thể kiểm tra điều này bằng cách thấy rằng định thức là âm. Có lẽ, thay vào đó
Ω=⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ or Ω=⎛⎝⎜12/302/312/302/31⎞⎠⎟
sẽ đủ. Tôi không chắc làm thế nào để tính toán căn bậc hai cholesky trong matlab (dường như là những gì bạn đang sử dụng) nhưng trong Rbạn có thể sử dụng chol()hàm.
Trong ví dụ này, cho hai s liệt kê ở trên các bội số ma trận thích hợp (tương ứng) sẽ làΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.4472⎞⎠⎟
Các Rmã được sử dụng để đi đến được điều này:
x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0 0.0000000 0.0000000
[2,] 0.8 0.6000000 0.0000000
[3,] 0.3 0.9333333 0.1972027
x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136