신뢰구간·bootstrap·permutation
이 토픽을 마치면
신뢰구간이 추정량의 불확실성을 표현하는 방식임을 설명할 수 있습니다. bootstrap과 permutation을 같은 resampling으로 뭉뚱그리지 않고, 각각 어떤 질문과 교환가능성 가정을 사용하는지 구분합니다.
불확실성을 하나의 값으로 숨기지 않기
표본에서 계산한 차이 또는 평균은 하나의 숫자입니다. 하지만 표본을 다시 얻었다면 같은 값이 나오지 않을 수 있습니다. 구간은 이 표본 변동을 표현하는 한 방식입니다. 구간의 의미를 말할 때는 어떤 절차, 추정량, 표본 단위와 가정을 사용했는지 함께 적어야 합니다.
신뢰구간을 “모수가 이 구간 안에 있을 확률”이라고 단순 번역하지 않습니다. 반복 표본과 절차의 장기적 포함 성질을 설명하는 문장과, 현재 구간을 실무적으로 읽는 문장을 분리해야 합니다.
Bootstrap: 관측된 표본에서 다시 뽑기
Bootstrap은 관측된 표본을 경험적 모집단처럼 사용해 복원추출 표본을 반복하고, 관심 추정량의 변동을 구성하는 방식입니다. 평균, 중앙값, 차이처럼 분석 목적에 맞는 통계량을 매 반복 계산합니다.
중요한 것은 resampling 단위입니다. technical replicate가 여러 개 있어도 biological replicate가 독립 단위라면, 독립 단위의 구조를 보존하지 않은 bootstrap은 불확실성을 잘못 표현할 수 있습니다.
Permutation: 귀무 구조에서 라벨을 섞기
Permutation은 조건 라벨을 섞거나 관측값의 역할을 교환해, 특정 귀무 구조에서 통계량이 어떻게 변하는지 구성합니다. 라벨을 교환할 수 있다는 교환가능성 가정이 필요합니다. 반복측정·군집·시간 자료에서 라벨을 아무렇게나 섞으면 설계 구조를 무너뜨릴 수 있습니다.
Bootstrap은 표본의 변동을 추정하는 질문에, permutation은 귀무 비교 기준을 구성하는 질문에 주로 사용합니다. 둘 다 “컴퓨터로 여러 번 섞는 절차”라는 이유만으로 같은 방법이 되지 않습니다.
Python으로 차이의 bootstrap 분포 만들기
import numpy as np
def mean_difference(x, y): return np.mean(x) - np.mean(y)
rng = np.random.default_rng(20260806)x = rng.normal(10, 1, size=20)y = rng.normal(10.5, 1, size=20)boot = []for _ in range(2000): bx = rng.choice(x, size=len(x), replace=True) by = rng.choice(y, size=len(y), replace=True) boot.append(mean_difference(bx, by))
interval = np.quantile(boot, [0.025, 0.975])print(mean_difference(x, y), interval)이 예시는 두 배열이 독립적인 분석 단위에서 왔다는 전제 아래 작성한 합성 예입니다. 실제 반복 구조가 있다면 x와 y의 원소를 개별 측정값이 아니라 설계에 맞는 단위로 묶어 resampling해야 합니다. 실행 결과의 구간을 자동으로 보편적 정답으로 해석하지 않고, 사용한 percentile 절차와 seed를 기록합니다.
교환가능성을 점검하기
resampling 전에 다음을 묻습니다.
- 무엇을 다시 뽑거나 섞는가?
- 그 단위가 독립적인가?
- 조건 라벨의 교환이 설계상 허용되는가?
- 시간·군집·짝지음 구조를 보존했는가?
- 결과의 불확실성을 어떤 절차로 요약했는가?
이 질문에 답하지 않고 반복 횟수만 늘리면, 계산은 정교해져도 데이터 구조의 오류가 유지됩니다.
구간을 결과와 함께 읽기
bootstrap 구간을 제시할 때는 점 추정량과 구간의 양 끝을 함께 기록합니다. 구간이 넓다면 표본의 변동이 크거나 분석 단위가 적거나, 데이터의 꼬리와 분포가 추정량에 영향을 주는지 살펴봅니다. 구간이 좁다면 데이터가 충분히 안정적이라는 뜻일 수도 있지만, 잘못 낮은 단위에서 resampling했거나 특정 단위를 중복해 넣었을 가능성도 점검합니다.
Permutation 결과도 같은 방식으로 읽습니다. 귀무모형에서 만들어진 통계량 분포와 관찰된 통계량의 위치를 비교하지만, permutation의 교환가능성 가정이 설계상 맞지 않으면 p-value의 의미가 바뀝니다. 결과 표에 resampling 단위, 반복 횟수, seed, 방법 이름과 가정 상태를 남깁니다.
짝지음이나 군집이 있는 자료에서는 전체 행을 섞는 대신 짝 또는 군집을 보존하는 절차가 필요할 수 있습니다. 어떤 보존 규칙을 사용했는지 독자가 재현할 수 있도록 schema와 코드에 표시합니다.
연구 질문으로 돌아가 해석하기
구간은 차이의 크기와 불확실성을 함께 보게 합니다. 그러나 구간이 0을 포함하는지 하나만으로 생물학적 중요성이나 무효를 확정하지 않습니다. 효과의 방향·크기, 연구설계, 측정 단위, 분석 목적을 함께 보고합니다.
bootstrap 구간의 선택을 기록하기
구간을 만들 때 percentile, basic, studentized 등 여러 절차가 있을 수 있습니다. 이 편에서 하나의 절차를 보편적인 정답으로 선언하지 않는 이유는 추정량과 데이터 구조에 따라 절차의 성질이 달라질 수 있기 때문입니다. 사용한 방법, 반복 횟수, seed, resampling 단위를 결과와 함께 기록합니다.
반복 횟수를 늘리면 계산된 quantile의 Monte Carlo 변동을 줄이는 데 도움이 될 수 있지만, 원자료의 표본 편향이나 잘못된 단위 선택을 교정하지는 않습니다. 구간이 안정적으로 보이는지 확인할 때도 원자료의 측정·배정 구조를 다시 봅니다.
permutation과 사전 질문
permutation은 “라벨을 섞으면 어떤 차이가 생기는가?”가 아니라, “귀무 구조 아래에서 라벨을 교환해도 되는가?”라는 질문에서 출발합니다. 대응 자료에서는 쌍별 차이의 부호를 바꾸는 구조가 더 적합할 수 있고, 군집 자료에서는 군집을 보존해야 할 수 있습니다. 어떤 구조를 선택했는지 서술하지 않은 p-value는 해석이 불완전합니다.
자주 생기는 실패와 점검법
- bootstrap과 permutation을 같은 절차로 부르지 않습니다.
- 관측 단위보다 하위 측정값을 독립적으로 resample하지 않습니다.
- paired 자료의 짝을 끊고 라벨을 섞지 않습니다.
- 신뢰구간을 모수의 사후 확률로 표현하지 않습니다.
- 반복 횟수만 늘리면 잘못된 교환가능성 가정이 해결된다고 쓰지 않습니다.
핵심 정리
- bootstrap은 관측 표본의 변동으로 추정량의 분포를 구성합니다.
- permutation은 교환가능한 귀무 구조에서 비교 기준을 만듭니다.
- resampling 단위와 교환가능성은 연구설계에서 결정됩니다.
- 구간은 효과의 크기와 불확실성을 함께 읽는 도구입니다.
다음 토픽으로
다음 편에서는 효과크기·불확실성·p-value를 서로 다른 정보로 분리합니다.
참고 자료
- SciPy statistics reference: https://docs.scipy.org/doc/scipy/reference/stats.html
- NIST/SEMATECH e-Handbook: https://www.itl.nist.gov/div898/handbook/
본 편의 표본과 resampling 예시는 BioStatPy가 독립적으로 작성한 합성 교육 예시입니다.