본문 바로가기
programming language/MATLAB

MATLAB PDF, CDF, CCDF

by 남성 2011. 3. 23.

이번 포스팅에서는 각종 랜덤 값들을 이용한 PDF(Probability Density Function), CDF(Cumulative Distribution Function), CCDF(Complementary Cumulative Distribution Function) 를 그리는 방법에 대해 살펴 보려 합니다.

 

PDF 를 나타내는 방법에 대해 모르시는 분들은 다음 포스팅을 참조하시길 ~

 

2010/01/03 - [programming language/MATLAB] - MATLAB PDF (Probability Density Function)

 

평균이 2 이고 분산이 10 인 가우시안 잡음을 생성해 보겠습니다. 평균이 2 이므로 +2 를 하고 분산 값이 10 이므로 sqrt(10) 을 곱해 주게 됩니다.

 

 

이제 PDF 를 계산하게 됩니다.

 

PDF 를 나타낼 때 주의 하실 점은 꼭 정규화를 해서 PDF 내부의 면적이 1이 되야 한다는 겁니다.

 

코드는 다음과 같고 ~

 

 

이렇게 종 모양으로 나오고 종 모양의 가장 위 부분이 가로축의 2 에 위치하게 됩니다.

 

 

이제 PDF 값들이 준비가 됐으니 CDF 그리는 건 너무나 쉽죠.

 

PDF 를 구간 별로 적분 한 게 CDF 니까요. 적분 할 때는 다음 코드와 같이 resol 값을 곱해 줘야겠죠~ 그 다음에 누적해 주면 끝입니다.

 

 

PDF 의 전 구간에 대한 적분 값은 1 이니까 CDF 는 다음과 같이 끝에 가면 1 이 되게 되죠~

 

 

다음으로 CCDF 는 더 쉽습니다.

 

CCDF = 1 – CDF 입니다.

 

 

그래프는 당연히 CDF 를 위 아래로 뒤집은 모양이 될 것입니다.

 

 

이상으로 오늘의 포스팅을 마칩니다. PDF 를 계산할 때, 그 면적이 1 이라는 거 굉장히 중요한 겁니다. 많이 틀리는 부분이기도 하구요.

 

이 부분만 주의 하시면 쉽게 PDF 를 표현 하실 수 있습니다.

  

댓글6

  • 2011.11.18 14:18

    비밀댓글입니다
    답글

    • 남성 2011.11.18 15:11 신고

      resol = X(2)-X(1); 은 pdf 의 x 축의 간격을 구하는 겁니다.

      PDF_gaussian = pdf./(1000.^2.*resol); 부분은 pdf 면적이 1 이 되도록 정규화를 해주는 과정이구요


      위 식에서 1000^2 을 한 이유는 처음에 샘플을 randn(1000)해서 1000 x 1000 매트릭스로 만들었기 때문에 전체 샘플 수는 1000^2 개가 되기 때문입니다.

      1000.^2.*resol 을 한 것은 pdf 의 면적을 구한 겁니다. hist() 함수의 결과로 나온 pdf 라는 변수는 다 합치면 1000^2 이 되죠. 따라서 1000^2 으로 나눠주는 것이고 이렇게 됬을때는 pdf 의 면적은 resol 값이 되겠죠. 따라서 resol 값으로 또 나눠줘야 결국에 pdf 의 면적이 1 이 되는 겁니다.

      적분의 원리에 대해 생각해 보시면 저 코드에 대해 이해 하실수 있을것 같네요. 적분이라는게 결국에는 작은 사각형 또는 사다리꼴 등으로 잘게 나눈다음에 그 사각형 또는 사다리꼴의 면적을 다 더하는 거라는걸 생각해 보셨으면 합니다.

  • 2012.10.23 21:59

    비밀댓글입니다
    답글

    • 남성 2012.10.23 22:23 신고

      이미지에 대한 histogram 도 마찮가지일것이라고 생각합니다.

      위 포스팅의 코드를 보시면 아시겠지만 A 라는 변수가 매트릭스 입니다.

      똑같이 처리하면 될 겁니다.

  • 2016.05.15 18:56

    비밀댓글입니다
    답글