티스토리 뷰
R에서 시뮬레이션을 위해서 임의의 변수를 생성하는 경우가 종종 있다.
이번에는 다양한 랜덤 변수를 생성하는 방식을 정리해 보려고 한다.
Sample
가장 일반적으로 임의의 수를 생성하는 함수는 sample() 이다.
sample() 함수는 다음과 같이 범위를 지정해 주고 추출할 수의 개수를 지정하면 된다.
첫번째 예제는 1~10 사이의 임의의 수 4개를 추출한 것이다.
마지막 예제는 letters에 저장된 알파벳 26자 중에서 5개를 임의로 생성한 것이다.
만약 동일한 값이 중복해서 생성해도 된다면, 다음과 같이 replace = TRUE를 지정하면 된다.
그리고 다음 예제를 살펴보자.
set.seed(1)를 사용하고 있는데, 잘 보면 set.seed(1)이 호출된 다음에 sample() 함수의 결과가 동일하다.
즉, 시뮬레이션을 할 때 동일한 값으로 계속 생성하고 싶다면 set.seed를 활용하면 된다.
상당히 유용한 함수이니 꼭 기억해 두기 바란다.
rnorm, dnorm, pnorm, qnorm 이해
이제 정규분포와 같은 특정 분포를 따르는 임의의 수를 생성하는 함수를 살펴보자.
정규분포를 따르는 함수를 생성하는 것은 rnorm() 함수가 있다.
R 도움말에서 "rnorm"을 찾아보면, rnorm 이외에 dnorm, pnorm, qnorm 등이 나타난다.
간략하게 살펴보면, dnorm()은 정규분포를 따르는 확률 밀도 함수의 값을 리턴하는 함수이다.
pnorm()은 정규분포를 따르는 누적분포함수를 나타낸다.
그리고 qnorm()은 pnorm()의 역을 나타낸다.
임의의 수를 생성하기 전에 dnorm, pnorm, qnorm의 예를 잠시 살펴보도록 하자.
dnorm(0)는 평균 0, 표준편차 1인 정규분포에서 x값 0의 확률을 나타낸다고 보면 된다.
dnorm(0, mean = 4)는 평균이 4인 정규분포에서 x값 0의 확률이다.
다음 예제를 보면 실제로 dnorm이 정규분포를 나타낸다는 것을 확인할 수 있다.
평균과 표준편차 값을 변경해서 확인하면 더 확실하게 알 수 있다.
pnorm()은 누적분포를 나타낸다고 했다.
다음 예제로 실제 누적분포를 보이는지 확인할 수 있다.
그리고 아래와 같이 pnorm(0)이 0.5를 나타냈으므로, qnorm(0.5)를 넣으면 0이 나온다.
즉, qnorm은 pnorm의 역임을 알 수 있다.
특정 분포를 따르는 임의의 수 생성하기
이제 다시 시뮬레이션으로 돌아와서 정규분포를 따르는 임의의 수는 rnorm()으로 생성할 수 있다.
이항분포를 나타내는 임의의 수는 rbinom()으로, 포아송 분포를 나타내는 임의의 수는 rpois()로 생성할 수 있다.
rnorm()의 첫번째 인수는 생성할 임의의 수의 개수이고, 두번째는 평균, 세번째 인수는 표준편차이다.
마지막 summary(x)를 보면 산술평균이나 중앙값이 20에 가까운 것을 알 수 있다.
포아송 분포는 단위 시간에 어떤 사건이 몇 번 발생할 것인지를 나타내는 이산 확률 분포다.
여기에서는 두번째 인수로 람다(lamda)값을 지정하는데, 이것이 바로 어떤 사건이 일어날 회수에 대한 기대값이다.
이항 분포는 세번째 인수로 확률을 지정한다.
아래 예제는 1이 0.5의 확률로 나오도록 임의의 수를 생성한 것이다.
당연히 확률분포를 따르는 경우에도 set.seed()를 통해서 계속 동일한 값이 나오도록 구성할 수 있다.
마지막으로 rnorm을 통해서 선형 모델을 구성하는 예졔를 살펴보기로 하자.
y= b + ax + e 형태의 선형 모델이고, 각각의 변수 x와 e는 rnorm()으로 임의로 생성했다.
plot()을 통해 결과를 살펴보면 우상향 직선으로 선형 모델이 만들어졌음을 확인할 수 있다.
미니의 R 주요 강좌...
R의 lapply, sapply, vapply를 이해하자~
'Cloud&BigData > R' 카테고리의 다른 글
R 디버깅 툴 활용하기~ (0) | 2015.10.14 |
---|---|
R 함수에서 캐시 활용하기~ (0) | 2015.10.12 |
R의 함수 작성 및 활용~ (0) | 2015.10.07 |
R의 split 활용 (0) | 2015.10.05 |
R의 apply, tapply의 활용법을 알아보자~ (0) | 2015.10.01 |