실습 · 연습문제 2개
Benjamini–Hochberg 절차 구현하기 benjamini-hochberg
검정 개의 p-value가 있을 때, Benjamini–Hochberg(BH) 절차는 거짓 발견 비율의 기댓값(FDR)을 이하로 유지하면서 기각할 가설을 고른다.
- p-value를 작은 순서로 정렬한다:
- 를 만족하는 가장 큰 순위 를 찾는다.
- 순위 의 가설을 모두 기각한다. 그런 가 없으면 아무것도 기각하지 않는다.
bh_reject(pvals, q=0.05)를 완성한다. 입력과 같은 순서의 boolean 배열(기각하면 True)을 반환한다.
주의: 2단계는 "작은 쪽부터 조건을 확인하다 처음 실패하면 멈춘다"가 아니다. 조건을 만족하는 가장 큰 순위를 찾고, 그보다 작은 순위는 조건을 만족하지 않아도 모두 기각한다(step-up 절차). 테스트에 이 차이를 드러내는 예가 있다.
부트스트랩 신뢰구간: 샘플 단위와 그룹 단위 bootstrap-ci
두 함수를 완성한다. 둘 다 np.random.default_rng(seed)로 난수 생성기를 만들고, 같은 seed면 같은 구간을 반환해야 한다. 반환값은 (lo, hi) 두 실수다.
percentile_ci(x, stat, n_boot=2000, alpha=0.05, seed=0)- 1차원 배열
x에서 길이가 같은 표본을 복원추출로n_boot번 뽑는다. - 각 표본에
stat(1차원 배열을 받아 실수를 반환하는 함수)을 적용한다. - 그 값들의 백분위수와 백분위수를 반환한다.
- 1차원 배열
group_bootstrap_ci(values, groups, n_boot=2000, alpha=0.05, seed=0)values[i]는 그룹groups[i](셀·환자·장비 등)에 속한 측정값이다.- 샘플이 아니라 그룹을 복원추출한다. 그룹 개 중 개를 뽑고, 뽑힌 그룹의 모든 값을 모아 평균을 낸다(같은 그룹이 두 번 뽑히면 두 번 들어간다).
- 그 평균들의 백분위수로 구간을 만든다.
테스트는 다음을 확인한다.
- 정규 표본의 평균에 대한
percentile_ci가 과 비슷하다. - 같은 그룹 안의 값이 강하게 상관된 데이터에서
group_bootstrap_ci가 샘플 단위 구간보다 훨씬 넓다. - 그룹마다 값이 하나뿐이면 두 방법의 구간 폭이 비슷하다.