Votre moyenne souhaitée est donnée par l'équation:
N⋅p−N⋅(1−p)N=.05
à partir de laquelle résulte que la probabilité de 1s
devrait être.525
En Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Preuve:
x.mean()
0.050742000000000002
1'000 expériences avec 1'000'000 échantillons de 1 et -1:
Par souci d'exhaustivité (pointe du chapeau à @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 expériences avec 1'000'000 échantillons de 1 et -1:
Et enfin, à partir d'une distribution uniforme, comme suggéré par @ Łukasz Deryło (également en Python):
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 expériences avec 1'000'000 échantillons de 1 et -1:
Tous les trois semblent pratiquement identiques!
ÉDITER
Couple de droites sur le théorème de la limite centrale et la propagation des distributions résultantes.
Tout d'abord, les tirages de moyens suivent en effet la distribution normale.
Deuxièmement, @Elvis dans son commentaire à cette réponse a fait de bons calculs sur la répartition exacte des moyennes tirées sur 1'000 expériences (environ (0,048; 0,052)), intervalle de confiance à 95%.
Et ce sont les résultats des simulations, pour confirmer ses résultats:
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])
Une variable avec les valeurs et est de la forme avec a Bernoulli avec le paramètre . Sa valeur attendue est , vous savez donc comment obtenir (ici ).−1 1 Y=2X−1 X p E(Y)=2E(X)−1=2p−1 p p=0.525
Dans R, vous pouvez générer des variables Bernoulli avec
rbinom(n, size = 1, prob = p)
, par exemplela source
Générez échantillons uniformément à partir de , recodez des nombres inférieurs à 0,525 à 1 et reposez à -1.N [0,1]
Alors votre valeur attendue est
Je ne suis pas un utilisateur de Matlab, mais je suppose que ça devrait être
la source
Vous devez générer plus de 1 que de -1. Précisément, 5% de 1 de plus parce que vous voulez que votre moyenne soit de 0,05. Ainsi, vous augmentez la probabilité de 1s de 2,5% et diminuez -1s de 2,5%. Dans votre code, cela équivaut à passer
0.5
à0.525
, c'est- à -dire de 50% à 52,5%la source
Au cas où vous voudriez un EXACT 0,05, vous pouvez faire l'équivalent du code R suivant dans MATLAB:
la source