¿Cómo simular resultados multivariados en R?

10

La mayoría de las situaciones, solo tratamos con una variable de resultado / respuesta como . Sin embargo, en algunos escenarios, especialmente en los datos clínicos, las variables de resultado pueden ser de alta dimensión / multivariadas. Tal como Y = β x + ϵ , donde Y contiene variables Y 1 , Y 2 e Y 3 y todos estos resultados están correlacionados. Si x representa recibir tratamiento (sí / no), ¿cómo puedo simular este tipo de datos en R?y=a+bx+ϵY=βx+ϵYY1Y2Y3x

Un ejemplo de la vida real, cada paciente recibe uno de los 2 tipos de cirugías de derivación y los investigadores miden a cada paciente con dolor, hinchazón, fatiga ... etc. después de la cirugía de derivación (cada síntoma califica de 0 a 10). Supongo que los resultados (gravedad de los síntomas) son multivariados normales. Espero que este ejemplo real pueda aclarar mi pregunta. Muchas gracias de antemano.

Tu.2
fuente
¿Qué distribución tiene ? Si es multivariante normal, eche un vistazo a la biblioteca mnormt en R.Y
Macro
Esta pregunta es bastante amplia porque los "datos multivariados" cubren mucho terreno. ¿Qué aplicación específica tienes en mente?
whuber
Solo agrego un ejemplo real, que debería ser útil. gracias
Tu.2

Respuestas:

9

Simule valores normales multivariados con mvtnorm::rmvnorm. No parece funcionar como los generadores de números aleatorios univariados, que le permiten especificar vectores de parámetros, pero esta limitación es fácil de solucionar.

Por ejemplo, considere el modelo

E(y1,y2,y3)=(1+x,2x,13x)

donde tiene una distribución normal multivariada y Var ( y i ) = 1 , Cov ( y 1 , y 2 ) = Cov ( y 2 , y 3 ) = 0.5 y Cov ( y 1 , y 3 ) = 0 . Especifiquemos esta matriz de covarianza en R:yVar(yi)=1Cov(y1,y2)=Cov(y2,y3)=0.5Cov(y1,y3)=0

sigma <- matrix(c(1,   0.5, 0,  
                  0.5, 1,   0.5,
                  0,   0.5, 1  ), 3, 3)

Para experimentar, generemos algunos datos para este modelo dejando que varíe de a , con tres repeticiones cada vez. También tenemos que incluir términos constantes:x10110

data <- cbind(rep(1,10*3), rep(1:10,3))

El modelo determina los medios:

beta <- matrix(c(-1,1,  0,2,  1,-3), 2, 3)
means <- data %*% beta

La solución para generar múltiples resultados multivariados es usar apply:

library(mvtnorm) # Contains rmvnorm
sample <- t(apply(means, 1, function(m) rmvnorm(1, mean=m, sigma=sigma)))
whuber
fuente
2

Las redes bayesianas (BN) se usan comúnmente en el contexto que usted describe. Como modelo generativo , un BN le permitiría representar las dependencias estadísticas entre sus variables de dominio, que en su caso se pueden agrupar como 1) pretratamiento, 2) tratamiento y 3) variables de postratamiento. Puede entrenar su modelo en los datos de sus pacientes existentes y luego ingresar evidencia (complete los valores observados) de un paciente específico para investigar cómo los valores observados afectan a otras variables (incluidas las que etiquetó como resultado, es decir, después del tratamiento).

Un buen truco es que puedes evaluar el efecto de diferentes tipos de tratamiento en tus variables de resultado. Esto se llama una intervención . Si está interesado, tenemos un documento relevante aquí .

Zhubarb
fuente