1 votos

¿Cómo simular datos correlacionados con mínimos y máximos, covarianza y media especificados en R?

Quiero simular datos con media fija y matriz de covarianza como una distribución multivariable en la que los datos generados deben estar en un rango [suelo, techo].

Usando MASS::mvrnorm no puedo especificar el rango (máximo y mínimo). ¿Hay alguna solución para este problema?

He leído todos los temas relacionados y la documentación pero no pude encontrar una solución donde también puedas establecer el máximo y el mínimo de los datos generados

xy <- MASS::mvrnorm(n = 500, mu = c(mean_a, mean_b), Sigma = Sigma)
colnames(xy) <- c("a", "b")
xydf <- data.frame(xy)
head(xydf)

2voto

Ben Bolker Puntos 8729

Ya sea que esto sea fácil o difícil depende en gran medida de si el vector medio y la matriz de covarianza se refieren a la distribución antes o después de la truncación. Si desea especificar la media y la covarianza en la distribución sin truncar, luego aplicar la truncación, como se especifica en el enlace que citaste, el paquete tmvtnorm lo hará así:

library(tmvtnorm)
set.seed(101)
x <- rtmvnorm(100000, mean = c(1, 2), sigma = matrix(c(1, 1, 1, 2), nrow = 2),
          lower = c(0, 2), upper = c(1, 3))

Revisar resultados:

options(digits = 3); var(x)
        [,1]    [,2]
[1,] 0.07160 0.00555
[2,] 0.00555 0.07749

Puedes ver que la matriz de covarianza está lejos de los valores originalmente especificados; ha sido reducida considerablemente por la truncación. Aparentemente, esto también es cómo funciona la función scipy.truncnorm. (El problema es mucho más difícil si deseas una variable aleatoria que coincida con los momentos especificados después de la truncación, para algunas elecciones de truncación y momentos, sería realmente imposible, por ejemplo si quisieras un rango de (0,1) y una desviación estándar de 10000...)

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