코딩하는 수학과생 :: 'R' 카테고리의 글 목록


반응형

이번 포스팅에서는 여러 가지 분포들의 그래프를 그려서 중심 극한 정리를 증명해보겠습니다.

 

중심 극한 정리를 한 줄로 쉽게 설명하면

 

한 확률분포확률변수들의 평균의 분포가 정규분포에 가까워진다는 것입니다

 

풀어말하면 한 집단에서 n개를 추출해서 평균을 낸것을 X1이라 두고

 

다시 한번 n개를 추출해서 평균 낸 것을 X2라 둡니다.

 

이런 식으로 뽑혀 평균 내진 X1, X2, ... , Xn들이 정규분포를 이룬다는 것입니다.

 

이러한 정리를 사용하기 위해서는 조건이 몇 가지 필요합니다.

 

1. 동일한 확률분포를 가져야한다.

2. n이 충분히 커야 한다.

(여기서 n은 Xn의 n이 아니고 n개 추출했을 때의 n입니다.)

 


이산형 분포의 이항 분포, 포아송 분포, 기하 분포

 

연속형 분포의 균일 분포, 지수 분포, 감마 분포

 

이렇게 6가지 분포에 대하여 중심 극한 정리를 이용하여 그래프를 그려보겠습니다.


그래프를 그리는 방식은 다음과 같습니다.

 

0. R 프로그램을 사용할 수 있는 툴을 연다. (ex. Rstudio, Jupyter notebook,...)

 

1. 해당 분포의 자료 생성

 

2. 표본의 크기를 바꿔가며 자료를 생성

 

3. 표본 평균 계산

 

4. 시뮬레이션 1000회 반복

 

5. 하나의 그래프에 표본의 크기만 다른 분포를 겹쳐 그려 비교한다.


우선 이산 확률 분포인 이항 분포를 예시로 하여 위의 5가지 과정을 수행한 코드를 먼저 보겠습니다.

 

sol)

 

binomCLT = function(n){                           #중심 극한 정리 함수를 만들어줍니다.
  
  mean = c()                                           #표본들의 평균을 저장해줍니다.
  
  for(i in 1:1000){                                      #반복 횟수를 지정해줍니다.
    
    mean = c(mean, mean(rbinom(n, 10, 0.6))) #이항 분포의 표본 평균을 구하여 각 반복의 표본 평균을 저장해 줍니다.
                    #여기서 rbinom(n, 10, 0.6) 함수는 표본의 크기가 n 일 때 X~b(10, 0.6)의 자료를 생성해내는 함수입니다.
    
  }
  
  return(mean)                                          #CLT함수 내의 표본 평균을 불러내옵니다.
  
}

 

여기서 다른 확률 분포의 그래프를 그리고 싶다면

binomCLT, rbinom(n, 10, 0.6) 두 부분만 바꿔주면 됩니다.

 

이항분포 rbinom(n, m, p) (m=size, p=prob)
포아송분포 rpois(n, x) (x=lambda)
기하분포 rgeom(n, p) (p=prob)
균일분포 runif(n, p) (p = prob)
지수분포 rexp(n,p) (p=rate)
감마분포 rgamma(n, k, θ) (k=shape, θ=scale)

binomCLT 부분은 그래프에 나타는 이름 때문에 바꾸는 것입니다.

이 부분을 바꿔 주셨다면 밑의 그래프 코드 부분도 바꿔주셔야 합니다 *v*


이제 위의 함수를 통해서 표본 평균들이 구해졌습니다.

 

이제 이 표본 평균들을 이용하여 확률 밀도 함수 그래프를 그려보겠습니다.

 

그래프를 그리기 위해서 맨 윗줄에

 

par(mfrow=c(2,3)) 이 코드를 입력해주세요

 

그래프를 그리는 작업을 하기 위한 코드입니다. 처음 한 번만 작성하시면 됩니다.

 

이제 표본을 크기를 달리하며 그래프를 그려보겠습니다.

 

plot(density(binomCLT(5)), ylim=c(0,3))                  # 표본의 크기 : 5

 

lines(density(binomCLT(10)),col='blue')                  # 표본의 크기 : 10

 

lines(density(binomCLT(20)),col='red')                    # 표본의 크기 : 20

 

