Sua média desejada é dada pela equação:
N⋅p−N⋅(1−p)N=.05
da qual resulta que a probabilidade da 1s
deve ser.525
Em Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Prova:
x.mean()
0.050742000000000002
1'000 experimentos com 1'000'000 amostras de 1s e -1s:
Por uma questão de perfeição (dica para @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 experimentos com 1'000'000 amostras de 1s e -1s:
E, finalmente, utilizando uma distribuição uniforme, como sugerido por @ Łukasz Deryło (também, em Python):
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 experimentos com 1'000'000 amostras de 1s e -1s:
Todos os três parecem praticamente idênticos!
EDITAR
Duas linhas no teorema do limite central e a propagação das distribuições resultantes.
Antes de tudo, os empates de meios seguem a Distribuição Normal.
Segundo, @Elvis em seu comentário a esta resposta fez alguns cálculos agradáveis sobre a distribuição exata das médias traçadas em mil e mil experiências (cerca de (0,048; 0,052)), intervalo de confiança de 95%.
E estes são resultados das simulações, para confirmar seus 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])
Uma variável com valores e tem a forma com a Bernoulli com o parâmetro . Seu valor esperado é1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1−1 1 Y=2X−1 X p E(Y)=2E(X)−1=2p−1 p p=0.525
Em R você pode gerar variáveis de Bernoulli com
rbinom(n, size = 1, prob = p)
, portanto, por exemplofonte
Então o seu valor esperado é
Não sou usuário do Matlab, mas acho que deve ser
fonte
Você precisa gerar mais 1s que -1s. Precisamente, 5% mais 1s porque você deseja que sua média seja 0,05. Portanto, você aumenta a probabilidade de 1s em 2,5% e diminui -1s em 2,5%. No seu código, é equivalente a mudar
0.5
para0.525
, ou seja, de 50% para 52,5%fonte
Caso deseje um valor EXATO 0,05, você pode fazer o equivalente ao seguinte código R no MATLAB:
fonte