본문 바로가기
데이터 분석/컴퓨터응용확률

uniform distribution

by 세희홍 2022. 6. 23.

1. Write codes to simulate tossing a coin to see how the law of large numbers works. You may use any random number generator (using any programming language) as long as it follows a uniform distribution.

 

(1) Assuming a fair coin where P(HEAD)=P(TAIL)=0.5, plot a graph showing the proportions of heads with respect to the number of coin tosses ranged from 1 to 100.

코드를 8번 시행한 결과 다음과 같은 결과가 나왔다. X축을 동전을 던진 횟수로 설정하고 범위를 1~100으로 하였다. y축은 윗면이 나온 비율로 정하였고 최대값은 1이다. 매번 결과가 달라지지만 대부분의 경우 시행 횟수가 커질수록 Y축은 0.5에 가까워지고 있다고 말하는 것이 합리적이다.

 

코드 설명

import numpy as np
import matplotlib.pyplot as plt

num = 100
head = [[0] for i in range(num)]
tossNumber = [[0] for i in range(num)]
headProposition = [[0] for i in range(num)]

동전을 던진 횟수를 저장할 tossNumber, 동전을 던졌을 때 윗면이 나온 비율을 저장할 head headProposition을 사이즈 100인 배열로 초기화하였다.

 

for i in range(1, num+1):
    a = np.random.choice(2, size=i, p=[0.5, 0.5]) # 0.5, 0.5 확률 설정
    #print(a)
    n = 0
    for j in range(0, i):
        if a[j] == 0:
            n = n + 1
    head[j] = n / (j+1)

np.random.choice()로 랜덤 변수를 만들어서 변수 a에 저장하였다. Size1부터 100까지로 설정하였고, 01이 나올 수 있다. 임의로 0을 앞면, 1을 뒷면이라고 설정하였다. 앞면과 뒷면이 나올 확률은 p = [0.5, 0.5], 동일한 확률인 0.5로 설정하였다.

 내부의 for문에서는 배열 a의 값을 검사해서 0인 경우를 카운트해서 n의 값을 증가시켰다. 그리고 headn값을 j+1(1부터 하기 위해)으로 나눈 값을 저장하였다.

 

for k in range(0, num):
    tossNumber [k] = k + 1
    headProposition[k] = head[k]

tossNumber x축에 오게 될 동전을 던진 횟수를 저장하였다. For문을 사용하였고 1부터 100의 값이 오게 하기 위해 +1을 하였다.

배열의 인덱스를 맞춰주기 위해 head에 있는 값을 headProposition으로 옮겼다.

 

x = np.arange(num)
plt.bar(x, headProposition)
plt.xticks(x, tossNumber)
plt.show()

Arrange메서드로 X축의 범위를 100으로 설정하고, x축은 tossNumber, y축은 headProposition으로 설정한 후 막대그래프를 그렸다.

 

 

(2)  Consider an unfair coin with P(HEAD)=0.6 and P(TAIL)=0.4. Plot a graph similar to the problem a.

for i in range(1, num+1):
    a = np.random.choice(2, size=i, p=[0.6, 0.4])

와 동일한 코드에서 np.random.choice(2, size = i, p = [0.6 0.4])만 변경하여 윗면(0)이 나올 확률은 0.6, 뒷면(1)이 나올 확률은 0.4 로 설정하였다.

 

변경한 코드를 8번 시행한 결과 다음과 같은 결과가 나왔다. a에서 대부분의 경우 시행 횟수가 커질수록 Y축은 0.5에 가까워졌던 것과 달리, 이 경우에는 앞면이 나올 확률인 0.6에 가까워지고 있다고 말하는 것이 합리적이다.

 

 

(3) Discuss if the graph converges to the value of P(HEAD) when the number of coin tosses are large enough.  

 

독립을 가정하여 동전을 반복적으로 던지는 것은 연속된 n번의 독립적 시행에서의 확률이 0.5, 즉 파라미터가 (n, 0.5)binomial random variable이라고 할 수 있다. 이때 n1부터 100까지 설정하였다. binomial random variable에서 확률이 0.5이므로 앞면이 나올 확률은 0.5가 되어야 하지만 실제의 실험에서는 그 결과를 보장할 수가 없다. 하지만 n의 값이 커질수록 샘플의 개수가 늘어나기 때문에 앞면이 나오는 비율이 0.5에 가까워진다고 말하는 것이 합리적이다.

 

 

댓글