lines(density(binomCLT(50)),col='green')                 # 표본의 크기 : 50

 


위의 그림을 보면 표본의 크기가 커질수록 정규분포와 근사한 모양을 띈다는 것을 알 수 있습니다.

 

비슷한 방식으로 다른 6가지 확률 분포에 대하여 같은 방식으로 그래프를 그려보았습니다.

 

왼쪽 위부터 순서대로 이항 분포, 포아송 분포, 기하 분포, 균일 분포, 지수 분포, 감마 분포입니다.

 

이산, 연속과는 상관없이 n이 커지면 정규분포에 가까워지는 것이 보입니다.

 

반응형
Posted by dooooh
,
반응형

안녕하세요~ 이번에는 Rstudio를 이용하지 않고 R을 사용하는 방법을 알아보겠습니다.

 

보통 R을 사용하려면 Rstudio를 사용하지만 이 방법만이 있는 것은 아닙니다.

 

Rstudio가 복잡하거나 어렵다고 생각하시는 분들이나 코딩 결과를 바로바로 보고 싶으신 분들 같은 경우에 쉽게 사용할 수 있는 것이 Conda 입니다. 

 

물론 위의 이유만이 아니라 여러 가지 필요한 패키지를 받다 보면 패키지 버전이 엉키는 제대로 실행되지 않는 경우가 생길 수 있는데 이러한 문제들을 해결해 줄 수 있습니다^^

 

Conda에서는 '가상환경'이란느 것을 만들 수 있기 때문에 효율 좋게 작업할 수 있습니다.

 

----------------------------------------------------------------------------------------------------------------

 

Jupyter notebook을 이용하기에 앞서 저희가 준비해야 할 작업은 3가지입니다.

 

1. R 다운로드

2. Python 다운로드

3. Conda 다운로드

 

이 세 가지 방법은 다른 글들에 쉽고 자세하게 설명되어 있습니다.

각 링크에 들어가셔서 사진 보시면서 따라 하시면 쉽게 다운로드할 수 있습니다.

 

----------------------------------------------------------------------------------------------------

 

1. R 다운로드R / RStudio 다운로드 처음부터 자세하게

 

R / RStudio 다운로드 처음부터 자세하게

R에 대한 첫 번째 글로 R과 RStudio 소프트웨어의 설치방법에 대해 알아보도록 하겠습니다. RStudio를 설치하기 전에 우선 R이라는 소프트 웨어를 설치해보겠습니다. 1) R을 설치하기 위해 구글에 R cran mirror k..

dooooh.tistory.com

 

2. Python 다운로드 :  Python / PyCharm 다운로드 처음부터 자세하게

 

Python / PyCharm 다운로드 처음부터 자세하게

파이썬에 대한 첫 글로 Python과 Pycharm 설치방법에 대해 알아보겠습니다. Pycharm을 설치하기 전에 우선 Python을 설치하겠습니다. -------------------------------------------------------------------------..

dooooh.tistory.com

 

3. Conda 다운로드: Python / Anaconda / Miniconda 다운로드 처음부터 자세하게

 

Python / Anaconda / Miniconda 다운로드 처음부터 자세하게

이번에는 파이썬을 사용할 수 있는 툴인 Miniconda를 다운로드 받아보겠습니다. Miniconda는 이름대로 기존의 Conda보다 조금 더 가벼운 툴이라고 생각하시면 됩니다 ㅋ.ㅋ Conda의 가상 환경 구축, 패키지 설치..

dooooh.tistory.com

 

-----------------------------------------------------------------------------------------------------

 

다운을 다 받으셨다면 Anaconda prompt를 실행시켜줍니다.

 

처음 다운받으셨다면 사용하기 위해 최소한의 몇 가지 작업을 해주어야 합니다.

 

우선 가상 환경을 구축해야 합니다.

 

밑의 명령문을 그대로 적으시면 가상 환경이 구축되지만 각 의미가 무엇인지 궁금하신 분은 아래 링크를 통해 확인하실 수 있습니다~~

 

conda create -n dooooh python=3.7

(띄어쓰기에도 유의해주세요)

 

위와 같이 입력하면 쭉~~ 뭐가 뜨고 마지막에 Proceed y/n이 뜨게 됩니다.

 

 

