[R] 표본 추출
반응형
1. Sampling
- 전체 데이터(모집단) 중 일부를 샘플(표본)로 추출하는 작업은 데이터에 분석에서 필수적 입니다.
- 또한 표본추출은 훈련 데이터(Training data)와 테스트 데이터(Test data)의 분리에서도 중요한 역할을 합니다.
- 데이터를 분리하지 않고 전체 데이터를 모델링 하여 모델 평가에 사용하게 되면
데이터에 내재하는 실제적 특징 외에 우연히 포함된 노이즈까지 반영한 모델링을 할 위험이 있습니다. (과적합, overfitting) - 모형이 과적합하게 되는 경우 예측력이 떨어지는 위험성이 존재하게 됩니다.
- 데이터를 분리하지 않고 전체 데이터를 모델링 하여 모델 평가에 사용하게 되면
- 이번 포스팅에서는 전체 데이터로부터 표본을 추출하는 방법으로 단순임의추출, 층화임의추출, 계통추출에 대해서 말씀드리겠습니다.
1. 1. Simple random sampling
- 단순임의추출(simple random sampling)은 전체 데이터에서 각 데이터를 추출할 확률을 동일하게 하여 표본을 추출하는 방법입니다.
- 여기서 데이터를 추출하는 방법에는 복원추출(Sampling with replacement)과 비복원추출(Sampling without replacement)이 있습니다.
- 복원추출은 한 번 추출된 표본을 다시 추출할 수 있는 것이 가능한 경우를 뜻하며,
비복원추출은 한 번 추출한 표본은 다시 선택할 수 없는 경우를 말합니다. - R에서 기본적으로 내장되어 있는 함수로는 sample() 함수를 이용하여 단순임의추출을 시행할 수 있습니다.
- x : 표본
- size : 표본의 크기
- replace = FALSE : 이 논리값을 TRUE로 할 경우 복원추출을 시행합니다.
- prob : 데이터가 뽑힐 가중치
sample(
x,
size,
replace = FALSE,
prob
)
- 아래는 비복원추출의 예시입니다.
lotto <- 1:45
sample(lotto, size = 6, replace = FALSE)
## [1] 13 29 24 19 26 31
- 가중치를 고려한 표번 추출을 하고 싶을 경우 prob arguments를 이용합니다.
- 아래 예시를 보면 1에서부터 10까지의 수에거 각각 1에서부터 10까지 가중치를 주어 비복원추출한 경우
가중치가 더 큰 표본들이 뽑히는 경향을 보입니다.
x <- 1:10
sample(x, size = 5, prob = 1:10)
## [1] 4 9 10 2 7
1. 2. Stratified random sampling
- 데이터가 중첩 없이 분할될 수 있는 경우, 그리고 각 분할의 성격이 명확히 이질적인 경우 층화임의추출(Stratified random sampling)을 수행하여 더 정확한 분석 결과를 얻을 수 있습니다.
- 층화임의추출은
sampling
라이브러리 안에 내장되어 있는strata()
함수를 이용할 수 있습니다.- data: 데이터 프레임 또는 행렬
- stratanames: 층화추출에 사용될 변수들
- size: 각 층의 크기
- method: “srswor” 비복원 단순임의추출, “srswr” 복원 단순임의추출, “poisson” 포아송 추출, “systematic” 계통 추출
- pik: 각 데이터를 표본에 포함할 확률
- description = FALSE: 이 논리값이 TRUE이면 표본의 크기와 모집단의 크기를 출력합니다.
library(sampling)
strata(
data,
stratanames = NULL,
size,
method,
pik,
description = FALSE
)
- 아래 예시는 벤치마크 데이터인
iris
데이터를 활용한 예시입니다.
m <- strata(
data = iris,
stratanames = "Species",
size = c(3, 3, 3),
method = "srswor"
)
m
## Species ID_unit Prob Stratum
## 6 setosa 6 0.06 1
## 32 setosa 32 0.06 1
## 37 setosa 37 0.06 1
## 77 versicolor 77 0.06 2
## 83 versicolor 83 0.06 2
## 90 versicolor 90 0.06 2
## 117 virginica 117 0.06 3
## 118 virginica 118 0.06 3
## 150 virginica 150 0.06 3
- 저장된 객체를 데이터 프레임으로 값을 추출하는 함수는
getdata()
함수입니다.
getdata(iris, m)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species ID_unit Prob
## 6 5.4 3.9 1.7 0.4 setosa 6 0.06
## 32 5.4 3.4 1.5 0.4 setosa 32 0.06
## 37 5.5 3.5 1.3 0.2 setosa 37 0.06
## 77 6.8 2.8 4.8 1.4 versicolor 77 0.06
## 83 5.8 2.7 3.9 1.2 versicolor 83 0.06
## 90 5.5 2.5 4.0 1.3 versicolor 90 0.06
## 117 6.5 3.0 5.5 1.8 virginica 117 0.06
## 118 7.7 3.8 6.7 2.2 virginica 118 0.06
## 150 5.9 3.0 5.1 1.8 virginica 150 0.06
## Stratum
## 6 1
## 32 1
## 37 1
## 77 2
## 83 2
## 90 2
## 117 3
## 118 3
## 150 3
1. 3. Systematic sampling
- 계통추출은 모집단의 임의 위치에서 시작해 매 k번째 항목을 표본으로 추출하는 단순한 방법입니다.
- 이 방법은
doBy
라이브러리 안에 내장되어 있는sampleBy()
함수를 사용하여 수행할 수 있습니다.- formula: ~ 우측에 나열한 이름에 따라 데이터가 그룹으로 묶입니다.
- frac: 추출할 샘플의 비율이며 기본값으로는 10% 입니다.
- replace = FALSE: 복원추출 여부
- data: 계통추출할 데이터
library(doBy)
sampleBy(
formula,
frac = 0.1,
replace = FALSE,
data,
systematic = TRUE
)
temp <- data.frame(x = 1:10)
sampleBy(
formula = ~1,
frac = 0.3,
data = temp,
systematic = TRUE
)
## [,1] [,2] [,3]
## 1 1 4 7
반응형
'Basic' 카테고리의 다른 글
[R] 적합도 검정 (0) | 2017.07.04 |
---|---|
[R] 범주형 자료에서 독립성 검정 (0) | 2017.07.04 |
[R] 난수생성과 기초통계량 (0) | 2017.07.03 |
[R] 기본 plot 함수 (1) | 2017.07.03 |
[R] 데이터 불러오기 (0) | 2017.07.02 |
TAGS.