- 오늘은 하단 두개 (좌) 집락추출법 (우) 층화추출법에 대해서 배워보자 -
Q) 모집단에서 표본을 추출하는 또 다른 두가지 방법?
A) 집락추출법/층화추출법 (단순임의추출/계통추출은 하단 포스팅 참조 ↓↓↓↓↓↓)
☝️ 여기서, 모집단을 대표할 수 있도록 표본을 추출하는 것이 가장 중요하다..!
(표본추출'방법'에 따라 분석 결과 및 해석에 큰 차이가 발생할 수 있기 때문)
✌️ code 예시 구현을 위해서 random module을 사용할 예정 (랜덤하게 수를 발생시키고 표본추출에 제일 적절한 module이라 생각됨!)
(random documentation → https://docs.python.org/3/library/random.html)
import random
🤝 code 상의 모집단(population)은 1~25(집락추출) / 1~20(층화추출) 가정하고 설정..! (여러 그룹으로 구성된 2차원 배열 list 형태)
1. 집락추출법(cluster sampling)
→ '모집단을 대표하는 잘 섞여 있는 원소들로 cluster끼리 뭉쳐 구성'
- 표본추출이 상대적으로 쉽고 비용도 적게 든다
① (상단그림) A, B, C, D 4개의 cluster로 나뉨. 각 cluster에는 모집단을 잘 대표할 수 있게끔 다양한 색깔의 공으로 구성
② 각 집락(cluster)에서 원소들에게 일련번호 부여
③ 일부 cluster를 랜덤하게 선택
④ 선택된 cluster에서 표본 임의로 선택
→ code demo)
가정1> 총 5개의 cluster로 나누었으며, 각 cluster에는 '5로 나눈 나머지가 같은 자연수끼리 모여있다' 가정
가정2> '5로 나눈 나머지가 같은 자연수끼리 모여있는 cluster 특성이 모집단을 잘 대표한다'라고 가정
가정3> population 모집단은 2차원 배열 형태로 되어 있다 가정
※ 주의) cluster를 나누는 기준 및 cluster 개수는 상황에 따라 다르므로 특수한 상황을 고려하여 가정했을 뿐 따로 code 구현은 안함
※ 즉, cluster를 나누는 기준 & cluster 개수가 정해진 한 population(2차원 배열)을 예로 들음
(- component가 일련번호가 정해진 population이라면 하단 code cluster_sampling이 가능할 것 같아요~-)
- ①② 과정 생략 -
def cluster_sampling(population, number_of_samples):
N = random.randint(1,len(population)) #Nth chosen cluster #과정3
print(random.sample(population[N],number_of_samples)) #과정4
- population 모집단에서 3개의 sample을 뽑고 싶으면
(출력 결과 나머지가 2로 나눈 cluster가 임의로 뽑혔고 그 중 3개가 sample로 임의로 뽑힘)
cluster_sampling(population, 3)
#[7, 22, 17]
- population 모집단에서 4개의 sample을 뽑고 싶으면
(출력 결과 나머지가 4로 나눈 cluster가 임의로 뽑혔고 그 중 4개가 sample로 임의로 뽑힘)
cluster_sampling(population, 4)
#[24, 4, 9, 14]
→ 집락추출법의 효과)
- 모집단을 잘 대표하는 여러 cluster로 나누어 cluster에서 임의로 sampling을 한다는 점에서 시간&비용 절약!
- 굳이 모집단에서 sampling 안해도 충분히 모집단을 대표하는 sample이 뽑혀진다는 장점이 존재!
2. 층화추출법(stratified sampling)
→ '집락추출과는 다르게 서로 이질적인 층들이 구성되어 있다.'
- 층 내의 원소들은 서로 동질적이다
- 하지만 층 간 원소들은 이질적임!
- 각 층의 비중을 감안하여 층 별로 표본을 추출한다 (각 계층을 고루 대표할 수 있도록 표본 추출)
- 즉, 이질적인 모집단의 원소들을 서로 유사한 것까지 몇 개의 층(stratum)으로 나눈 후, 각 층에서 표본을 랜덤하게 추출
→ code demo)
가정 1> 유사한 것끼리 몇 개의 층(stratum)으로 population에서 나누어 이미 형성되었다 가정
(population 만들어짐 - 2차원 배열 list)
가정 2> 총 4개의 stratum으로 나누었으며 각 층에는 1~5, 6~10, 11~15, 16~20으로 구성
가정 3> 각 층에서 n개씩 랜덤하게 추출
sample_list = []
def stratified_sampling(population,number_of_samples_per_stratum):
for i in range(0,len(population)):
sample_list.append(random.sample(population[i],number_of_samples_per_stratum))
print(sample_list)
- population 모집단에서 각 stratum 마다 2개씩 sample을 뽑고 싶으면
stratified_sampling(population,2)
#[[3, 1], [9, 6], [15, 12], [16, 17], [23, 24]]
- population 모집단에서 각 stratum 마다 1개씩 sample을 뽑고 싶으면
stratified_sampling(population,1)
#[[3], [8], [15], [20], [24]]
→ 층화추출법의 효과)
- 서로 비슷한 data끼리 한 stratum을 나누어 시간 절약
- 비슷한 층마다 일부 sample만 뽑으면 되므로 전체적인 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) (1/2) (0) | 2022.03.25 |
<추정과 검정> - 추론 개요 (0) | 2022.03.24 |
Hypothesis Test: H0 & Ha - concepts (0) | 2022.03.24 |
댓글