이것은 가상 환경 구축을 할거냐 말거냐 물어보는 것이기 때문에 y를 입력해주고 enter를 쳐줍니다.

 

그러면 python 기반으로 dooooh라는 가상환경 구축이 완료됩니다.

 

이제 저희 가상 환경이 구축되었습니다. 이제 가상 환경을 활성화시켜보겠습니다.

conda activate dooooh

 

 

위와 같이 입력한 후 엔터를 쳐주면 외쪽의 (base)가 (dooooh)로 바뀌게 됩니다. dooooh라는 가상 환경이 활성화된 것입니다.

 

가상 환경이 구축되었다면 이제 가상 환경에서 필요한 package들을 설치해주겠습니다.

 

conda install r-irkernel jupyter

 

 

위와 같이 입력해준 뒤 엔터를 눌러주면 또 한 번 proceed y/n이 뜨게 됩니다.

 

설치하기 위해서 y를 입력하고 엔터를 눌러줍니다.

그러면 package들을 설치하느라 시간이 조금 걸립니다. 설치가 완료되면 dooooh라는 가상 환경에서는 R과 jupyter패키지가 다운돼서 사용할 수 있게 되는 것입니다.

 

다운이 완료된 후 화면이 초기화됩니다.

 

=================================================================

#만약 가상 환경에서 빠져나오고 싶으신 경우에는

 

conda deactivate

를 입력해주면 빠져나오게 됩니다.

 

=================================================================

 

dooooh라는 가상 환경을 활성화 해준 뒤에 jupyter notebook를 실행시켜 줍니다.

 

엔터를 치시면 jupyter notenook 홈페이지로 이동되게 됩니다.

 

 

여기까지 했다면 이제 R을 사용할 수 있는 환경이 모두 준비되었습니다.

 

--------------------------------------------------------------------------------------

 

이제 jupyter notebook을 이용해서 R을 사용해 보겠습니다.

 

 

사진에 빨간색 네모칸의 New를 눌러준 후 R을 눌러주면 R을 이용할 수 있습니다.

 

 

내 컴퓨터에 Documents 폴더에 dooooh 폴더를 만들어서 저장해보겠습니다.

 

New의 R을 눌러준다면

 

 

이러한 화면이 나타나게 됩니다. 이제 이 곳에서 R을 이용할 수 있습니다.

 

 

이런 식으로 이용하면 됩니다. 코딩을 하신 후에 shift + enter를 눌러주시면 바로바로 실행되게 됩니다.

 

다 하시고 저장하실 때는 맨 위의 Untitld를 눌러 이름을 바꾼 후에 왼쪽 위에 파일 모양 아이콘을 클릭해 주신 후 File을 눌러 맨 밑에 Close and Halt를 누르시면 저장되고 나오게 됩니다.

 

다시 나온 후에 우측 상단의 Quit를 누르시면 다시 conda prompt가 활성화됩니다.

 

만약에 Quit를 누르시지 않고 끈다면 Anaconda prompt가 작동되지 않으실 겁니다. 그런 경우에는 Ctrl+C,C (C두번)를 눌러주면 다시 작동되게 됩니다^^

반응형
Posted by dooooh
,
반응형

다음 데이터의 분포를 살펴보겠습니다~

 

 

이 자료의 범위(range)는 몇일까?

[범위 = 최댓값 - 최솟값] 이므로 범위 = 30 - 0 =  30 이 된다.

대부분의 데이터가  10 과  21 사이에 모여있는 것이 보인다.

이 자료를 가지고 통계적 분석을 할 경우에  과  30 의 자료 때문에 문제가 생길 수 있다.

 

사분범위는 이러한 특이값(이상값)이 발생한 문제를 해결해줄 수 있다.
사분범위(IQR, InterQuartile Range)는 제3사분위수와 제1사분위수 사이의 범위이다.

식으로 나타내면  IQR = Q3 - Q1이다.

 

IQR은 range와는 다르게 통계적으로 매우 유용하다.

쉽게 예를 들어 두 가지 자료가 있다고  하자

자료 1) (1, 2, 6, 10, 18, 30)    # range = 29    / IQR = 13

자료 2) (1, 2, 6, 10, 18, 3000) # range = 2900 / IQR = 13

 

