3 votos

¿Cómo muestrear de una distribución para que la media de las muestras sea igual al valor esperado?

Dada una variable aleatoria $X$ ¿Cómo puedo obtener $N$ Variables aleatorias de $X$ para que el valor medio de mis muestras sea igual al valor esperado de $X$ ?

Por ejemplo, dejemos $X$ tienen una distribución uniforme en el intervalo $[0, 1]$ y dibujar $N = 10000$ muestras. Podemos hacerlo en R utilizando:

set.seed(5)
tmp_vec <- runif(10000, 0, 1)

Sin embargo, mean(tmp_vec) devuelve 0.5018471 . Me gustaría que la media fuera de 0,5, coincidiendo con el valor esperado. ¿Debo reescalar los valores muestreados de tmp_vec ?

5voto

Lev Puntos 2212

En un pregunta relacionada, cómo simular una muestra aleatoria iid $(X_1,\ldots,X_n)\sim f$ bajo la restricción de que su suma $X_1+\cdots+X_n$ se fija en un valor arbitrario $s_0$ , I mostró que la densidad de esa muestra viene dada por $$(X_1,\ldots,X_n)\sim f(x_1)\cdots f(x_{n-1})f(s_0-x_1-\cdots-x_n)\mathbb{I}_{s_0-x_1-\cdots-x_{n-1}}(x_n)$$

Nota: Bajo la restricción la muestra ya no es independiente pero las observaciones se distribuyen idénticamente, a pesar de la aparente asimetría en lo anterior.

Por ejemplo, una muestra uniforme con media fija $0.5$ tendría la densidad conjunta $$(U_1,\ldots,U_N)\sim \prod_{i=1}^{N-1}\mathbb{I}_{(0,1)}(u_i)\mathbb{I}_{1/2}(u_1+\cdots+u_N)$$ que puede simularse mediante el muestreo de Gibbs u otro algoritmo MCMC como el RWMH. Cuando se utiliza el muestreo de Gibbs, el $N-1$ Las primeras coordenadas de la muestra se pueden simular de una en una con $$U_i|U_{-i}\sim \mathbb{I}_{(0,1)}(u_i) \mathbb{I}_{(0,1)}(s_0-u_1-\cdots-u_i-\cdots-u_{n-1})=\mathbb{I}_{(\max\{0,s_0-1-\sum_{j\ne i,n}u_j\},\min\{1,s_0-\sum_{j\ne i,n}u_j\})}(u_i)$$ Una implementación en R se parece a este código:

n=3;T=1e4
s0=.5 #fixed average
sampl=matrix(s0,T,n)
for (t in 2:T){
 sampl[t,]=sampl[t-1,]
 for (i in 1:(n-1)){
  sampl[t,i]=runif(1,
  min=max(0,n*s0-sum(sampl[t,c(-i,-n)])-1),
  max=min(1,n*s0-sum(sampl[t,c(-i,-n)])))
 sampl[t,n]=n*s0-sum(sampl[t,-n])}}

con los siguientes marginales en el $U_i$ 's:

Histograms of the three components of a constrained uniform sample with fixed average 0.5

Nota: Se puede modificar fácilmente el código R anterior para imponer una media de $s_0=0.05$ o $s_0=0.975$ en la muestra.

0voto

user137794 Puntos 1779

No estoy seguro de que pueda conseguirlo. runif es un generador de números pseudoaleatorios que produce variables aleatorias distribuidas uniformemente. No produce variables aleatorias con una mu exacta que sea igual a la especificada. 0,0518 es una mu bastante buena. Lo mismo ocurre con la familia de funciones rnorm , rexp , rpois etc.

pero prueba esto, debería funcionar:

runif2<-function(n,min,max){((min+max)/2)+sqrt((max-min)/12)*scale(runif(n))}
r <- runif2(100,0,1)
mean(r) #0.5

Sólo hay que tener en cuenta que esta muestra es ahora diferente de runif porque usaste "escala". No tiene las mismas propiedades que tu distribución original y puede o no pasar las pruebas de aleatoriedad.

-1voto

Nixit Patel Puntos 34

Sólo una muestra de tamaño infinito garantizaría un resultado exacto y eso no es posible. Sin embargo, se puede establecer un límite sobre la proximidad a la media "real" que se desea obtener o sobre cuál es la menor desviación que se está dispuesto a aceptar en el 95% de los casos. La clave es el error estándar de la media.

$SE = \frac{s}{sqrt(n)}$

siendo s la desviación estándar (para grandes $n$ no tiene mucho sentido distinguir entre muestra de distribución) se puede resolver que a

$n=(\frac{s}{SE})^2$

y así calcular el número mínimo de cualquier error estándar que está dispuesto a aceptar.

La Wikipedia es bastante buena en esta entrada: https://en.wikipedia.org/wiki/Standard_error

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