9 votos

¿Cómo simular resultados multivariados de medidas repetidas en R?

@whuber ha demostrado cómo simular resultados multivariados ($y_1$, $y_2$ y $y_3$) por una sola vez.

Como sabemos, datos longitudinales ocurren a menudo en estudios médicos. Mi pregunta es ¿Cómo simular resultados multivariados de medidas repetidas en R? Por ejemplo, varias veces medimos $y_1$, $y_2$, y $y_3$ en vario tiempo 5 puntos de dos grupos de tratamiento diferentes.

2voto

Seth Puntos 507

El uso de la rmvnorm() función, Se tarda 3 argumentos: la varianza de la matriz de covarianza, el medio y el número de filas.

El sigma tiene 3*5=15 filas y columnas. Uno de cada observación de cada variable. Hay muchas formas de configuración de estas 15^2 parámetros(ar, simetría bilateral, no estructurados...). Sin embargo a llenar esta matriz sea consciente de los supuestos, en particular cuando se establece una correlación/covarianza cero, o cuando se establece dos varianzas son iguales. Para un punto de partida a una sigma de la matriz podría ser algo como esto:

 sigma=matrix(c(
    #y1             y2             y3 
    3 ,.5, 0, 0, 0, 0, 0, 0, 0, 0,.5,.2, 0, 0, 0,
    .5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0, 0,
    0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2, 0,
    0 , 0,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,.2,.5,.2,
    0 , 0, 0,.5, 3, 0, 0, 0, 0, 0, 0, 0, 0,.2,.5,
    0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0, 0, 0, 0,
    0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3, 0, 0, 0, 0, 0,
    .5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0, 3,.5, 0, 0, 0,
    .2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0, 0,
    0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5, 0,
    0 ,0 ,.2,.5,.2,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3,.5,
    0 ,0 ,0 ,.2,.5,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,.5, 3

    ),15,15)

Así que el sigma[1,12] .2 y eso significa que la covarianza entre la primera observación de Y1 y la 2ª observación de Y3 es .2, condicional en todos los otros 13 variables. La diagonal filas no todos tienen que tener el mismo número: que es una simplificación de la suposición de que he hecho. A veces tiene sentido, a veces no. En general esto significa que la correlación entre un 3 de la observación y el 4 es la misma que la correlación entre un 1 y un segundo.

También se necesitan medios. Podría ser tan simple como

 meanTreat=c(1:5,51:55,101:105)
 meanControl=c(1,1,1,1,1,50,50,50,50,50,100,100,100,100,100)

Aquí los 5 primeros son los medios para el 5 observaciones de Y1, ... , en los últimos 5 son las observaciones de Y3

a continuación, obtener de 2000, de la observación de sus datos con:

sampleT=rmvnorm(1000,meanTreat,sigma)
sampleC=rmvnorm(1000,meanControl,sigma)
 sample=data.frame(cbind(sampleT,sampleC) )
  sample$group=c(rep("Treat",1000),rep("Control",1000) )

colnames(sample)=c("Y11","Y12","Y13","Y14","Y15",
                   "Y21","Y22","Y23","Y24","Y25",
                   "Y31","Y32","Y33","Y34","Y35")

Donde Y11 es la 1ª observación de Y1,...,Y15 es el 5 de obs de Y1...

2voto

alexs77 Puntos 36

Para generar datos normales multivariantes con una estructura de correlación especificado, usted necesita para construir la matriz de varianza covarianza y calcular su descomposición de Cholesky usando la chol función. El producto de la descomposición de Cholesky de la matriz deseada vcov y vectores normales al azar independiente de las observaciones proporcionarán datos aleatorios normales con esa matriz de varianza covarianza.

v <- matrix(c(2,.3,.3,2), 2)
cv <- chol(v)

o <- replicate(1000, {
  y <- cv %*% matrix(rnorm(100),2)

  v1 <- var(y[1,])
  v2 <- var(y[2,])
  v3 <- cov(y[1,], y[2,])

  return(c(v1,v2,v3))
})

## MCMC means should estimate components of v
rowMeans(o)

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