R을 이용한 인과 추론
머리말
R을 이용한 인과 추론(Causal Inference in R)에 오신 것을 환영합니다. 인과 관계 질문에 답하는 것은 과학 및 비즈니스 목적 모두에 중요하지만, 무작위 임상 시험(RCT)이나 A/B 테스트와 같은 기술이 항상 실용적이거나 성공적인 것은 아닙니다. 이 책의 도구는 독자가 R 프로그래밍 언어를 활용해 관측 데이터(observational data)로 더 나은 인과 추론을 하도록 돕습니다. 이 책을 마칠 때쯤이면 다음 내용을 익힐 수 있습니다.
- 더 나은 인과 관계 질문 던지기.
- 인과 추론에 필요한 가정 이해하기.
- 추론하고자 하는 대상 인구(target population) 식별하기.
- 인과 모델 적합 및 문제점 확인.
- 사용된 기술이 불완전한 상황에서의 민감도 분석(sensitivity analysis) 수행.
이 책은 학술 연구자와 데이터 과학자 모두를 위한 것입니다. 환경에 따라 질문은 다를 수 있지만 많은 기술은 동일합니다. 인과 추론은 암에 관한 질문만큼이나 클릭 수 질문을 던지는 데에도 유용합니다. 의학, 경제학, 기술 등 다양한 분야의 사례를 혼합해 명확한 인과 관계 질문과 가정을 투명하게 공개하려는 의지가 필요함을 보여줍니다.
이 책에서 많은 것을 배우겠지만, 아이러니하게도 인과 추론의 가장 좋은 도구 중 하나인 무작위 시험 수행 방법은 깊게 다루지 않습니다. 무작위 시험과 그 사촌 격인 A/B 테스트(기술 분야의 표준)는 유효한 추론에 필요한 많은 가정을 완화해주므로 매우 강력합니다. 또한 설계가 충분히 복잡해 별도의 학습 리소스가 필요할 정도입니다. 대신 우리는 일반적으로 무작위 배정의 이점을 누릴 수 없는 관측 데이터에 집중할 것입니다. 무작위 배정 기술에 관심 있더라도 이 책을 바로 덮지 마세요. 관측 데이터용으로 설계된 여러 인과 추론 기술은 무작위 분석도 개선할 수 있습니다.
독자에 관해 몇 가지 가정을 하고 있습니다.
- R 패키지의 tidyverse 생태계와 그 일반적인 철학에 익숙합니다. 예를 들어, 이 책에서는 dplyr와 ggplot2를 많이 사용하지만 기초 문법을 설명하지는 않습니다. tidyverse 시작에 대해 더 자세히 알고 싶다면 R for Data Science를 추천합니다.
- R의 기본적인 통계 모델링에 익숙합니다. 예를 들어,
lm()과glm()을 사용하여 많은 모델을 적합시키겠지만, 그것들이 어떻게 작동하는지는 논의하지 않을 것입니다. R의 강력한 모델링 함수에 대해 더 배우고 싶다면 Tidy Modeling with R의 “A Review of R Modeling Fundamentals”를 읽어보시길 권장합니다. - 또한 함수 작성과 같은 다른 R 기초에 익숙하다고 가정합니다. R for Data Science 역시 이러한 주제에 좋은 리소스입니다. (R 프로그래밍 언어에 대해 더 깊이 파고들고 싶다면 Advanced R을 추천하지만, 이 책을 위해 그 내용을 완전히 마스터했다고 가정하지는 않습니다.)
또한 tidyverse와 관련된 모델링용 R 패키지 세트인 tidymodels 생태계의 도구도 사용할 것입니다. 이전에 사용해 본 적이 없다고 가정합니다. tidymodels는 예측 모델링에도 중점을 두기 때문에 많은 도구가 이 책에 적합하지 않을 수 있습니다. 그럼에도 불구하고 이 주제에 관심이 있다면 Tidy Modeling with R을 추천합니다.
인과 추론에 관한 다른 훌륭한 책들도 많이 있습니다. 이 책은 R에 집중한다는 점에서 차별화되지만, 다른 관점에서 이 분야를 바라보는 것도 도움이 됩니다. 좋아할 만한 몇 권의 책들:
첫 번째 책은 역학(epidemiology)에 중점을 둡니다. 나머지 두 권은 계량경제학(econometrics)에 중점을 둡니다. 인과 다이어그램에 대해 더 자세히 알고 싶다면 The Book of Why (pearl2018why도?) 추천합니다.
설치
이 책은 현재 활발히 개발 중인 여러 패키지를 사용합니다. 필요한 개발 버전을 설치하려면 다음을 사용하세요:
이러한 개발 버전에는 책 전체에서 사용되는 최신 기능과 버그 수정이 포함되어 있습니다.
관례 (Conventions)
현대적인 R 기능
이 책에서는 R 4.1.0 이상 버전의 두 가지 현대적인 R 기능을 사용합니다. 첫 번째는 네이티브 파이프, |>입니다. 이 R 기능은 여러분에게 더 익숙할 수 있는 tidyverse의 %>%와 유사합니다. 일반적인 경우, 두 기능은 서로 바꿔서 사용할 수 있습니다. 한 가지 눈에 띄는 차이점은 |>가 파이프의 결과를 전달하기 위해 _ 기호를 사용한다는 점입니다(예: .df |> lm(y ~ x, data = _)). 이 주제에 대한 상세 내용은 이 Tidyverse 블로그 포스트를 참조하세요.
우리가 사용하는 또 다른 현대적인 R 기능은 네이티브 람다(native lambda)로, \(.x) do_something(.x)와 같이 짧은 함수를 작성하는 방식입니다. 이는 purrr’s ~ 람다 표기법과 유사합니다. 또한 네이티브 람다가 function(.x) do_something(.x)와 동일하며, 여기서 \는 function의 약어임을 인식하는 것이 도움이 됩니다. 이 주제에 대한 상세 내용은 R for Data Science의 반복(iteration)장을 참조하세요.
테마 설정 (Theming)
이 책의 그래프들은 모든 코드 청크에 포함하지 않는 일관된 테마를 사용합니다. 즉, 시각화 코드를 직접 실행하면 약간 다르게 보일 수 있습니다. 우리는 ggplot2와 관련된 다음과 같은 기본값을 설정했습니다:
options(
# ggplot2의 기본 색상을 색맹 친화적인 Okabe-Ito 및 Viridis 팔레트로 설정
ggplot2.discrete.colour = ggokabeito::palette_okabe_ito(),
ggplot2.discrete.fill = ggokabeito::palette_okabe_ito(),
ggplot2.continuous.colour = "viridis",
ggplot2.continuous.fill = "viridis",
# 테마 글꼴 및 크기 설정
book.base_family = "sans",
book.base_size = 14
)
library(ggplot2)
# 기본 테마 설정
theme_set(
theme_minimal(
base_size = getOption("book.base_size"),
base_family = getOption("book.base_family")
) %+replace%
theme(
panel.grid.minor = element_blank(),
legend.position = "bottom"
)
)또한 우리가 커스터마이징하고 싶은 ggdag의 몇 가지 함수를 마스킹합니다:
theme_dag <- function() {
ggdag::theme_dag(base_family = getOption("book.base_family"))
}
geom_dag_label_repel <- function(..., seed = 10) {
ggdag::geom_dag_label_repel(
aes(x, y, label = label),
box.padding = 3.5,
inherit.aes = FALSE,
max.overlaps = Inf,
family = getOption("book.base_family"),
seed = seed,
label.size = NA,
label.padding = 0.1,
size = getOption("book.base_size") / 3,
...
)
}감사의 말 (Acknowledgements)
이 책은 단순히 Malcolm, Lucy, Travis만의 결과물이 아닙니다. 이 책에 기여해주신 R 커뮤니티의 모든 분들께 진심으로 감사드립니다!
이 책은 현재 공개적으로 작성되고 있으며 지금까지 13명의 사람들이 풀 리퀘스트를 통해 기여했습니다! GitHub 풀 리퀘스트를 통해 개선에 도움을 주신 모든 분들께 큰 감사를 드립니다(사용자 이름순): Caitlin Eger (@cgeger), Hernando Cortina (@cortinah), @cshancock, David Kane (@davidkane9), @drakileshr, Jakob Schumacher (@jakobschumacher), Ken Taylor (@KennethATaylor), @LaurenCCH, @lindbrook, Matthew Kimber (@matthewkimber), @michaelmoerk, @MMJansen, Simon P. Couch (@simonpcouch).
라이선스 (License)
이 저작물은 CC BY-NC 4.0 라이선스에 따라 이용할 수 있습니다: “이 라이선스는 재사용자가 원저작자를 표시할 것을 요구합니다. 비영리 목적으로만 저작물을 재배포, 리믹스, 변형 및 기반 저작물 작성이 가능합니다.”
이 책의 코드 또한 MIT 라이선스에 따라 사용할 수 있습니다. MIT 라이선스에 따라, 출처를 인용하는 한 여러분의 작업에 자유롭게 코드를 사용할 수 있습니다.