- (아래) (제 1 - 2 - 3 - 4분면 순서대로) 단순임의추출법 - 계통추출법 - 집락추출법 - 층화추출법 -
** 앞선 포스팅에서 우리는 통계적 추론에 대해서 배웠고, 모집단에서 표본을 추출하여 여러 통계학적 방법을 이용해 모집단을 추측하는 것이 '통계학'이라고 배웠다.
Q) 그렇다면 모집단에서 어떤 방식으로 표본을 추출할까? (이에 대해 궁금증이 생길 수 있다)
A) 크게 네 가지 방법으로 나눌 수 있다. → 단순임의추출법 / 계통추출법 / 집락추출법 / 층화추출법
(오늘은 일단 두 가지 - 단순임의추출 & 계통추출)
☝️ 여기서, 모집단을 대표할 수 있도록 표본을 추출하는 것이 가장 중요하다..!
(표본추출'방법'에 따라 분석 결과 및 해석에 큰 차이가 발생할 수 있기 때문)
✌️ code 예시 구현을 위해서 random module을 사용할 예정 (랜덤하게 수를 발생시키고 표본추출에 제일 적절한 module이라 생각됨!)
(random documentation → https://docs.python.org/3/library/random.html)
import random
🤝 code 상의 모집단(population)은 1부터 100까지의 자연수라 가정하고 설정..! (list 형태)
import numpy as np
population = np.arange(1,101,1).tolist()
1. 단순임의추출법(Simple Random Sampling)
→ 제일 간단! 말그대로 '원하는 수의 표본을 무작위로 추출'하는 방법이다. (말그대로 그냥 아무렇게나 뽑음...!)
- 모집단을 구성하는 모든 원소에 대해 표본으로 추출될 확률을 동일하게 해주는 표본추출법
- code 상으로는 난수표에서 난수를 발생시켜 표본을 추출한다
- N개의 원소로 구성된 모집단에서 n(<=N)개의 표본을 추출할 때 각 원소에 1,2,3,...,N까지의 번호를 부여하고, 여기서 n개의 번호를 임의로 선택하여 그 번호에 해당하는 원소 표본을 추출!
- (위 그림 설명) 여러가지 색의 공(다양한 표본)이 담겨 있다. 여기서 랜덤으로 아무 색상의 공을 고른다.
→ code demo) random.sample() method 사용
♠ random.sample() ♠
random.sample(population, k, *, counts=None)
**random.sample explanation**
"Return a k length list of unique elements chosen from the population sequence or set. Used for random sampling without replacement. Returns a new list containing elements from the population while leaving the original population unchanged. The resulting list is in selection order so that all sub-slices will also be valid random samples. This allows raffle winners (the sample) to be partitioned into grand prize and second place winners (the subslices). Members of the population need not be hashable or unique. If the population contains repeats, then each occurrence is a possible selection in the sample. Repeated elements can be specified one at a time or with the optional keyword-only counts parameter. For example, sample(['red', 'blue'], counts=[4, 2], k=5) is equivalent to sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5). To choose a sample from a range of integers, use a range() object as an argument. This is especially fast and space efficient for sampling from a large population: sample(range(10000000), k=60). If the sample size is larger than the population size, a ValueError is raised."
- 단순히 모집단에서 k개를 무작위로 뽑고 싶을때 사용한다. 여기서는 20개의 표본을 추출하기로 가정하고, 반환은 list형이다.
random.sample(population,10)
#returns [40, 19, 60, 78, 14, 90, 6, 66, 64, 20] - changeable
2. 계통추출법 (Systematic Sampling)
→ 일정한 규칙을 가지고 표본을 추출한다..! 동일 개수씩 구간을 나눈 뒤, 일정 간격으로 추출
- N개의 원소로 구성된 모집단에서 n(<=N)개의 표본을 추출할 때 각 원소에 1,2,3,..,N까지의 번호를 부여하고 이를 순서대로 나열
- 그 다음 K(=N/n)개씩 n개의 구간으로 나눔.
- 첫 번째 구간에서 K개의 원소 중 하나를 임의로 선택하고, 그 이후는 K개씩 띄어서 표본 추출
- cycle을 가지는 data라면 적절하지 않은 표본추출방식! (평균적으로 잘못 맞추는 편향이 발생한다)
- (위 그림 설명) 공에 일련번호 부여 뒤, 첫 구간(세 개의 공)에 임의로 1번을 선택하였고, 그 이후 3개씩 띄어서 4번, 7번, 10번 공을 선택!
→ code demo)
※ 주의! 1번부터 일련번호를 정한 모집단을 list형태로 집어넣을 경우에 한해서 구현한 계통추출법 code ※
(즉, 데이터프레임이나, 일련번호를 정하지 않은 경우 적용 X)
- 여기서 randint는 1부터 K까지 임의의 정수를 random으로 뽑는 method
- 반환형은 일련번호가 나열된 list형
# Define systematic sampling function
systematic_sample=[]
def systematic_sampling(population, sample_size):
N = len(population) #모집단 전체 데이터수 N
n = sample_size #원하는 표본 개수
K = ( N // n) #n개의 구간으로 나눔 - 각 구간의 data 개수
start = random.randint(1,K) #첫 구간의 첫 sample 선정
for i in range(n):
sample = start + i*K #첫 sample 기준 K간격 배수대로 sample 선정
systematic_sample.append(sample) #sample list에 집어넣음
return systematic_sample #sample list 완성!
- list형태로 된 모집단(population)에서 내가 3개의 표본을 systematic sampling으로 뽑고 싶다면..
systematic_sampling(population,3)
#[9, 42, 75]
- 5개의 표본을 systematic sampling으로 뽑고 싶다면..
systematic_sampling(population,5)
#[2, 22, 42, 62, 82]
- 마지막으로 10개의 표본을 뽑고 싶다면...!
systematic_sampling(population,10)
#[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
≫ 표본 number는 추출할 때마다 달라지지만, systematic sampling의 의미에 맞게 동일한 간격에 맞게 추출된 것을 확인할 수 있다!
** 다음 시간엔 집락추출법과 층화추출법 **
* 출처) 공공데이터 청년인턴(일경험수련생) 상시 교육 ProDS 데이터분석이론 (초급+중급)1
'Statistics > Concepts(+codes)' 카테고리의 다른 글
<추정과 검정> - 점 & 구간 추정 - confidence interval (w/python code) (0) | 2022.04.15 |
---|---|
T-test 👉 《One-sample T-test (w/ python code)》 (0) | 2022.04.05 |
<추정과 검정> - 표본추출법 (w/ python code) (2/2) (0) | 2022.03.30 |
<추정과 검정> - 추론 개요 (0) | 2022.03.24 |
Hypothesis Test: H0 & Ha - concepts (0) | 2022.03.24 |
댓글