R-Blogger블로그·해설한국어2024-01-17
시뮬레이션을 통한 95% 신뢰구간에 대한 명확한 이해
시뮬레이션 관점에서 보는 95% 신뢰 구간의 보다 명확한 이해저는 95% 신뢰 구간에 대한 이해가 이제는 훨씬 확실해졌습니다. 그러나 일반적인 신뢰 구간에 대해서는 여전히 불확실한 점이 있습니다. 현재 구간이 실제 모집단 파라미터를 포함하고 있는지 확정할 수 없기 때문입니다. 반면, 올바른 신뢰 구간을 갖는다면 통계적으로 유의하지 않더라도 실제 파라미터를 포함할 수 있다는 점은 다소 새롭고 상쾌합니다. 저는 신뢰 구간이 무엇인지 확신하고 있다고 생각했었으나, 주제에 다시 접근해 보니 그렇지 않다는 것을 깨달았습니다. 같은 내용을 다루는 훌륭한 자료들은 많지만, 직접 코드를 작성하고 시뮬레이션을 통해 배우는 것이 가장 효과적입니다. 이는 웹에 공개된 자료와 중복될 수 있으나, 실제로 적용해 보는 과정을 통해 배운 교훈을 전달하고자 합니다.목표: 신뢰 구간이란 무엇인가?우리는 신뢰 구간이 무엇인지, 실제로 어떤 의미를 가지는지를 명확히 이해하고자 합니다.신뢰 구간이 실제로 무엇을 의미하는가?실험을 수행하고 치료 효과에 대한 95% 신뢰 구간을 계산한다고 해도, 그 특정 구간에 실제 효과가 포함될 확률이 95%라는 의미는 아닙니다. 대신, 실험을 무한히 반복한다면 그 중 약 95%의 신뢰 구간이 실제 효과를 포함할 것임을 의미합니다. 95% 신뢰 수준은 해당 방법이 실제 파라미터를 포착할 확률이 아니라, 이 방법이 실제 파라미터를 포착하는 구간을 얼마나 자주 생성하는지를 나타냅니다. 이 개념을 정확히 이해하는 것이 연구에서 단일 신뢰 구간을 해석할 때 매우 중요합니다. 현재의 신뢰 구간이 실제 효과를 포함하는 95% 구간 중 하나인지 알 수 있는 방법은 없습니다. 이는 방법의 한계이며, 불편할 수 있지만, 현재 구간이 그 95% 구간 중 하나라고 가정하고 해석하는 것이 직관적입니다. 또한, 95% 신뢰 구간이 ‘유의’해야만 실제 파라미터를 포함한다고는 생각하지 않습니다. 시뮬레이션과 시각화를 실행해 보시면 이 개념이 더 명확해질 것입니다. 신뢰 구간은 다양한 기법을 사용해 추정되며, 일부는 다른 기법보다 더 정확합니다. 오늘은 그 차이에 대해 다루지 않을 것입니다.시뮬레이션을 시작합니다모집단이 실제 값을 알고 있다고 가정해 보겠습니다.# 모집단 파라미터 library(tidyverse) library(kableExtra) library(pwr) n_pop 12 # 모집단 크기 sets 2 # 시도 집합 수 2nd for loop -100 trials per set # 각 집합마다 100번 실험 Set n for total of 2 times of calculated number needed for power of 80% and alpha of 5% # 파워 80%, 알파 5%에 필요한 샘플 수 계산 Sample 2xn of the population Assign randomly placebo or treatment for each individual, then select outcome accordingly Use prop.test for test of equal or given proportions extract average treatment effect extract confidence interval (uses Wilson’s score method) extract p-value (this is more to showcase meaning of power) Append dataframe df_full df_full |head(10) |kable() iter sample mean lower upper pval 1 1 0.3473389 0.1492637 0.5454142 0.0018010 1 2 0.1448864 -0.0569022 0.3466749 0.1746284 1 3 0.2464986 0.0436915 0.4493057 0.0243074 1 4 0.3492723 0.1482620 0.5502827 0.0016048 1 5 0.1842105 -0.0229481 0.3913691 0.0874454 1 6 0.1843137 -0.0384418 0.4070693 0.0913694 1 7 0.3756614 0.1632469 0.5880759 0.0004565 1 8 0.4816355 0.2976731 0.6655978 0.0000116 1 9 0.2437276 0.0518956 0.4355596 0.0104277 1 10 0.1777778 -0.0259180 0.3814736 0.0959556시각화를 진행합니다다음은 시뮬레이션 결과를 시각화한 것입니다.df_full |mutate(true_found = case_when( lower true_y ~ 1, TRUE ~ 0 )) |ggplot(aes(x=sample,y=mean,color=as.factor(true_found))) + geom_point(size=0.5) + geom_errorbar(aes(ymin=lower,ymax=upper), alpha=0.5) + geom_hline(yintercept = true_y) + geom_hline(yintercept = 0, color = "pink", alpha = 0.5) + # geom_ribbon(aes(ymin = -0.2, ymax = 0, xmin = 0, xmax = 101), fill = "pink", alpha = 0.3) + ylab("Average Treatment Effect") + xlab("Trials") + ggtitle(label = "Visualizing 95% Confidence Intervalssss", subtitle = "CI contains true estimate (torquoise), CI does not contain true estimate (red), \nfaceted by sets of trials") + theme_minimal() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none") + facet_wrap(.~iter)여기에서 일어나는 일은 다음과 같습니다: 새 열 t를 생성합니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2024-01-17