Sampling

FMB819: R을 이용한 데이터분석

고려대학교 경영대학 정지웅

Today’s Agenda

  • 샘플링, 샘플링 변동성, 샘플링 분포 개념을 익히기.

  • 샘플링 용어:

    • 모집단 (Population)
    • 표본 (Sample)
    • 모수 (Population Parameter)
    • 점 추정치 또는 표본 통계량 (Point Estimate or Sample Statistic)
  • 불편추정량 (Unbiased Estimator)의 정의.

  • 통계적 추론의 핵심 정리: 중심극한정리 (Central Limit Theorem, CLT).

초록색 파스타의 비율은 얼마일까?

  • 모든 초록색 파스타를 세는 것은 너무 힘듦! 😩 다른 방법은?

표본 추출 (Sampling)

  • 파스타 20개를 표본으로 선택함.

  • 무작위(random) 로 선택되었음.

  • 결과는 다음과 같음.

색상 개수 비율
초록색 14 0.70
빨간색 5 0.25
노란색 1 0.05
  • 0.70 값은 전체 그릇에서 초록색 파스타의 비율을 추정하는 값으로 볼 수 있음.

표본 변동성 (Sampling Variation)

  • 만약 새로운 표본을 추출한다면 (이전에 뽑은 20개의 파스타를 다시 그릇에 넣고)? 이전처럼 녹색 파스타 14개가 나올까?

  • 아마 아닐 것임. 표본은 추출할 때마다 달라질 것임.

  • 핵심 포인트: 표본은 무작위로 추출.

18개의 표본 추출

  • 20개의 파스타를 복원 추출하여 18개의 표본을 뽑아 보면

  • 각각의 표본은 다음과 같음:

18개의 표본 추출

  • 20개의 파스타를 복원 추출하여 18개의 표본을 뽑아 보면

  • 각각의 표본은 다음과 같음:

표본 번호 개수 비율
1 14 0.70
2 14 0.70
3 10 0.50
4 10 0.50
5 6 0.30
6 10 0.50
7 8 0.40
8 9 0.45
9 11 0.55
표본 번호 개수 비율
10 8 0.40
11 7 0.35
12 9 0.45
13 9 0.45
14 14 0.70
15 11 0.55
16 10 0.50
17 7 0.35
18 13 0.65

Task 1

05:00

  1. 이전 슬라이드에서 녹색 파스타 비율을 포함하는 data.frame을 생성하시오. 이 데이터 프레임의 이름을 pasta로 지정하고, 비율을 포함하는 변수를 prop_green으로 설정하시오.
    (힌트: data.frame() 함수를 사용하여 데이터 프레임을 생성할 수 있음.)
    비율 값은 다음과 같음: (0.7, 0.7, 0.5, 0.5, 0.3, 0.5, 0.4, 0.45, 0.55, 0.4, 0.35, 0.45, 0.45, 0.7, 0.55, 0.5, 0.35, 0.65)

  2. ggplot2를 사용하여 이 비율의 히스토그램을 생성하시오.
    geom_histogram() 함수에서 다음 매개변수를 사용하시오:
    boundary = 0.325, binwidth = 0.05.

  3. 무엇을 관찰할 수 있는가?

표본 분포 (Sampling distribution): 히스토그램

방금 뭘 한 것임??

  • 표본 추출이라는 통계 개념을 실험함.

  • 목표: 녹색 파스타의 비율을 알고자 함.

  • 방법:

    1. 전수 조사(Census): 시간이 많이 걸리고, 많은 경우 매우 비용이 많이 듦.

    2. 표본 추출(Sampling): 그룻에서 20개의 파스타를 무작위로 뽑아 추정값을 얻음.
      첫 번째 추정값은 0.70이었지만, 이는 대부분의 다른 추정값보다 높았음.

  • 중요: 각 표본무작위로 추출됨 → 표본이 서로 다름! → 추출된 비율이 달라짐 → 표본 변동(Sampling Variation)

가상의 표본 추출하기 (실제 표본 아님)

  • 볼 안의 녹색, 빨간색, 노란색 파스타 개수를 정확히 셈.
  • 볼 안의 모든 파스타 데이터는 여기 CSV 파일에 저장됨.
bowl <- read.csv("https://raw.githack.com/chung-jiwoong/FMB819-Slides/refs/heads/main/chapter_sampling/data/pasta.csv")
head(bowl)
##   pasta_ID  color
## 1        1 yellow
## 2        2    red
## 3        3  green
## 4        4 yellow
## 5        5    red
## 6        6  green
  • pasta_ID: 파스타 ID
  • color: 파스타 색상