자료 1,2의 range를 비교해보면  29 와  2900 로 엄청난 차이가 난다.

하지만 사분범위는 모두  13 으로 같다.

특이값들을 제외함으로써 자료의 중심의 성격을 더 잘 이해할 수 있게 되는 것입니다.

 

 

사분위수에 대해 제대로 이해하고 있지 않다면 이전 글에 설명해 놓은걸 보고 오시면 됩니다^.^

사분위수 : R / Rstudio 사분위수 / 분위수를 구해보자(사분위수 편)

 

R / Rstudio 사분위수 / 분위수를 구해보자(사분위수 편)

이번에는 구해볼것은 사분위수입니다~~ 사분위수를 처음 봤을때는 헷갈리는게 너무 많지만 의미를 잘 이해하고 제가 정한 메뉴얼대로 구하는 연습을 하다보니까 어느샌가 조금 친근하게 느껴지더라구요 ㅋ.ㅋ 데이..

dooooh.tistory.com

 

IQR = Q3 - Q1 = 23 - 8 = 15

 

----------------------------------------------------------------------------

 

손 계산으로 사분범위를 구하는 방법을 보겠습니다.

 

step1) 사분범위를 구하기 위하여 Q1Q3값을 구한다.

#Q1 값은 데이터의 25%가 있는 지점이다.

#Q3 값은 Q1의 반대쪽 25%인 데이터의 75%가 있는 지점이다.

 

step 2) Q1과 Q3 사이의 범위를 구한다.

#사분범위는 Q1과 Q3 사이의 범위

 

손 계산을 한다면 이러한 과정을 거쳐 사분 범위를 구할 수 있습니다.

 

----------------------------------------------------------------------------

 

이번에는 R을 이용하여 사분범위(IQR)을 구해보겠습니다.

 

R에는 사분범위를 구할 수 있는 IQR() 함수가 존재합니다.

IQR() 함수에 자료를 넣어주면 사분범위값이 나옵니다.

 

 

위에 들었던 예시로 구해봤습니다. 사분범위는 모두  13 으로 같은 값이 나옵니다.

 

자료를 보다 보면 항상 동떨어진 값들이 존재합니다. 이런 값들을 무시하게 되면 정말 이상한 결과가 나와버릴 수도 있어서 이 특이치라 불리는 값들을 찾아서 제거해주는 과정은 꼭 필요합니다.

 

사분범위를 손으로 구해서 상자 그림 그리면서 하다 보면 계산 실수도 엄청하게 되는데 코딩으로 하면 함수 하나만 쓰면 바로 구해지니 코딩을 하는 것에 대해 너무 어렵게 생각하지 않아도 될 것 같습니다. ^ㅇ^

 

저도 코딩하면 어려운 것 이라고만 생각하고 있었는데 너무 함수들이 잘 만들어져 있어서 부담 없이 공부할 것 같아요 ㅋ.ㅋ

반응형
Posted by dooooh
,
반응형

사분위수를 구해봤으니 이번엔 분위수를 구해보겠습니다.

n-분위수는 자료들을 n등분을 한 것을 말합니다. 말 그대로 4-분위수는 4등분한 값을 말합니다.

그러므로 작은 범위인 사분위수를 먼저 이해한다면 분위수를 더 쉽게 이해할 수 있습니다.

사분위수2020/03/06 - [R] - R / Rstudio 사분위수 / 분위수를 구해보자(사분위수 편)

 

R / Rstudio 사분위수 / 분위수를 구해보자(사분위수 편)

이번에는 구해볼것은 사분위수입니다~~ 사분위수를 처음 봤을때는 헷갈리는게 너무 많지만 의미를 잘 이해하고 제가 정한 메뉴얼대로 구하는 연습을 하다보니까 어느샌가 조금 친근하게 느껴지더라구요 ㅋ.ㅋ 데이..

dooooh.tistory.com

 

-------------------------------------------------------------------

 

n-분위수란 오름차순 정렬되어 있는 자료를 n 등분한 자료를 말합니다.

 

 

2-분위수 = median

2분위수는 주어진 자료를 2 등분합니다. 또한 2분위수는 중앙값(median)이라고도 부릅니다.

 

 

4-분위수 = quartiles

