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 R
bạ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 R
mã đượ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