이항분포는 연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 확률분포를 말하는데 말로 하는 것 보다 다음 그림을 보면 그 의미가 명확해진다.
위 틀의 꼭대기에서 구슬을 떨어뜨리면 각 층에서 좌우로 갈 확률p는 반반(1/2)으로 각층을 통과 하며(독립시행) 구슬이 제각각의 칸으로 떨어지게 되는데 아래 구슬이 쌓인 모양이 바로 이항분포가 되는 것이다.
그러면 n=30, p=0.5 일때 이항분포의 확률질량함수 PMF[Probability Mass Function](연속확률변수의 PDF에 해당), 누적분포함수 CDF[Cumulative Distribution Function] 의 예를 코딩해 보면 다음과 같다.
#!/usr/bin/env perl use 5.010; use PDL; use PDL::Stats; use PDL::GSL::CDF; use Math::GSL::Randist qw/gsl_ran_binomial_pdf/; use PDL::Graphics::PGPLOT::Window; my $win1 = pgwin(); my $x = sequence(30); $win1->env(0,30,0,1,{Title=>'binomial distribution'}); $win1->hold(); #CDF # gsl_cdf_binomial_P는 PDL::Stats에 포함된 PDL::GSL::CDF 모듈의 함수 $win1->bin($x, gsl_cdf_binomial_P($x, 0.5, 30),{COLOR=>'RED'}); #PMF # Math::GSL::Randist의 gsl_ran_binomial_pdf 함수를 사용 # PDL용 함수가 아니라서 piddle을 계산하지 못하므로 map으로 piddle $x내부의 값을 # map 함수를 사용하여 리스트를 순회하며 적용 $win1->bin($x, [ map { gsl_ran_binomial_pdf($_, 0.5, 30) } $x->list ], {COLOR=>'BLUE'}); # PDL::Stats::Distr의 pmf_binomial 함수를 사용할 시 # $win1->bin($x, $x->pmf_binomial(30, 0.5), {COLOR=>'BLUE'}); #동전을 30번 던졌을때 12번 앞면이 나올 확률 # PMF 그래프 가로축 12일때 세로축의 값 say gsl_ran_binomial_pdf(12, 0.5, 30) * 100, " %"; #say piddle(12)->pmf_binomial(30, 0.5) * 100, " %"; # pmf_binmoial 함수를 사용할 시 #동전을 30번 던졌을때 12번 이하로 앞면이 나올 확률 # CDF 그래프 가로축 12일때 세로축의 값 # 결론적으로 12까지의 PMF그래프 값을 누적한(적분) 것 say gsl_cdf_binomial_P(12, 0.5, 30) * 100, " %";
<결과>
8.05530929937956 % 18.0797304026779 %
위 그래프에서 파란색이 PMF이고 빨간색이 CDF이다. PMF그래프 아래의 면적을 구하면 1이 되고 CDF는 0에서 시작하여 1까지 증가한다는 사실을 보면 확률의 분포와 누적확률이 시각적으로 느껴질 것이라고 본다.
댓글 없음:
댓글 쓰기