4분위수는 주어진 자료를 4개의 그룹으로 분리시킵니다. 또한 사분위수(quartiles)라고도 부릅니다.

 

10분위수도 마찬가지로 자료를 10등분 하며 deciles라고 부릅니다.

 

또한 백분위수(percentiles)라는 것이 존재하는데 이는 자료를 100등분 하는 것을 말합니다. 

 

-------------------------------------------------------------------

 

이제 분위수의 개념을 알았으니 R을 이용하여 구해보도록 하겠습니다.

 

R에서 분위수를 구하는 함수는 quantile(x, y) 함수입니다.

x는 자료, y는 0~1 사이의 값 이 들어갑니다.

quantile(data, 0.5)는 중앙값을 구해주고

quantile(data, 0.25)는 제1 사분위수를 구해줍니다.

 

마찬가지로 quantile(data, 0.99)는 100등분을 하는 99번째 값을 구해줍니다.

 

-------------------------------------------------------------------

 

시작으로 R을 이용하여 10분위수(deciles)를 구하는 방법을 알아보겠습니다.

 

10분위수도 마찬가지로 quantile 함수만 알고 있다면 누구나 쉽게 구할 수 있습니다.

 

 

위의 자료의 20%의 자료가 존재하는 부분이  6  이고 30%의 자료가 존재하는 곳이  10.7  임을 알 수 있습니다.

 

하지만 quantile 함수는 분위수의 개념과 약간 다르다고 느낄수도 있습니다. 분위수는 자료를 n등분 하는거지만 quantile 함수는 자료를 2:8  3:7로 나눈 값을 보여준 것입니다.

 

10분위수를 한번에 다 구하는 방법도 있습니다.

quantile(x, y)에서 y 값에 c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9) 값을 넣어주는 것입니다.

4분위수라 하면 y값에 c(0.25, 0.5, 0.75) 값을 넣어주면 사분위수들이 다 나오게 됩니다.

 

 

위와같이 함수에 이러한 값을 넣어줌으로써 모든 10분위수들을 다 구할 수 있습니다.

 

-------------------------------------------------------------------

 

위 자료를 다시한번 예를들어 27백분위수를 구해보겠습니다.

 

 

여기서 27백분위수는  10.13  이 나왔습니다.

 

그렇다면  10 27백분위수보다 높을까요 낮을까요?

 

정답은 "낮다"입니다. 

 

이해를 돕기위해 26백분위수도 구해보겠습니다.

 

 

26백분위수는  9.76  이 나왔습니다. 이 말은 10이라는 값은 26백분위수27백분위수 사이에 존재한다는 것입니다.

 

또한 분위수는 우선적으로 오름차순 정렬을 해준 뒤 등분하는 것이기 때문에  10  은  10.13  보다 아래에 있다고 볼 수 있습니다.

 

-------------------------------------------------------------------

 

 기본적인 분위수에 대해 알아봤습니다. 마지막으로 요약정리를 해보겠습니다.

 

1) 분위수는 등분을 하는 것이기 때문에 Q1, Q2, Q3 세 개로 쪼개면 4-분위수 인것처럼

n개를 기준으로 쪼개게 되면 n+1분위수가 되는 것입니다. 

 

2) 2분위수는 median

4분위수는 quartiles

10분위수는 deciles

100분위수는 percentiles라고 부릅니다.

 

3) 사분위수는 자료를 4개의 그룹으로 백분위수는 자료를 100개의 그룹으로 나누는 것입니다.

 

-------------------------------------------------------------------

반응형
Posted by dooooh
,
반응형

이번에는 구해볼것은 사분위수입니다~~ 사분위수를 처음 봤을때는 헷갈리는게 너무 많지만 의미를 잘  이해하고 제가 정한 메뉴얼대로 구하는 연습을 하다보니까 어느샌가 조금 친근하게 느껴지더라구요

ㅋ.ㅋ

 

데이터의 개수가 적은 경우에는 적은 계산으로 구할 수 있지만 개수가 많아지면 손계산으로는 좀... 그렇기 때문에 R을 이용해서 구해보겠습니다!

 

사분위수란 데이터를 4등분 해주는 수들을 말합니다.

 

Q1, Q2, Q3, Q4로 나타내고 Q2는 좌우로 데이터가 50%씩 존재하는 중위수와 같은 의미를 가집니다.

 

