Esta pregunta está motivada por mi pregunta sobre el metanálisis . Pero imagino que también sería útil para enseñar contextos en los que desea crear un conjunto de datos que refleje exactamente un conjunto de datos publicado existente.
Sé cómo generar datos aleatorios a partir de una distribución dada. Entonces, por ejemplo, si leo sobre los resultados de un estudio que tuvo:
- una media de 102,
- una desviación estándar de 5.2, y
- un tamaño de muestra de 72.
Podría generar datos similares usando rnorm
en R. Por ejemplo,
set.seed(1234)
x <- rnorm(n=72, mean=102, sd=5.2)
Por supuesto, la media y la desviación estándar no serían exactamente iguales a 102 y 5.2 respectivamente:
round(c(n=length(x), mean=mean(x), sd=sd(x)), 2)
## n mean sd
## 72.00 100.58 5.25
En general, estoy interesado en cómo simular datos que satisfagan un conjunto de restricciones. En el caso anterior, las constantes son el tamaño de la muestra, la media y la desviación estándar. En otros casos, puede haber restricciones adicionales. Por ejemplo,
- puede conocerse un mínimo y un máximo en los datos o en la variable subyacente.
- se sabe que la variable toma solo valores enteros o solo valores no negativos.
- los datos pueden incluir múltiples variables con interrelaciones conocidas.
Preguntas
- En general, ¿cómo puedo simular datos que satisfagan exactamente un conjunto de restricciones?
- ¿Hay artículos escritos sobre esto? ¿Hay algún programa en R que haga esto?
- Por el bien de ejemplo, ¿cómo podría y debería simular una variable para que tenga una media y un SD específicos?
fuente
x<-rnorm(72);x<-5.2*(x-mean(x))/sd(x)+102
hace el truco.Respuestas:
En general, para que la media y la varianza de su muestra sean exactamente iguales a un valor especificado previamente, puede desplazar y escalar adecuadamente la variable. En concreto, si es una muestra, entonces las nuevas variablesX1,X2,...,Xn
donde es la media muestral yes la varianza muestral de tal manera que la media muestral de loses exactamentey su varianza muestral es exactamente. Un ejemplo construido de manera similar puede restringir el rango:X¯¯¯¯=1n∑ni=1Xi Zic2c1s2X=1n−1∑ni=1(Xi−X¯¯¯¯)2 Zi c2 c1
producirá un conjunto de datos que está restringido al intervalo .B1,...,Bn (a,b)
Nota: Estos tipos de desplazamiento / escalado, en general, cambiarán la familia de distribución de los datos, incluso si los datos originales provienen de una familia de escala de ubicación.
Dentro del contexto de la distribución normal, la
mvrnorm
función en leR
permite simular datos normales (o multivariados normales) con una media / covarianza muestra especificada previamente mediante la configuraciónempirical=TRUE
. Específicamente, esta función simula datos de la distribución condicional de una variable normalmente distribuida, dada la media muestral y la (co) varianza es igual a un valor preespecificado . Tenga en cuenta que las distribuciones marginales resultantes no son normales, como señaló @whuber en un comentario a la pregunta principal.Aquí hay un ejemplo univariado simple donde la media muestral (de una muestra de ) está restringida a 0 y la desviación estándar muestral es 1. Podemos ver que el primer elemento es mucho más similar a una distribución uniforme que una normal distribución:n=4
fuente
En cuanto a su solicitud de documentos, hay:
Esto no es exactamente lo que está buscando, pero podría servir como grano para el molino.
Hay otra estrategia que nadie parece haber mencionado. Es posible generar datos (pseudo) aleatorios a partir de un conjunto de tamaño modo que el conjunto completo cumpla con las restricciones siempre que los datos restantes se fijen en los valores apropiados. Los valores requeridos deben poder resolverse con un sistema de ecuaciones, álgebra y algo de grasa en el codo.N−k N k k k
Por ejemplo, para generar un conjunto de datos a partir de una distribución normal que tendrá una media de muestra dada, , y una varianza, , deberá fijar los valores de dos puntos: y . Como la media muestral es: debe ser: La varianza muestral es: tanto (después de sustituir lo anterior por , frustrar / distribuir y reorganizar ... ) obtenemos:N x¯ s2 y z
R
Hay algunas cosas que debes entender sobre este enfoque. Primero, no se garantiza que funcione. Por ejemplo, es posible que sus datos iniciales de sean tales que no existan valores y que hagan que la varianza del conjunto resultante sea igual a . Considerar:N−2 y z s2
En segundo lugar, mientras que la estandarización hace que las distribuciones marginales de todas sus variantes sean más uniformes, este enfoque solo afecta los dos últimos valores, pero hace que sus distribuciones marginales estén sesgadas:
Tercero, la muestra resultante puede no parecer muy normal; puede parecer que tiene "valores atípicos" (es decir, puntos que provienen de un proceso de generación de datos diferente al resto), ya que ese es esencialmente el caso. Es menos probable que esto sea un problema con tamaños de muestra más grandes, ya que las estadísticas de muestra de los datos generados deben converger a los valores requeridos y, por lo tanto, necesitan menos ajustes. Con muestras más pequeñas, siempre puede combinar este enfoque con un algoritmo de aceptación / rechazo que lo intenta nuevamente si la muestra generada tiene estadísticas de forma (por ejemplo, asimetría y curtosis) que están fuera de los límites aceptables (cf. comentario de @ cardinal ), o ampliar este enfoque para generar una muestra con una media fija, varianza, asimetría ycurtosis (aunque te dejaré el álgebra) Alternativamente, podría generar una pequeña cantidad de muestras y utilizar la que tenga la estadística más pequeña (digamos) de Kolmogorov-Smirnov.
fuente
La técnica general es el 'Método de rechazo', donde simplemente rechaza los resultados que no cumplen con sus restricciones. A menos que tenga algún tipo de orientación (como MCMC), ¡podría generar muchos casos (dependiendo de su escenario) que se rechazan!
Cuando esté buscando algo así como una desviación media y estándar y pueda crear una métrica de distancia de algún tipo para decir qué tan lejos está de su objetivo, puede usar la optimización para buscar las variables de entrada que le dan la salida deseada valores.
Como un ejemplo feo donde buscaremos un vector uniforme aleatorio con longitud 100 que tenga media = 0 y desviación estándar = 1.
fuente
El paquete Runuran R contiene muchos métodos para generar variaciones aleatorias. Utiliza bibliotecas C del proyecto UNU.RAN (generador universal de números aleatorios no uniformes). Mi propio conocimiento del campo de la generación de variables aleatorias es limitado, pero la viñeta de Runuran ofrece una buena visión general. A continuación se muestran los métodos disponibles en el paquete Runuran, tomados de la viñeta:
Distribuciones continuas:
Distribuciones discretas:
Distribuciones multivariantes:
Ejemplo:
Para un ejemplo rápido, suponga que desea generar una distribución Normal limitada entre 0 y 100:
La
urnorm()
función es una conveniente función de envoltura. Creo que detrás de escena utiliza el método de interpolación polinómica de CDF inversa, pero no estoy seguro. Para algo más complejo, digamos, una distribución normal discreta limitada entre 0 y 100:fuente
¡Parece que hay un paquete R que cumple con su requisito publicado ayer! simstudy Por Keith Goldfeld
fuente
Esta es una respuesta que llega tan tarde que presumiblemente no tiene sentido, pero siempre hay una solución MCMC para la pregunta. Es decir, para proyectar la densidad conjunta de la muestra en la variedad definida por las restricciones, por ejemplo El único problema es entonces simular valores sobre esa variedad, es decir, encontrar una parametrización de la dimensión correcta. Un artículo de 2015 de Bornn, Shephard y Solgi estudia este mismo problema (con una respuesta interesante, si no la última ).
fuente
Esta respuesta considera otro enfoque para el caso en el que desea forzar a las variaciones a ubicarse en un rango específico y, además, dictar la media y / o la varianza.
Restrinja nuestra atención al intervalo de la unidad . una media ponderada para la generalidad, así que arregle algunos pesos con , o configure si desea una ponderación estándar. Suponga que las cantidades y representan la media deseada (ponderada) y la varianza (ponderada), respectivamente. El límite superior en es necesario porque esa es la varianza máxima posible en un intervalo de unidades. Estamos interesados en dibujar algunas variantes de con estas restricciones de momento.[0,1] wk∈[0,1] ∑Nk=1wk=1 wk=1/N μ∈(0,1) 0<σ2<μ(1−μ) σ2 x1,...,xN [0,1]
Primero dibujamos algunas variantes de cualquier distribución, como . Esta distribución afectará la forma de la distribución final. Luego los restringimos al intervalo unitario usando una función logística:y1,...,yN N(0,1) [0,1]
Sin embargo, antes de hacer eso, como se ve en la ecuación anterior, transformamos los 's con la traducción y la escala . Esto es análogo a la primera ecuación en la respuesta de @ Macro. El truco ahora es elegir y para que las variables transformadas tengan los momentos deseados. Es decir, necesitamos uno o ambos de los siguientes elementos:yk h v h v x1,...,xN
Invertir estas ecuaciones para y analíticamente no es factible, pero hacerlo numéricamente es sencillo, especialmente porque las derivadas con respecto a y son fáciles de calcular; solo toma unas pocas iteraciones del método de Newton.v h v h
Como primer ejemplo, digamos que solo nos importa restringir la media ponderada y no la varianza. Fix , , , . Luego, para las distribuciones subyacentes , y terminamos con los siguientes histogramas, respectivamente, y de modo que la media de las variables es exactamente (incluso para pequeñas ):μ=0.8 v=1 wk=1/N N=200000 N(0,1) N(0,0.1) Unif(0,1) 0.8 N
A continuación, limitemos la media y la varianza. Tome , , y considere las tres desviaciones estándar deseadas . Usando la misma distribución subyacente , aquí están los histogramas para cada uno:μ=0.2 wk=1/N N=2000 σ=0.1,0.05,0.01 N(0,1)
Tenga en cuenta que estos pueden parecer un poco beta distribuidos, pero no lo son.
fuente
En mi respuesta aquí , enumeré tres paquetes R para hacer esto:
fuente