Distributions
如何生成一個±1±1pm 1具有均值的序列0.050.050.05?
我知道如何生成具有均值的序列. 例如,在 Matlab 中,如果我想生成一個長度序列, 它是:
2*(rand(1, 10000, 1)<=.5)-1
但是,如何生成一個具有均值的序列,即,與稍微偏愛?
您想要的平均值由等式給出:
由此得出 的概率
1s
應該是.525
在 Python 中:
x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])
證明:
x.mean() 0.050742000000000002
1'000 次實驗,包含 1'000'000 個 1 和 -1 樣本:
為了完整起見(@Elvis 的帽子提示):
import scipy.stats as st x = 2*st.binom(1, .525).rvs(1000000) - 1 x.mean() 0.053859999999999998
1'000 次實驗,包含 1'000'000 個 1 和 -1 樣本:
最後從均勻分佈中提取,正如@Łukasz Deryło(也在 Python 中)所建議的那樣:
u = st.uniform(0,1).rvs(1000000) x = 2*(u<.525) -1 x.mean() 0.049585999999999998
1'000 次實驗,包含 1'000'000 個 1 和 -1 樣本:
這三個看起來幾乎相同!
編輯
中心極限定理的幾條線和結果分佈的傳播。
首先,均值的抽取確實遵循正態分佈。
其次,@Elvis 在他對這個答案的評論中對 1'000 次實驗(大約(0.048;0.052))得出的平均值的精確分佈做了一些很好的計算,95% 的置信區間。
這些是模擬的結果,以確認他的結果:
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])