류동균의 R 공부방입니다.
표본추출(Sampling) 본문
1. 표본추출의 정의
표본추출이란 데이터의 모집단 중 일부를 표본으로 추출하는 것을 말한다. 보통 데이터를 분석할때 train/test 데이터를 7:3 , 8:2 등의 비율로 나누게 되는데 여기서 그 과정에서 표본 추출이 중요하다. 만약 데이터를 train/test로 분리하지 않고 모델링과 모델 평가를 한다면 과적합이 발생해 예측력이 떨어질 수가 있다.
2. 표본추출의 종류
표본추출은 여러가지가 있는데 기본적으로는 '단순 임의 추출', '층화 임의 추출', '계통 추출' 이 있다. 이 글에서는 이 3개의 추출 방법만 다룰 예정이다. iris 데이터를 모집단으로 두고 코드를 실행시켜보며 차례대로 알아보도록 하자.
2-1. 단순 임의 추출
단순 임의 추출(Simple Random Sampling)이란 표본을 추출 할때 각 데이터가 추출될 확률이 동일한 추출 방법이다. 예를들어 주머니에 빨강, 파랑, 노랑 공을 10개씩 넣고 보지않고 5개를 꺼내는 것과 동일하다. 단순 임의 추출에는 다시 '복원 추출(Sampling with Replacement)', '비복원 추출('Sampling without Replacement)'로 나뉜다. 두가지의 차이는 복원추출의 경우 주머니에서 공을 꺼내서 확인 후 다시 주머니에 넣고 다음 공을 꺼내는 방식이고 비복원추출의 경우 꺼낸 공을 다시 넣지않고 다음 공을 꺼내는 것과 같다. 이제 R에서 코드로 단순임의추출을 사용해 iris데이터의 표본을 추출해보자.
## 단순 임의 추출
# prob 옵션은 가중치를 의미
# 복원 추출
sample(x = 1:nrow(iris), size = 10, replace = F, prob = NULL)
# 비복원 추출
sample(x = 1:nrow(iris), size = 10, replace = T, prob = NULL)
2-2. 층화 임의 추출
층화 임의 추출(Stratified Random Sampling)이란 데이터가 중첩 없이 분할될 수 있는 겨우에 사용된다. 예를 들면, 남성과 여성의 비율이 20:80인 어떤 집단의 평균 키를 조사하자고 할때 단순 임의 추출을 사용한다면 우연히 여자가 많이 뽑히거나 남자가 많이 뽑혀 정확한 분석이 어려운 경우가 있다. 층화 임의 추출의 경우 이 데이터에 남성, 여성이라는 명확히 구분되는 층을 나누어 그 비율에 맞게 표본을 추출하는 방법이다. 층화 임의 추출을 하게 되면 위의 경우 전체 집단의 키의 평균과 각 층의 키의 평균또한 구할 수 있다는 장점이 있다.
# 필요한 패키지
# install.packages("sampling") sampling 패키지가 없다면 다운받아주도록 한다.
library(sampling)
# strata() 함수를 사용하여 iris데이터의 Species에서 각각 5개씩 추출
# method 옵션에서 srswor, srswr, poisson, systematic은 각각 비복원 단순 임의 추출, 복원 단순 임의 추출
# 포아송 추출, 계통 추출을 의미
x <- strata(data = iris, stratanames = "Species", size = c(5,5,5), method = "srswor")
getdata(iris,x)
2-3. 계통 추출
계통 추출이란 모집단의 임의의 위치에서 시작해 매 K번째 데이터를 표본으로 추출하는 방법이다. 예를 들면 1~100에서 10가지의 수를 표본으로 추출한다고 해보자 100/10 = 10 이므로 k = 10이 된다. 그리고 1~k 사이에서 임의로 수를 하나 고른다. 이것이 시작위치가 된다. 시작위치가 6이라고 가정하면 나머지 수를 뽑기위해 6+10, 16+10 ... 와 같이 K를 시작위치에서 계속 더해가며 표본을 추출하는 방법이다. 하지만 만약 데이터에 주기성이 존재한다면 편향된 추정값을 추출할 가능성이 있으니 데이터의 주기성 유무를 잘 파악해야 한다.
# 필요한 패키지
# install.packages("doBy") doBy 패키지가 없다면 다운받아주도록 한다
library(doBy)
# 계통추출 sampleBy()
# Species 별로 추출, frac 옵션은 표본의 비율을 말한다 iris 데이터는 각 Species마다 50개의
# row가 있으므로 옵션을 0.1로 해주면 각 Species마다 5개씩 추출한다.
sampleBy(~ Species, frac = 0.1, data = iris, systematic = T)
'통계' 카테고리의 다른 글
난수 생성 및 분포 (0) | 2019.10.15 |
---|