Mi objetivo es generar dos variables que están correlacionadas y uno de ellos es heteroscedastic con respecto a una variable de agrupación.
Para crear dos variables con un deseada de correlación de la forma más común de hacerlo es utilizar la descomposición de cholesky. Yo, además, utilizar los residuos de la proyección ortogonal y estandarizada de las variables en la parte frontal para asegurarse de que la correlación se mantiene en el valor deseado.
Para introducir la heterocedasticidad para una de las variables que he intentado lo siguiente:
Hice la descomposición de cholesky para u=(u1,u2), p[i]=c(1,1.01,1.02,1.03,...)u=(u1,u2), p[i]=c(1,1.01,1.02,1.03,...)
Var(u)=(1ρ⋅q[i]ρ⋅q[i]q[i]2)
La razón por la cual escogí esta matriz de covarianza es que mientras que el la varianza de u2 aumenta con la q[i] la correlación se mantiene en el valor deseado ρ.
Pero esto, obviamente, no introducir heterocedasticidad a u2....
Un segundo intento fue descompuesto ambas variables u1,u2 con un tamaño de muestra de n en dos partes, cada una de longitud 12⋅n: u1=(u1.1,u1.2),u2=(u2.1,u2.2). Ahora hice la descomposición de cholesky para
Var(u)=(10ρρ√q[i]01ρρ√q[i]ρρ10ρ√q[i]ρ√q[i]0q[i])
Después de que me generan las cuatro variables I fusionado u1.1,u1.2 a una n×1 vector. De forma análoga para u2. Las pruebas de los resultados de los rendimientos que la heterocedasticidad es ahora donde debe ser como la varianza de la u2.2 aumenta con la q[i]. Pero la correlación desaparece como q[i] aumenta debido a que la varianza de u2 aumenta más rápidamente, entonces la covarianza entre el u1 u2
Un tercer intento de que termine haciendo fue multiplicar u2 con un muñeco de la variable de
z2={1q[i]
Este enfoque no funciona para los valores pequeños de a q[i] (como mi gráfico muestra), pero tan pronto como q[i] es lo suficientemente grande como la que domina el numerador y el denominador de la el coeficiente de correlación tal que la varianza condicional (dependiendo del valor de z2) ya no es aumentar el q[i].
Aquí está mi código para el caso (3):
q <- seq(1.01,10,0.1)
n <- 100
rho <- 0.5
sd_u1 <- numeric(0)
sd_u2.1 <- numeric(0)
sd_u2.2 <- numeric(0)
cor_u1_u2 <- numeric(0)
for(i in 1:length(q)){
u1 <- rnorm(n,0,1)
u1 <- ( u1 - mean(u1) )/sd(u1)
u2 <- rnorm(n,0,1)
z2 <- c(rep(1,0.5*n),rep(q[i],0.5*n))
u2 <- u2*z2
u2 <- as.vector( ( diag(n) - u1%*%solve(t(u1)%*%u1)%*%t(u1) ) %*% u2 )
u2 <- ( u2 - mean(u2) )/sd(u2)
z <- cbind(u1, rho*u1+sqrt(1-rho^2)*u2)
sd_u1[i] <- sd(z[,1])
sd_u2.1[i] <- sd(z[,2][1:(0.5*n)])
sd_u2.2[i] <- sd(z[,2][(0.5*n+1):n])
cor_u1_u2[i] <- cor(z[,1],z[,2])
}
par(mfrow=c(3,1))
plot(q,sd_u1, type="l")
plot(q,sd_u2.1, type="l", ylim=c(0,2))
lines(q,sd_u2.2,col="red")
plot(q,cor_u1_u2, type="l")