Estoy tratando de generar una secuencia aleatoria correlacionada con media = , varianza = , coeficiente de correlación = . En el siguiente código, uso & como desviaciones estándar y & como medio.0.8s1
s2
m1
m2
p = 0.8
u = randn(1, n)
v = randn(1, n)
x = s1 * u + m1
y = s2 * (p * u + sqrt(1 - p^2) * v) + m2
Esto me da el correcto corrcoef()
de 0.8 entre x
y y
. Mi pregunta es cómo puedo generar una serie de medios si quiero z
que también esté correlacionado con y
(con la misma correlación ), pero no con . ¿Hay una fórmula particular que necesito saber? Encontré uno pero no pude entenderlo.x
Respuestas:
Parece que está preguntando cómo generar datos con una matriz de correlación particular.
Un hecho útil es que si tiene un vector aleatorio con matriz de covarianza Σ , entonces el vector aleatorio A x tiene media A E ( x ) y matriz de covarianza Ω = A Σ A T . Por lo tanto, si comienza con datos que tienen una media de cero, la multiplicación por A no cambiará eso, por lo que su primer requisito se cumple fácilmente.x Σ Ax AE(x) Ω=AΣAT A
Digamos que usted comienza con los datos correlacionados (media cero) (es decir, la matriz de covarianza es diagonal) - ya que estamos hablando de la matriz de correlación, vamos a tomar . Puede transformar esto en datos con una matriz de covarianza dada eligiendo A como la raíz cuadrada cholesky de Ω ; entonces A x tendría la matriz de covarianza deseada Ω .Σ=I A Ω Ax Ω
En su ejemplo, parece querer algo como esto:
Desafortunadamente, esa matriz no es positiva definida, por lo que no puede ser una matriz de covarianza; puede verificar esto al ver que el determinante es negativo. Quizás, en cambio
bastaría. No estoy seguro de cómo calcular la raíz cuadrada de Cholesky en Matlab (que parece ser lo que estás usando), pero
R
puedes usar lachol()
función.En este ejemplo, para los dos s enumerados anteriormente, los múltiplos de matriz adecuados (respectivamente) seríanΩ
El
R
código utilizado para llegar a esto fue:fuente
chol
. Tenga en cuenta que esto puede ser bastante inestable numéricamente si es casi singular. En ese caso, usar la raíz cuadrada simétrica obtenida, por ejemplo, a través de la SVD, es a menudo una mejor opción en términos de estabilidad numérica. :)Si está utilizando R, también puede usar la función mvrnorm del paquete MASS, suponiendo que desea variables normalmente distribuidas. La implementación es similar a la descripción de Macro anterior, pero utiliza los vectores propios de la matriz de correlación en lugar de la descomposición colesky y la escala con una descomposición de valor singular (si la opción empírica se establece en verdadero).
Where X' is a normally distributed matrix with correlation matrix ofΣ and column means are the same as X .
Note that the correlation matrix have to be positive definite, but converting it with the nearPD function from the Matrix package in R will be useful.
fuente
An alternative solution without cholesky factorization is the following. LetΣy the desired covariance matrix and suppose you have data x with Σx=I . Suppose Σy is positive definite with Λ the diagonal matrix of the eigenvalues and V the matrix of column eigenvectors .
You can writeΣy=VΛVT=(VΛ−−√)(Λ−−√TVT)=AAT .
fuente