Distributions

如何生成一個±1±1pm 1具有均值的序列0.050.050.05?

  • July 10, 2017

我知道如何生成具有均值的序列. 例如,在 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])

引用自:https://stats.stackexchange.com/questions/290727

comments powered by Disqus