Ihr gewünschter Mittelwert ergibt sich aus der folgenden Gleichung:
N⋅p−N⋅(1−p)N=.05
woraus folgt, dass die Wahrscheinlichkeit der 1s
sein sollte.525
In Python:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
Beweis:
x.mean()
0.050742000000000002
1'000 Experimente mit 1'000'000 Proben von 1s und -1s:
Der Vollständigkeit halber (Hutspitze an @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 Experimente mit 1'000'000 Proben von 1s und -1s:
Und schließlich aus einer gleichmäßigen Verteilung, wie von @ Łukasz Deryło (auch in Python) vorgeschlagen:
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 Experimente mit 1'000'000 Proben von 1s und -1s:
Alle drei sehen praktisch identisch aus!
BEARBEITEN
Einige Zeilen zum zentralen Grenzwertsatz und die Ausbreitung der resultierenden Verteilungen.
Zuallererst folgen die Mittelzüge tatsächlich der Normalverteilung.
Zweitens hat @Elvis in seinem Kommentar zu dieser Antwort einige nette Berechnungen zur genauen Verteilung der Mittelwerte über 1'000 Experimente (ca. (0,048; 0,052)), 95% -Konfidenzintervall, durchgeführt.
Und dies sind Ergebnisse der Simulationen, um seine Ergebnisse zu bestätigen:
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])
In R können Sie Bernoulli - Variablen mit erzeugen
rbinom(n, size = 1, prob = p)
, so zum Beispielquelle
Dann ist Ihr erwarteter Wert
Ich bin kein Matlab-Benutzer, aber ich denke, es sollte so sein
quelle
Sie müssen mehr 1s als -1s generieren. Genau 5% mehr 1s, weil Sie möchten, dass Ihr Mittelwert 0,05 beträgt. Sie erhöhen also die Wahrscheinlichkeit von 1s um 2,5% und verringern -1s um 2,5%. In Ihrem Code entspricht dies einer Änderung
0.5
von0.525
, dh von 50% auf 52,5%quelle
Nur für den Fall, dass Sie einen GENAUEN Wert von 0,05 wünschen, können Sie den folgenden R-Code in MATLAB verwenden:
quelle