nrow(bowl)
## [1] 713
  • 손으로 직접 파스타를 고르는 대신, 가상으로 표본을 추출할 것임.
  • 가상 삽을 사용하여 가상 그룻에서 50개의 파스타를 무작위로 선택함.

가상 삽사용하여 한 번 표본 추출

  • moderndive 패키지의 rep_sample_n 함수를 사용하여 크기 50의 첫 번째 표본을 추출할 것임.
# moderndive 패키지 로드
library(moderndive)

virtual_shovel <- bowl %>%  # moderndive 함수는 파이프 연산자와 함께 사용 가능
  rep_sample_n(size = 50)   # 50개의 파스타를 무작위로 추출
# 표본의 첫 6개 행 표시
head(virtual_shovel)
## # A tibble: 6 × 3
## # Groups:   replicate [1]
##   replicate pasta_ID color 
##       <int>    <int> <chr> 
## 1         1      284 green 
## 2         1      101 green 
## 3         1      623 yellow
## 4         1      645 green 
## 5         1      400 red   
## 6         1       98 yellow
  • replicate 열은 표본의 ID를 나타냄. 여기서는 1.
# 표본의 관측값 개수 확인
nrow(virtual_shovel)
## [1] 50

초록색 파스타 비율 계산

sample_1 <- virtual_shovel %>% 
  summarize(
    # 표본 내 초록색 파스타 개수
    num_green = sum(color == "green"),
    # 표본 내 전체 관측값 개수
    sample_n = n()) %>% 
  mutate(
    # 초록색 파스타 비율 계산
    prop_green = num_green / sample_n)
sample_1
## # A tibble: 1 × 4
##   replicate num_green sample_n prop_green
##       <int>     <int>    <int>      <dbl>
## 1         1        23       50       0.46
  1. 다음을 계산:
  • 표본 내 초록색 파스타 개수
  • 표본 내 전체 관측값 개수 (여기서는 50)
  1. 초록색 파스타 비율 계산
  • 초록색 파스타 비율은 0.46! 이것은 그릇 내 초록색 파스타 비율의 추정치(estimate)임. 한 번 더 해보면 어떨까?
  1. 만약 여러 번, 예를 들어 33번 시도하면 어떻게 될까?

가상 삽을 33번 사용하기

  • 33개의 크기 50인 표본을 생성.
virtual_samples <- bowl %>%
  # 크기 50인 표본을 33개 추출
  rep_sample_n(size = 50, reps = 33)
virtual_samples
## # A tibble: 1,650 × 3
## # Groups:   replicate [33]
##    replicate pasta_ID color 
##        <int>    <int> <chr> 
##  1         1      495 yellow
##  2         1      534 green 
##  3         1      297 yellow
##  4         1      208 green 
##  5         1      131 green 
##  6         1      569 red   
##  7         1      522 yellow
##  8         1      248 green 
##  9         1      365 red   
## 10         1      665 yellow
## # ℹ 1,640 more rows
  • 각 표본에서 초록색 파스타의 비율을 계산.
virtual_prop_green <- virtual_samples %>% 
  group_by(replicate) %>% # 각 표본별로 계산
  summarize(
    num_green = sum(color == "green"),
    sample_n = n()) %>% 
  mutate(prop_green = num_green / sample_n)
virtual_prop_green
## # A tibble: 33 × 4
##    replicate num_green sample_n prop_green
##        <int>     <int>    <int>      <dbl>
##  1         1        24       50       0.48
##  2         2        25       50       0.5 
##  3         3        27       50       0.54
##  4         4        23       50       0.46
##  5         5        25       50       0.5 
##  6         6        22       50       0.44
##  7         7        18       50       0.36
##  8         8        30       50       0.6 
##  9         9        29       50       0.58
## 10        10        18       50       0.36
## # ℹ 23 more rows

(가상!) 표본 변동성

  • 실제 실험처럼 가상 샘플도 무작위 표본을 생성함.

  • virtual_prop_green 데이터 프레임의 prop_green 열은 표본마다 값이 다름.

  • 다시 말해, 표본 분포를 시각화할 수 있음:

ggplot(virtual_prop_green, aes(x = prop_green)) +
  geom_histogram(binwidth = 0.02, 
                 boundary = 0.51,
                 color = "white",
                 fill = "darkgreen") +
  scale_y_continuous(breaks = seq(0, 12, by = 2)) +
  labs(x = "Proportion of 50 pasta that were green",
       y = "Frequency",
       title = "Distribution of 33 samples of size 50") +
  theme_bw(base_size = 20)

Task 2

05:00

