ฉันรู้วิธีการสร้างลำดับที่มีค่าเฉลี่ย0ตัวอย่างเช่นใน Matlab ถ้าฉันต้องการสร้างลำดับของความยาวมันคือ:
2*(rand(1, 10000, 1)<=.5)-1
อย่างไรก็ตามวิธีการสร้างลำดับมีค่าเฉลี่ยคือโดยที่เป็นที่ต้องการเล็กน้อย
ฉันรู้วิธีการสร้างลำดับที่มีค่าเฉลี่ย0ตัวอย่างเช่นใน 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 ตัวอย่างของ 1s และ -1s:
เพื่อความสมบูรณ์ (ปลายหมวกถึง @Elvis):
import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998
1'000 การทดสอบกับ 1'000'000 ตัวอย่างของ 1s และ -1s:
และในที่สุดก็วาดจากชุดเครื่องแบบตามที่ @ ŁukaszDeryło (เช่นใน Python)
u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998
1'000 การทดสอบกับ 1'000'000 ตัวอย่างของ 1s และ -1s:
ทั้งสามมีลักษณะเหมือนกันอย่างแท้จริง!
แก้ไข
เส้นคู่บนทฤษฎีบทขีด จำกัด กลางและการแพร่กระจายของผลลัพธ์
ประการแรกการดึงค่าเฉลี่ยเป็นไปตามการแจกแจงปกติ
ประการที่สอง @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])
ตัวแปรที่มีค่าและจะอยู่ในรูปกับ Bernoulli กับพารามิเตอร์พีค่าที่คาดหวังคือดังนั้นคุณรู้วิธีรับ (ที่นี่ )1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0.525
ใน R คุณสามารถสร้างตัวแปร Bernoulli ด้วยrbinom(n, size = 1, prob = p)
เช่นยกตัวอย่างเช่น
x <- rbinom(100, 1, 0.525)
y <- 2*x-1
จากนั้นมูลค่าที่คาดหวังของคุณคือ
ฉันไม่ใช่ผู้ใช้ Matlab แต่ฉันคิดว่ามันจะเป็นไปไม่ได้
2*(rand(1, 10000, 1)<=.525)-1
คุณต้องสร้างมากกว่า 1 วินาทีมากกว่า -1 วินาที แม่นยำมากขึ้น 5% 1 วินาทีเพราะคุณต้องการให้ค่าเฉลี่ยของคุณเป็น 0.05 ดังนั้นคุณเพิ่มความน่าจะเป็นที่ 1 ได้ 2.5% และลดลง -1s 2.5% ในรหัสของคุณก็เทียบเท่ากับการเปลี่ยน0.5
ไป0.525
คือจาก 50% ถึง 52.5%
ในกรณีที่คุณต้องการค่า EXACT 0.05 หมายความว่าคุณสามารถทำเทียบเท่ากับรหัส R ต่อไปนี้ใน MATLAB:
sample(c(rep(-1, 95*50), rep(1, 105*50)))