7 votos

Generar sistemas de valores con alto coeficiente de correlación

Disculpa si esto es demasiado simple. No pude conseguir el más avanzado r-grupo de ayuda para responder.

Estoy planeando para caracterizar la carga de trabajo mediante la medición del coeficiente de correlación de dos conjuntos de valores reales, pero antes de eso quiero generar dos conjuntos de valores de la muestra que tienen un alto coeficiente y un bajo coeficiente. Quiero parcela ambos en el mismo gráfico para que yo pueda ver la alta correlación de los valores de' juntos(picos y valles). Puedo usar R y saber sobre rseek.

Si hay cualquier particular R libro que podría ayudar a mi capcaity los esfuerzos de planificación voy a comprar.

Generar una variable aleatoria con una correlación de una variable existente , es un poco demasiado avanzado para mí en este momento.

Nota : Los dos conjuntos de valores que estoy a punto de la trama están relacionados, ya que estoy tramando el uso de la CPU y un througput número. Así que si el no: de bytes aumenta el uso de CPU puede aumentar. Ambos son postitive valores. Entonces, si la correlación es alta tanto incrementará juntos o disminuir juntos.

Gracias.

6voto

ocram Puntos 9992

Por ejemplo, puede generar datos de una distribución normal bivariada. La entrada de la diagonal de la matriz de varianzas y covarianzas es la covarianza. En R, fácilmente esto puede hacerse con rmvnorm.

Ejemplo Generar realizaciones de $1000$ $X=(X_{1}, X_{2})' \sim N(\mu, \Sigma)$ $$\mu = (-1, 5)', \quad \Sigma_{11} = V(X_{1}) = 0.7, \quad \Sigma_{22}= V(X_{2}) = 0.1$ $ y $\Sigma_{12} = \Sigma_{21} = \textrm{Cov}(X_1, X_2)$ tal que $\textrm{Cor}(X_{1}, X_{2})=0.85$.

> #------load the package------
> library(mvtnorm)
> #----------------------------
> 
> #------compute the covariance such that cor(X1, X2) = 0.85------
> covariance <- 0.85 * sqrt(0.7) * sqrt(0.1)
> #---------------------------------------------------------------
> 
> #------variance-covariance matrix------
> sigma <- matrix(c(0.7, covariance, covariance, 0.1), nrow=2, byrow=TRUE)
> sigma
          [,1]      [,2]
[1,] 0.7000000 0.2248889
[2,] 0.2248889 0.1000000
> #--------------------------------------
> 
> #------data generation------
> test <- rmvnorm(n=1000, mean=c(-1, 5), sigma=sigma)
> #---------------------------
> 
> #------compute the empirical correlation on this particular data------
> cor(test[, 1], test[, 2])
[1] 0.8478849
> #---------------------------------------------------------------------

$$$$

NB: You can also generate data according to a linear regression model: $ X_2 = una + bX_1 + \epsilon$.

5voto

matt Puntos 11

Otros han dado el código. Aquí le damos una idea.

Generar $X$ y que $Y = X+Z$, que es independiente del $Z$ $X$.

Si $var(Z)$ es pequeño comparado con el $var(X)$ entonces la correlación entre $X$ y $Y$ alta. Si $var(Z)$ es grande en comparación con $var(X)$ entonces la correlación entre $X$ y $Y$ será baja.

2voto

Patrick Puntos 183
library("MASS")
highCor<-matrix(c(1,0.9,0.9,1),2,2)
lowCor<-matrix(c(1,0.1,0.1,1),2,2)
x_hc<-mvrnorm(100,rep(0,2),highCor)
x_lc<-mvrnorm(100,rep(0,2),lowCor)
plot(rbind(x_hc,x_lc),type="n")
points(x_lc,pch=16,col="green")#low correlation in green
points(x_hc,pch=16,col="blue") #high correlation in blue

1voto

mat_geek Puntos 1367

Las respuestas dadas aquí, así como la marcada respuesta al post anterior darle muchas maneras válidas de hacer esto. Mi sugerencia hubiera sido el mismo que el NB mencionada por ocram. Una función lineal $Y=a+bX$ y añadir un término del error $N(0, σ)$ con un valor pequeño para el % de desviación estándar $σ$. Esto generará un par de variables aleatorias con una alta correlación. Para generar un par de variables con correlación baja a tomar un valor grande para $σ^2$.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X