33개의 표본만 추출하는 대신, 이번에는 1000개를 추출해보자!

  1. 데이터 링크를 불러와 pasta 객체에 저장하라.

  2. moderndive 패키지의 rep_sample_n() 함수를 사용하여 크기 50인 표본을 1000개 생성하라.

  3. 각 표본에서 초록색 파스타의 비율을 계산하라.

  4. 각 표본에서 얻은 초록색 파스타 비율의 히스토그램을 그리시오.

  5. 무엇을 관찰할 수 있는가? 어떤 비율이 가장 자주 발생하는가? 33개의 표본을 사용할 때와 비교하여 히스토그램의 모양이 어떻게 달라지는가?

  6. 추출한 50개의 파스타 중 초록색 파스타가 20% 미만일 확률은 얼마나 되는가?

1000개의 표본 분포

  • 놀랍게도 정규 분포와 매우 유사한 모양을 보임 \(\rightarrow\) 표본을 많이 추출할수록, 표본 분포는 점점 더 정규 분포를 닮아감.

표본 크기의 역할

  • 만약 표본 크기를 변경할 수 있고, 25, 50, 100 중에서 선택할 수 있다면?

  • 여전히 목표가 그릇 속 초록색 파스타의 비율을 추정하는 것이라면, 어떤 크기의 삽을 선택하겠는가?

표본 크기의 역할

  • 이전에 했던 작업을 다른 표본 크기에 대해서 반복해 보자.

  • 각 표본 크기에 대해 1000개의 표본을 추출해 보자: \(n=25\), \(n=50\), \(n=100\).

  • rep_sample_n() 함수를 다시 사용한다.

  • 다양한 표본 크기의 생성
# Sample size: 25
virtual_samples_25 <- bowl %>% 
  rep_sample_n(size = 25, reps = 1000)

# Sample size: 50
virtual_samples_50 <- bowl %>% 
  rep_sample_n(size = 50, reps = 1000)

# Sample size: 100
virtual_samples_100 <- bowl %>% 
  rep_sample_n(size = 100, reps = 1000)

*초록색 파스타의 비율 계산

# Sample size: 25
# The same code is used for the other sample sizes
virtual_prop_green_25 <- virtual_samples_25 %>% 
  group_by(replicate) %>% 
  summarize(
    num_green = sum(color == "green"),
    sample_n = n()) %>% 
  mutate(prop_green = num_green / sample_n)

표본 크기의 역할

표본 크기와 표본 분포

  • 표본 크기가 커질수록 표본 분포는 더 좁아진다.

  • 즉, 표본 변동성에 의한 차이가 더 적어진다.

  • 반복 횟수(여기서는 1000개)를 일정하게 유지하면, 더 큰 표본일수록 정규 분포에 더 가까워지고, 표준 편차가 더 작아진다.

  • 표본 크기별 표준 편차 계산

Sample Size Standard Deviation
25 0.10
50 0.07
100 0.05
  • 표준 편차는 평균 주변의 분포의 확산 정도를 측정한다.

  • 따라서 표본 크기가 증가하면, 전체 그린 파스타 비율에 대한 추정값이 더 정확해진다.

표본 추출 개념

  • 추정을 목적으로 표본을 추출함.

  • 전체 그린 파스타의 비율을 추정하기 위해 표본을 추출함.

표본 추출과 관련된 핵심 개념

  1. 표본 변동성이 추정값에 미치는 영향: 서로 다른 표본은 서로 다른 추정값을 제공함.

  2. 표본 크기가 표본 변동성에 미치는 영향: 표본 크기가 커질수록 추정값이 실제 값에 가까워짐.

표본 추출 용어 📖

모집단 (Population) 우리가 관심 있는 개체 또는 관측치의 전체 집합. \(N = 713\)개의 파스타.

모집단 모수 (Population Parameter) 모집단에 대한 알려지지 않은 수치적 요약값으로, 우리가 알고자 하는 값. 예: 모집단 평균 \((\mu)\), 그린 파스타의 비율 \((p)\).

전수 조사 (Census) 모집단의 모든 \(N\)개의 개체나 관측치를 철저하게 조사하여 모집단 모수 값을 정확하게 계산하는 방법.

표본 추출 (Sampling) 모집단의 크기 \(N\)에서 크기 \(n\)인 표본을 수집하는 과정.

점 추정량 (Point Estimate) 또는 표본 통계량 (Sample Statistic) 모집단의 알려지지 않은 모수를 추정하기 위해 표본에서 계산한 요약 통계량. 예: 표본 비율 \((\hat{p})\)은 모집단 비율 \(p\)추정값을 나타내며, “hat(모자)” 기호로 표시됨.

대표 표본 추출 (Representative Sampling) 표본이 모집단을 잘 대표하는가?

