아래 포스팅에서 포아송 분포에 대해서 CDF(Cumulative Distribution Function) 를 사용하여 랜덤 변수를 생성하는 방법에 대해서 소개를 했었습니다.

https://iamaman.tistory.com/206

오늘은 어떤 분이 기하분포는 어떻게 생성을 하는지 문의를 하셔서 기하분포 CDF(Cumulative Distribution Function) 를 사용하여 랜덤변수를 생성하는 방법에 대해서 소개해 보려고 합니다.

기하분포의 정의에 대해서는 아래 주소를 참조하시기 바랍니다.

https://en.wikipedia.org/wiki/Geometric_distribution

기하분포는 첫 번째 성공까지의 시도 횟수를 모델링 할때는 아래와 같이 정의됩니다. k 는 1 부터 시작하는 것을 확인할 수 있습니다.

첫 번째 성공까지 실패 횟수를 모델링 할 때는 아래와 같이 정의됩니다. k 는 0 부터 시작하는 것을 확인할 수 있습니다.

위 두 모델링은 분산 값은 같지만 평균값은 다릅니다.

첫 번째 성공까지의 시도 횟수에 대한 모델링을 할 때의 분포에 대해서 코딩을 해 보면 아래와 같습니다. 위 포스팅에서 소개 했었던 포아송분포와 PMF 수식등을 제외하고는 코드는 그렇게 차이가 없습니다.

아래와 같은 PMF, CDF 그래프를 확인할 수 있습니다.

성공확률 0.2에 대한 시뮬레이션 결과 아래 실행 결과와 같이 평균은 5, 분산은 20 정도로 이론 값과 유사하게 나오는 것을 확인할 수 있습니다.

다음으로 첫 번째 성공까지 실패 횟수를 모델링 할때의 분포에 대해 코딩 해보면 아래와 같습니다.

아래와 같은 PMF, CDF 그래프를 확인할 수 있습니다.

성공확률 0.2에 대한 시뮬레이션 결과, 아래 실행 결과와 같이 평균은 4, 분산은 20 정도로 이론 값과 유사하게 나오는 것을 확인할 수 있습니다.



  1. 감사합니당ㅇ!!! 2020.04.13 02:58

    포스팅 너무 유익해요 감사합니다!!!!!

지난 포스팅에서 bernoulli r.v. generation 에 대해 설명 드린 바 있습니다.

 
2011/04/06 - [MATLAB] - MATLAB Bernoulli random variable generation

 

오늘은 그 연장선상으로 binomial r.v. generation에 대해 설명 드리겠습니다.

 

binomial distribution은 이항 분포라고 하는데, 한번의 시행에서의 성공 확률이 p 인 경우 n 번의 시행에서 k 번 성공할 확률을 의미 합니다.

 

 



 

이렇게 말하니깐 잘 이해 못하시겠다면, 주사위의 예를 들면 이해 하기 편하실 것 같습니다.

 

주사위를 던져서 숫자 1이 나올 확률은 1/6 이죠. 10 번 던져서 k 번 만큼 숫자 1이 나올 확률이 이항 분포로 다음 식과 같이 표현 됩니다.

 

 

위 식에 k=0 ~ 10 의 값을 대입하면 pmf 값을 구할 수가 있죠.

 

그리고 pmf 를 누적 해서 합 하면 cdf 값이 되죠.

 

cdf 값이 있으면, uniform r.v. 를 사용하여 binomial r.v. 를 생성 할 수 있는 것이죠.

 



 

이에 대한 MATLAB 코드는 다음과 같습니다.

 

 



 

위 코드에 따른 binomial pmf 및 cdf 는 다음과 같습니다.

 

 



 

이제 위 코드 예에 대한 이론적 평균 및 분산을 구해 보죠.

 

이론적 평균 np= 10*1/6 = 1.6667 이고

 

이론적 분산 np(1-p) = 10*1/6*5/6=1.3889 입니다.

 

위 코드에 의해 생성된 binomial r.v.의 평균 및 분산은 다음과 같이 위 이론적 결과와 근사적으로 일치 함을 확인 할 수 있습니다.

 

 


'programming language > MATLAB' 카테고리의 다른 글

MATLAB 변수를 저장 하자~ mat file  (0) 2011.04.21
MATLAB NaN  (0) 2011.04.20
MATLAB 파일 출력  (0) 2011.04.19
MATLAB 파일 읽기 importdata()  (0) 2011.04.18
MATLAB binomial r.v. generation  (4) 2011.04.17
MATLAB cell class  (6) 2011.04.11
MATLAB taylor, Maclaurin serise  (0) 2011.04.10
MATLAB 그래프에 값 넣기 추가, gtext()  (0) 2011.04.09
MATLAB 그래프에 값 넣기  (0) 2011.04.09
  1. 궁금 2016.12.03 18:29

    rv를 통해 pdf와 cdf를 plot할 때 히스토그램을 이용하는 이유는 무엇인가요? 그냥 plot함수를 써서 나타낼 수는 없나요?

    • 남성 2016.12.04 00:12 신고

      위 포스팅에서도 hist 를 사용해서 그림을 그린건 아니죠. 그림은 stem() 함수를 사용했고 hist 는 말 그대로 히스토그램을 구하기 위해 사용한 겁니다.

    • 궁금 2016.12.04 20:07

      pmf에 buffer가 필요한 이유는 뭔가요??

    • 남성 2016.12.04 23:53 신고

      PMF 값을 저장하기 위한거죠.

Random Variable을 생성하기 위해서는 r.v. 의 CDF 값을 알고 있어야 한다.

 

CDF 값을 알고 있으면, 대부분의 컴퓨터 언어에서 기본적으로 제공하는 uniform r.v. 을 생성한 후 CDF 의 inverse 를 통해 r.v. 을 생성한다.

 

오늘의 포스팅에서는 MATLAB 을 이용하여 Bernoulli r.v. 를 생성해 보고 그 PMF(Probability Mass Function)와 CDF 를 확인한다.

 

bernoulli r.v. 은 k=0, 1 에 대하여 다음과 같은 PMF 및 CDF 값을 갖는다.

 

PMF:

 

CDF:

 

그럼 이제 MATLAB을 이용하여 Bernoulli r.v. generation 을 생성해 보자.

 

코드는 다음과 같다.

 

 

 

 

위 코드는 p = 0.3 인 경우의 Bernoulli r.v. 를 생성하고 이에 대한 pmf, cdf 를 표현했으며

 

시뮬레이션에 따른 평균과 분산은 다음과 같다.

 

 

bernoulli r.v. 의 이론적인 평균은 p 이며 위 시뮬레이션의 경우 p=0.3

 

이론적 분산은 p(1-p)=0.3 x 0.7=0.21

 

이므로 시뮬레이션 결과와 이론적 평균 분산 값이 일치 함을 확인 할 수 있다.


  1. ㅠㅜ 2016.12.04 17:49

    bernoulli cdf를 전체 실수 정의역에서 plot할 수는 없나요? 올려주신 코드는 0, 1에서의 값만 알아볼 수 있는데 x에 -1을 입력하면 0, 5를 입력하면 1이 되는 코드를 짜려면 어떻게 해야 하는지 궁금합니다. if문으로는 단일 입력에 대한 값만 볼 수 있고 plot 등 벡터에 대한 값은 볼 수 없던데..

+ Recent posts