¿Cómo generar una secuencia con una media de ?

11

Sé cómo generar una secuencia con media . Por ejemplo, en Matlab, si quiero generar una secuencia de longitud , es:0 ± 1 10000±10±110000

2*(rand(1, 10000, 1)<=.5)-1

Sin embargo, ¿cómo generar una secuencia con una media de , es decir, con siendo ligeramente preferido?0.05 1±10.051

Ka-Wa Yip
fuente

Respuestas:

18

Su media deseada está dada por la ecuación:

NpN(1p)N=.05

de la que se deduce que la probabilidad de que el 1sdebe ser.525

En Python:

x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])

Prueba:

x.mean()
0.050742000000000002

1'000 experimentos con 1'000'000 muestras de 1s y -1s: ingrese la descripción de la imagen aquí

En aras de la exhaustividad (punta de sombrero para @Elvis):

import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998

1'000 experimentos con 1'000'000 muestras de 1s y -1s:

ingrese la descripción de la imagen aquí

Y, finalmente, a partir de la distribución uniforme, como lo sugiere @ Łukasz Deryło (también, en Python):

u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998

1'000 experimentos con 1'000'000 muestras de 1s y -1s:

ingrese la descripción de la imagen aquí

¡Los tres se ven prácticamente idénticos!

EDITAR

Un par de líneas en el teorema del límite central y la distribución de las distribuciones resultantes.

En primer lugar, los sorteos de medios siguen a la Distribución Normal.

En segundo lugar, @Elvis en su comentario a esta respuesta hizo algunos buenos cálculos sobre la distribución exacta de las medias obtenidas en 1'000 experimentos (circa (0.048; 0.052)), intervalo de confianza del 95%.

Y estos son los resultados de las simulaciones, para confirmar sus resultados:

mn = []
for _ in range(1000):
    mn.append((2*st.binom(1, .525).rvs(1000000) - 1).mean())
np.percentile(mn, [2.5,97.5])
array([ 0.0480773,  0.0518703])
Sergey Bushmanov
fuente
Buen trabajo. Mi punto con el Bernoulli era reducir la pregunta a una distribución de probabilidad bien conocida; desde el punto de vista de la "implementación", su respuesta y Łukasz 'fueron perfectos.
Elvis
No es broma, ¡el tuyo es el más científico y el mejor! ;) Estuve pensando en la distribución binomial durante medio segundo, pero eso no fue suficiente para convertirlo en -1 y 1, así que tomé prestada su solución "como está", ¡gracias!
Sergey Bushmanov
1
Entonces, con mis anotaciones, , y la desviación estándar de es . Cuando toma la media en muestras, la desviación estándar es y el 95% de las medias calculadas deben estar en el intervalo , es decir . Matemáticas echa un vistazo! ;)var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×1030.05±1.96×0.999×103(0.048;0.052)
Elvis
12

Una variable con valores y tiene la forma con a Bernoulli con el parámetro . Su valor esperado es , por lo que sabe cómo obtener (aquí ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0.52511Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

En R puede generar variables de Bernoulli con rbinom(n, size = 1, prob = p), por ejemplo,

x <- rbinom(100, 1, 0.525)
y <- 2*x-1
Elvis
fuente
5

Genere muestras uniformemente a partir de , recodifique números inferiores a 0.525 a 1 y descanse a -1.[ 0 , 1 ]N[0,1]

Entonces su valor esperado es

10.525+(1)(10.525)=0.5250.475=0.05

No soy un usuario de Matlab, pero supongo que debería ser

2*(rand(1, 10000, 1)<=.525)-1
Łukasz Deryło
fuente
3
Esa es una forma correcta de emplear el muestreo de transformación inversa aquí.
Tim
4

Necesita generar más 1s que -1s. Precisamente, un 5% más de 1s porque quieres que tu media sea 0.05. Entonces, aumenta la probabilidad de 1s en un 2.5% y disminuye -1s en un 2.5%. En su código es equivalente a cambiar 0.5a 0.525, es decir, del 50% al 52.5%

Aksakal
fuente
2

En caso de que desee un EXACT 0.05 significa que puede hacer el equivalente al siguiente código R en MATLAB:

sample(c(rep(-1, 95*50), rep(1, 105*50)))
ddunn801
fuente
-1 esta respuesta es incorrecta! Lo único que hace este código es permutar aleatoriamente el vector estático de valores. ¡La salida no es aleatoria!
Tim
2
@Tim ¿Por qué no funciona? Devuelve una lista de -1 y 1 en un orden aleatorio con recuentos diseñados para garantizar una media exacta de 0.05.
ddunn801
1
@Tim Esta solución es aleatoria. ¿Has intentado ejecutarlo repetidamente?
whuber
@whuber esto es lo mismo que la solución sugerida por Amos Coats, la única diferencia es la permutación de los valores. Las propiedades estadísticas de dicha muestra serán deterministas y constantes.
Tim
3
@Tim Creo que podría estar leyendo algunas suposiciones injustificadas en esta pregunta que no se hacen explícitamente. Aunque las frecuencias, y por lo tanto todos los momentos, de la muestra desordenada en sí serán constantes, una gran variedad de "propiedades estadísticas" de la serie que se genera variará aleatoriamente. Como el ejemplo en la pregunta genera una matriz, y las matrices no son conjuntos, el orden importa en una matriz, creo que esta interpretación es justa (e ilumina la pregunta). La "solución" publicada por Coats, por otro lado, es una buena broma, pero a SE no le gusta bromear.
whuber