Bagaimana cara menghasilkan urutan

11

Saya tahu cara membuat urutan dengan rata-rata . Misalnya, dalam Matlab, jika saya ingin menghasilkan urutan panjang , itu adalah:0 ± 1 10000±10±110000

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

Namun, bagaimana cara menghasilkan urutan dengan rata-rata , yaitu, dengan yang sedikit disukai?0,05 1±10.051

Ka-Wa Yip
sumber

Jawaban:

18

Mean yang Anda inginkan diberikan oleh persamaan:

NpN(1p)N=.05

dari yang mengikuti bahwa probabilitas 1sseharusnya.525

Dengan Python:

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

Bukti:

x.mean()
0.050742000000000002

1'000 percobaan dengan 1'000'000 sampel 1s dan -1s: masukkan deskripsi gambar di sini

Demi kelengkapan (ujung hat ke @ Elvis):

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

1'000 percobaan dengan 1'000'000 sampel 1s dan -1s:

masukkan deskripsi gambar di sini

Dan akhirnya menggambar dari distribusi yang seragam, seperti yang disarankan oleh @ Łukasz Deryło (juga, dengan Python):

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

1'000 percobaan dengan 1'000'000 sampel 1s dan -1s:

masukkan deskripsi gambar di sini

Ketiganya terlihat hampir identik!

EDIT

Beberapa garis pada teorema limit Tengah dan penyebaran distribusi yang dihasilkan.

Pertama-tama, penarikan sarana memang mengikuti Distribusi Normal.

Kedua, @ Elvis dalam komentarnya untuk jawaban ini melakukan beberapa perhitungan yang bagus pada penyebaran yang tepat dari rata-rata yang diambil lebih dari 1.000 eksperimen (sekitar (0,048; 0,052)), interval kepercayaan 95%.

Dan ini adalah hasil dari simulasi, untuk mengkonfirmasi hasilnya:

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])
Sergey Bushmanov
sumber
Pekerjaan yang baik. Maksud saya dengan Bernoulli adalah untuk mengurangi pertanyaan menjadi distribusi probabilitas yang terkenal; dari sudut pandang 'implementasi', jawaban Anda dan Łukasz 'sempurna.
Elvis
Jangan bercanda, milikmu paling ilmiah dan terbaik! ;) Saya sedang memikirkan distribusi Binomial selama setengah detik tetapi itu tidak cukup untuk mengubahnya menjadi -1 dan 1, jadi saya meminjam solusi Anda "sebagaimana adanya", terima kasih!
Sergey Bushmanov
1
Jadi dengan notasi saya, , dan standar deviasi adalah . Ketika Anda mengambil rata-rata pada sampel, standar deviasi adalah dan 95% dari rata-rata yang dihitung harus dalam interval , yaitu . Matematika, periksa! ;)Y 0,999 10 6 0,999 × 10 - 3var(Y)=4var(X)=4p(1p)=0.9975Y0.9991060.999×103 ( 0,048 ; 0,052 )0.05±1.96×0.999×103(0.048;0.052)
Elvis
12

Variabel dengan nilai dan berbentuk dengan a Bernoulli dengan parameter . Nilai yang diharapkan adalah , jadi Anda tahu cara mendapatkan (di sini ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0,52511Y=2X1XpE(Y)=2E(X)1=2p1pp=0.525

Dalam R Anda dapat menghasilkan variabel Bernoulli dengan rbinom(n, size = 1, prob = p), jadi misalnya

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

Hasilkan sampel secara seragam dari , angka recode lebih rendah dari 0,525 ke 1 dan sisanya ke -1.[ 0 , 1 ]N[0,1]

Maka nilai yang Anda harapkan adalah

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

Saya bukan pengguna Matlab, tapi saya rasa itu sholud

2*(rand(1, 10000, 1)<=.525)-1
Łukasz Deryło
sumber
3
Itu adalah cara yang benar dalam menggunakan sampling transformasi terbalik di sini.
Tim
4

Anda perlu menghasilkan lebih dari 1s dari -1s. Tepatnya, 5% lebih banyak 1s karena Anda ingin mean Anda menjadi 0,05. Jadi, Anda meningkatkan probabilitas 1s sebesar 2,5% dan menurunkan -1s sebesar 2,5%. Dalam kode Anda itu setara dengan mengubah 0.5ke 0.525, yaitu dari 50% menjadi 52,5%

Aksakal
sumber
2

Jika Anda menginginkan EXACT 0,05 berarti Anda dapat melakukan yang setara dengan kode R berikut di MATLAB:

sample(c(rep(-1, 95*50), rep(1, 105*50)))
ddunn801
sumber
-1 jawaban ini salah! Satu-satunya hal yang dilakukan kode ini adalah secara acak mengizinkan vektor nilai statis. Outputnya tidak acak!
Tim
2
@ Tim Mengapa itu tidak berhasil? Ini mengembalikan daftar -1 dan 1 dalam urutan acak dengan jumlah yang dirancang untuk memastikan rata-rata tepat 0,05.
ddunn801
1
@ Tim Solusi ini acak. Sudahkah Anda mencoba menjalankannya berulang kali?
whuber
@whuber ini sama dengan solusi yang disarankan oleh Amos Coats, satu-satunya perbedaan adalah permutasi nilai. Sifat statistik dari sampel tersebut akan bersifat deterministik dan konstan.
Tim
3
@Tim Saya pikir Anda mungkin membaca beberapa asumsi yang tidak beralasan atas pertanyaan ini yang tidak dibuat secara eksplisit. Meskipun frekuensi - dan karenanya semua momen - dari sampel yang tidak berurutan itu sendiri akan konstan, variasi yang sangat besar dari "sifat statistik" dari seri yang dihasilkan akan bervariasi secara acak. Karena contoh dalam pertanyaan menghasilkan array, dan array tidak set - urutan hal dalam array - saya pikir interpretasi ini adalah yang adil (dan menerangi pertanyaan). "Solusi" yang diposting oleh Coats, di sisi lain, adalah lelucon yang bagus - tetapi SE tidak suka bercanda.
whuber