[R] 랜덤 추출 함수 (sample, prob)

sample-function-in-r

해당 포스트는 R의 랜덤 추출 함수인 sample 및 prob 옵션에 대해 설명합니다.

INTRO

R에서 랜덤 추출을 담당하는 기본 함수에는 sample()이 있습니다. 난수 생성, 복원/비복원 추출 등의 실험에서 사용되는 함수로 prob= 옵션으로 추출 대상 각각에 추출 확률을 지정할 수 있습니다. 아래에서는 네이버 지식인을 통해 받은 질문에 대한 답변과 sample() 함수의 사용법을 함께 설명합니다.

sample-function-in-r
[출처] 네이버 지식인

문제 풀이

1. sample() 함수 설명

sample() 함수는 데이터를 랜덤 추출할 때 사용하는 함수이며, 기본적인 사용법은 아래와 같습니다.

sample(x, size, replace = FALSE, prob = NULL)

  • x : 랜덤 추출 대상이 되는 데이터
  • size : 랜덤 추출할 개수
  • replace : 복원 추출 여부 (기본값은 FALSE)
  • prob : 랜덤 추출 확률 지정

2. 코드 설명

위 질문에서 받은 코드를 한 줄로 변경하면 아래와 같으며, 해당 코드를 읽어본다면 아래와 같습니다.

sample(x = 1:10, size = 5, replace=T, prob=c(rep(0.01,9), 0.91)

  1. x = 1:10 : 1부터 10까지의 숫자들을 랜덤 추출하는데
  2. size = 5 : 5개의 숫자를 추출하며
  3. replace = T : 추출 방법은 복원 추출을 이용한다
  4. prob = c(rep(0.01, 9), 0.91 : 추출 대상의 각 추출 확률은 0.01, 0.01, ..., 0.91로 지정한다


위 설명에서 다른 부분은 이해가 잘 되시겠지만 마지막 prob = c(rep(0.01, 9), 0.91 옵션이 헷갈릴 수 있습니다. prob 옵션의 입력을 실행 단계로 구분해 보면 아래와 같습니다.


  1. rep(0.01, 9) : 0.01을 9번 반복해라 -> (0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01)
  2. c(rep(0.01, 9), 0.91) : 1번에 0.91 값을 추가해라 -> (0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.91)


prob옵션을 적용하여 코드를 다시 읽어본다면,

  1. 복원 추출 방법으로
  2. 5개의 숫자를 추출하는데
  3. 대상 데이터 및 추출 확률은 아래와 같다.
1 = 0.01
2 = 0.01
3 = 0.01
4 = 0.01
5 = 0.01
6 = 0.01
7 = 0.01
8 = 0.01
9 = 0.01
10 = 0.91

3. 테스트

위에서 설명한대로 질문 받은 코드는 1:10까지 숫자에서 5개의 숫자를 뽑는데 각 숫자는 위 확률표에 기반하여 추출이 됩니다. 아래는 5번의 테스트 결과로 10의 추출 확률이 0.91로 월등히 높기 때문에 항상 높은 비중으로 추출되는 것을 볼 수 있습니다.

참고로 set.seed를 지정하지 않았기에 결과값은 실행하시는 분마다 다르게 나타납니다.

sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10  8 10

sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10  8

sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10

sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10

sample(x = 1:10, size = 5, replace = T, prob=c(rep(0.01,9), 0.91))
# [1] 10 10 10 10 10

마무리

이번 포스트에서는 R에서 랜덤 추출을 담당하는 sample() 함수에 대해 소개하였습니다. 간단하지만 유용한 함수로 통계, 시뮬레이션, 머신러닝 데이터 분할 등에 활용되며, 주사위 게임, 카드 뽑기, 사다리 타기, 로또 시뮬레이션 등 퀴즈에서 많이 출제되는 편입니다. 사용법을 잘 익혀두시고 많은 곳에 활용하시면 좋겠습니다.


관련 링크

[1] 네이버 지식인
[2] [R] 데이터 샘플링 (Data Sampling)
[3] [R] 정수 리스트에서 첫번째 짝수 전까지 홀수 정수 출력하기
[4] [R] R에서 반응 변수 비율에 맞춰 데이터셋 분할하기 (15회 ADP 실기 기출)