편향된 표본 추출 (Biased Sampling) 모든 파스타가 동일한 확률로 표본에 포함될 기회를 가졌는가?

무작위 표본 추출 (Random Sampling) 편향 없이 무작위로 표본을 선택하는 방식.

통계적 정의

  • 우리는 계속해서 \(\hat{p}\)을 추정해 왔음.

  • 표본 비율 \(\hat{p}\)표본 분포를 그려서 표본 변동성을 시각적으로 확인.

  • \(\hat{p}\)표본 분포표준 편차를 계산했음. 이 표준 편차는 특별한 이름을 가짐: 점 추정량 \(\hat{p}\)표준 오차 (Standard Error).

  • 다시 아래 표 확인:

표본 크기 \((n)\) \(\hat{p}\)의 표준 오차
25 0.10
50 0.07
100 0.05
  • 핵심 요점: 표본 크기 \(n\)이 커질수록 점 추정량의 일반적인 오차 크기는 줄어듦.
    • 이는 표준 오차(Standard error)를 통해 정량적으로 확인 가능.

전체 과정 정리

  • 무작위 표본 (random samples)에서 얻은 점 추정량 (point estimates)모집단 모수 (population parameter)좋은 추측값을 제공함.

  • 하지만 얼마나 좋은 추정값일까?

    • 어떤 경우에는 \(\hat{p}\)\(p\)와 크게 다를 수도 있고, 어떤 경우에는 매우 가까울 수도 있음.
    • 이러한 차이는 표본 변동성 (sampling variation) 때문임.
  • 평균적으로 우리의 추정값은 정확할 것임. 이는 표본을 무작위로 추출하기 때문임.

    • 즉, \(\hat{p}\)\(p\)의 불편 추정량 (unbiased estimator)이며, \(\mathop{\mathbb{E}}[\hat{p}] = p\) 임.
  • 그렇다면, 전체 \(N=713\)개의 파스타 중 녹색 파스타의 실제 모집단 비율 \(p\)는 얼마일까?

sum(bowl$color == "green")/nrow(bowl)
## [1] 0.4936886
  • 그래프에 실제 모집단 비율 \(p=0.49\) 값을 추가.

불편성(Unbiasedness)과 표본 변동성(Sampling variation) 시각화

다양한 표본 추출 시나리오

시나리오 모집단 모수 기호 점 추정량 표기법
1 모집단 비율 \(p\) 표본 비율 \(\widehat{p}\)
2 모집단 평균 \(\mu\) 표본 평균 \(\overline{x}\) 또는 \(\widehat{\mu}\)
3 모집단 비율 차이 \(p_1 - p_2\) 표본 비율 차이 \(\widehat{p}_1 - \widehat{p}_2\)
4 모집단 평균 차이 \(\mu_1 - \mu_2\) 표본 평균 차이 \(\overline{x}_1 - \overline{x}_2\)
5 모집단 회귀 계수 (기울기) \(\beta_1\) 표본 회귀 계수 (기울기) \(b_1\) 또는 \(\widehat{\beta}_1\)
6 모집단 회귀 절편 \(\beta_0\) 표본 회귀 절편 \(b_0\) 또는 \(\widehat{\beta}_0\)

중심극한정리 (Central Limit Theorem; CLT)

  • 표본 통계량이 수렴하여 특정한 중심 극한에 도달하는 것은 통계학에서 잘 알려진 사실임.

  • 이는 중심극한정리(Central Limit Theorem) 때문임.

중심극한정리: 모집단 분포의 형태가 어떠하든 상관없이, 표본 평균이 큰 표본 크기를 기반으로 계산될 때, 이러한 표본 평균의 표본 분포는 점점 더 정규 분포 형태를 띠며, 동시에 점점 더 좁아짐.

  • 즉, 표본 평균의 표본 분포는 점점 정규 분포를 따르게 되고, 이러한 표본 분포의 변동성이 점점 줄어들며, 이는 표준 오차(Standard Error)로 정량화될 수 있음.

🔍 인과 관계를 찾아가는 길

✅ 데이터를 어떻게 다룰까?: 읽기(Read), 정리(Tidy), 시각화(Visualize)…

✅ 변수간 관계를 어떻게 요약할까? 단순 / 다중 선형 회귀…비선형회귀, 교차변수…

✅ 인과 관계(Causality)란 무엇인가?

전체 모집단을 관측하지 못하면 어떻게 할까? Sampling!

❌ 우리의 연구 결과가 단순한 무작위(Randomness) 때문일 수도 있을까?

❌ 실제로 외생성을 어떻게 찾아낼 수 있을까?

THE END!