제1 사분위수(Q1)

제2 사분위수(Q2)

제3 사분위수(Q3)

제4 사분위수(Q4)

Q1아래 25% 데이터가 존재

Q2아래 50% 데이터가 존재

Q3아래 75% 데이터가 존재

Q4아래 100% 데이터가 존재

 

----------------------------------------------------------------------------------------------------------------

 

그러면 이제 사분위수의 의미를 알았으니 한번 구해보겠습니다.

 

사분위수를 구하는 방법입니다.

 

step1) 데이터들을 오름차순 정렬시킨다.

 

step2) 중앙값을 찾는다.

 

step3) 중앙값을 기준으로 좌, 우의 데이터의 중앙값들을 찾는다.

 

이제 예를 들어보겠습니다.

 

60, 15, 10, 3, -4, 3, -30

 

이런 홀수개 데이터가 있을때 사분위수를 구해봅시다.

 

1) 오름차순 정렬

 

-30, -4, 3, 3, 10, 15, 60

 

2) 제2 사분위수 = 중앙값

3을 기준으로 좌우로 데이터가 3개씩 존재하므로 중앙값은 3이 됩니다.

∴ Q2 = 3 

 

3) 좌,우 데이터의 중앙값

 

|| -30, -4, 3 || 10, 15, 60 ||

 

좌측 데이터의 중앙값은  -4  우측 데이터의 중앙값은  15  가 됩니다.

 

∴ Q1 = -4, Q3 = 15

 

----------------------------------------------------------------------------------------------------------------

 

만약 데이터의 개수가 짝수인 경우에는 어떤 값을 제2 사분위수로 봐야할까요?

 

-30, -4, 3, 10, 15, 60

 

이러한 경우에는 중앙값을 구했던 것과 같이 가운데 두 수의 평균제2 사분위수로 합니다.

 

Q2 = (3 + 10) / 2 =  6.5 

 

중위수를 공부했기 때문에 Q2를 구하는 과정을 바로 이해가 됩니다. 그렇다면 Q1Q3는 어떻게 구할까요?

조금 헷갈릴 수 있지만 의미를 잘 이해하고 위의 step을 잘 따라가다보면 쉽게 구할 수 있습니다.

 

Q1은 중앙값을 기준으로 좌측데이터의 중앙값입니다. 

 

Q2가  6.5  이므로  6.5 왼쪽의 데이터들을 보면

 

-30, -4, 3

 

입니다. 여기서의 중앙값이므로  Q1 = -4  임을 알 수 있습니다.

#당연히 또 왼쪽 데이터가 짝수인 경우 가운데값들의 평균을 내주면 되겠쥬? :)

 

마찬가지 방법으로  Q3 = 15  임을 알 수 있습니다.

 

=====

데이터가 홀수개인 경우 Q1Q3을 구할때 Q2를 포함해서 구하는 방법도 있으나 딱히 정해진게 아니라서 위에서 말한 step을 거쳐서 구하시면 됩니당.

=====

 

----------------------------------------------------------------------------------------------------------------

 

이제 사분위수의 의미와 구하는 방법을 알았으니 R을 이용하여 구해보겠습니다.

 

R에는 다행히(?) 사분위수를 한번에 구해주는 quantile() 함수가 존재합니다.

 

Q1 <- quantile(data, 0.25)

 

이런식으로 사용합니다.

R에서는 Q1, Q3을 구할때 Q2를 포함한 값의 중앙값으로 계산을 하였네요..

손계산하고 출력값이 다르다고해서 너무 당황하지 않으셔도 됩니당 ㅋ.ㅋ

구하는 방법이 다른거지 틀린게 아니니까요 (●'◡'●)a

 

이번에 사분위수를 제대로 이해했다면 다음글에 쓸 분위수도 똑같은 개념이기 때문에 쉽게 이해할 수 있을거에요~

 

나중에 더 뒤쪽 공부를 하다가 까먹으면 다시 앞쪽으로 와서 보고 가면 되겠지만 이해하지 못하고 넘어간다면 다시 공부해야하는 불상사가 생길수도 있으니까... 한번할때 외우지말고 이해하는게 좋은것같아요!!

반응형
Posted by dooooh
,