Risposte:
La tua media desiderata è data dall'equazione:
da cui segue che 1s
dovrebbe essere la probabilità di.525
In Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Prova:
x.mean()
0.050742000000000002
1'000 esperimenti con 1'000'000 campioni di 1s e -1s:
Per completezza (punta del cappello a @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 esperimenti con 1'000'000 campioni di 1s e -1s:
E infine attingendo da una distribuzione uniforme, come suggerito da @ Łukasz Deryło (anche, in Python):
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 esperimenti con 1'000'000 campioni di 1s e -1s:
Tutti e tre sembrano praticamente identici!
MODIFICARE
Coppia di righe sul teorema del limite centrale e diffusione delle distribuzioni risultanti.
Prima di tutto, i disegni di mezzi seguono effettivamente la distribuzione normale.
In secondo luogo, @Elvis nel suo commento a questa risposta ha fatto alcuni bei calcoli sull'esatta diffusione dei mezzi tracciati su 1'000 esperimenti (circa (0,048; 0,052)), intervallo di confidenza al 95%.
E questi sono i risultati delle simulazioni, per confermare i suoi risultati:
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])
Una variabile con valori e la forma con a Bernoulli con parametro . Il suo valore atteso è , quindi sai come ottenere (qui ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1p = 0,525
In R puoi generare variabili di Bernoulli con rbinom(n, size = 1, prob = p)
, quindi ad esempio
x <- rbinom(100, 1, 0.525)
y <- 2*x-1
Generare campioni in modo uniforme da , ricodificare numeri inferiori a 0,525 a 1 e riposare a -1.[ 0 , 1 ]
Quindi il tuo valore atteso è
Non sono un utente Matlab, ma immagino che lo sia
2*(rand(1, 10000, 1)<=.525)-1
Nel caso in cui desideri un EXACT 0.05 significa che puoi fare l'equivalente del seguente codice R in MATLAB:
sample(c(rep(-1, 95*50), rep(1, 105*50)))