Sembra che tu stia chiedendo come generare dati con una particolare matrice di correlazione.
Un fatto utile è che se si dispone di un vettore casuale con la matrice di covarianza Σ , allora il vettore casuale A x ha medio A E ( x ) e la matrice di covarianza Ω = A Σ A T . Quindi, se inizi con dati con zero medio, la moltiplicazione per A non lo cambierà, quindi il tuo primo requisito sarà facilmente soddisfatto. XΣA xA E( x )Ω = A Σ ATUN
Diciamo che si inizia con i dati non correlati (media zero) (cioè la matrice di covarianza è diagonale) - dal momento che stiamo parlando della matrice di correlazione, facciamo solo prendere . Puoi trasformarlo in dati con una data matrice di covarianza scegliendo A per essere la radice quadrata cholesky di Ω - quindi A x avrebbe la matrice di covarianza desiderata Ω .Σ = IUNΩA xΩ
Nel tuo esempio, sembra che desideri qualcosa del genere:
Ω = ⎛⎝⎜1.80.81.80.81⎞⎠⎟
Sfortunatamente quella matrice non è definita positiva, quindi non può essere una matrice di covarianza - puoi verificarla vedendo che il determinante è negativo. Forse, invece
Ω = ⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ o r Ω= ⎛ ⎝⎜12 / 302 / 312 / 302 / 31⎞⎠⎟
basterebbe. Non sono sicuro di come calcolare la radice quadrata cholesky in matlab (che sembra essere quello che stai usando) ma in R
te puoi usare la chol()
funzione.
In questo esempio, per i due elencati sopra, i multipli di matrice appropriati (rispettivamente) sarebberoΩ
A = ⎛⎝⎜1.8.30.60,933000,1972⎞⎠⎟ o r A = ⎛ ⎝⎜12 / 3000,74530,8944000,4472⎞⎠⎟
Il R
codice usato per arrivare a questo era:
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