生成する方法


11

平均値0のシーケンスを生成する方法を知っています。たとえば、Matlab で長さ10000の± 1シーケンスを生成する場合は、次のようになります。±10±110000

2*(rand(1, 10000, 1)<=.5)-1

ただし、平均0.05のシーケンスを生成する方法、つまり、1がわずかに好ましい場合はどうでしょうか。±10.051

回答:


18

あなたの望ましい平均は方程式によって与えられます:

NpN(1p)N=.05

そこからの確率は次のことを1sする必要があります.525

Pythonの場合:

x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])

証明:

x.mean()
0.050742000000000002

1と-1の1'000'000サンプルを使用した1'000実験: ここに画像の説明を入力してください

完全を期すために(@Elvisのヒント):

import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998

1と-1の1'000'000サンプルを使用した1'000実験:

ここに画像の説明を入力してください

そして最後に、@ŁukaszDeryło(Pythonでも)によって提案されているように、均一な分布から描画します。

u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998

1と-1の1'000'000サンプルを使用した1'000実験:

ここに画像の説明を入力してください

3つすべてが実質的に同じに見えます!

編集

中央のいくつかの線は、定理と結果の分布の広がりを制限します。

まず第一に、平均のドローは確かに正規分布に従います。

第2に、この回答に対する@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])

良くやった。ベルヌーイに関する私のポイントは、質問をよく知られた確率分布に還元することでした。「実装」の観点からは、あなたの答えとŁukaszは完璧でした。
エルビス

冗談ではありません。あなたのものは最も科学的で最高です!;)私は0.5秒間の二項分布について考えていましたが、それを-1と1に変換するには不十分でした。
セルゲイブッシュマノフ2017

1
var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×1030.05±1.96×0.999×103(0.048;0.052)

12

11Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

R rbinom(n, size = 1, prob = p)では、でベルヌーイ変数を生成できます。たとえば、

x <- rbinom(100, 1, 0.525)
y <- 2*x-1

5

N[0,1]

次に、期待値は

10.525+(1)(10.525)=0.5250.475=0.05

私はMatlabのユーザーではありませんが、

2*(rand(1, 10000, 1)<=.525)-1

3
これは、ここで逆変換サンプリングを使用する正しい方法です。
Tim

4

-1よりも1を多く生成する必要があります。正確には、平均を0.05にするため、1が5%増えます。したがって、1の確率を2.5%増やし、-1を2.5%減らします。あなたのコードでは、に変更0.5するのと同じです0.525。つまり、50%から52.5%に


2

EXACT 0.05が必要な場合に備えて、MATLABで次のRコードと同等のことを実行できます。

sample(c(rep(-1, 95*50), rep(1, 105*50)))

-1この答えは間違っています!このコードが行うことは、静的な値のベクトルをランダムに並べ替えることだけです。出力はランダムではありません!
Tim

2
@Timなぜ機能しないのですか?これは、-1と1のリストをランダムな順序で返し、正確な平均が0.05になるようにカウントが設計されています。
ddunn801 2017

1
@Timこのソリューションランダムです。繰り返し実行してみましたか?
whuber

@whuberこれは、Amos Coatsによって提案されたソリューションと同じです。唯一の違いは、値の並べ替えです。このようなサンプルの統計的特性は、確定的で一定です。
Tim

3
@ティム私はあなたがこの質問に明示的に行われていないいくつかの不当な仮定を読んでいると思います。順序付けられていないサンプル自体の頻度(したがってすべての瞬間)は一定ですが、生成される系列のさまざまな「統計的特性」はランダムに変化します。質問の例では配列が生成され、配列はセットではないため、配列の順序が重要であるので、この解釈は公正な解釈だと思います(そして、問題が明らかになります)。一方、Coatsが投稿した「解決策」は良い冗談ですが、SEは冗談が好きではありません。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.