\( \DeclareMathOperator{\expit}{expit} \DeclareMathOperator{\logit}{logit} \DeclareMathOperator*{\argmin}{\arg\!\min} \newcommand{\indep}{\perp\!\!\!\perp} \newcommand{\coloneqq}{\mathrel{=}} \newcommand{\R}{\mathbb{R}} \newcommand{\E}{\mathbb{E}} \newcommand{\M}{\mathcal{M}} \newcommand{\P}{\mathbb{P}} \newcommand{\I}{\mathbb{I}} \newcommand{\1}{\mathbbm{1}} \)

3  tlverse에 대하여

3.1 tlverse란 무엇인가요?

tlverseR 패키지의 tidyverse 생태계에서 영감을 얻은, R에서의 타겟 러닝을 위한 새로운 프레임워크입니다.

tidyverse와 비유하자면:

tidyverse는 데이터 과학을 위해 설계된 R 패키지들의 의견이 반영된(opinionated) 모음입니다. 모든 패키지는 기본 설계 철학, 문법 및 데이터 구조를 공유합니다.

따라서 tlverse는 다음과 같습니다.

기본 설계 철학, 문법 및 핵심 데이터 구조 세트를 공유하는 타겟 러닝을 위한 R 패키지의 의견이 반영된 모음입니다. tlverse는 타겟 러닝 기반 데이터 분석을 구축하고 새로운 최첨단 타겟 러닝 방법을 구현하기 위한 도구를 제공하는 것을 목표로 합니다.

3.2 tlverse의 구조

모든 타겟 러닝 방법은 타겟 최대 가능도(또는 최소 손실 기반) 추정기(즉, TMLE)입니다. 모든 타겟 러닝 추정기의 구축은 2단계 프로세스를 거칩니다.

  1. 종종 기계 학습(예: 슈퍼 러닝)을 통해 데이터 생성 분포의 특정 구성 요소를 유연하게 학습하여 성가신 파라미터(nuisance parameters)의 _초기 추정치_를 생성합니다.
  2. TMLE 추정기를 생성하기 위해 이전 단계에서 생성된 초기 추정치를 통합하여 최대 가능도 추정(즉, MLE)을 통해 신중하게 구축된 파라미터 모델 기반 업데이트를 사용합니다.

tlverse 소프트웨어 생태계의 핵심 구성 요소를 이루는 패키지인 sl3tmle3는 각각 위의 두 가지 목표를 다룹니다. 이 두 패키지가 제공하는 일반적인 기능을 함께 사용하면 특정 통계 추정 문제에 정확히 맞춤화된 특정 TMLE를 구축할 수 있습니다.

tlverse핵심(core)을 구성하는 소프트웨어 패키지는 다음과 같습니다.

  • sl3: 현대적인 슈퍼 기계 학습
    • 무엇인가요? 최근 개발된 R 프로그래밍 패러다임을 채택하여 슈퍼 러너(Super Learner) 알고리즘을 현대적인 객체 지향 방식으로 구현한 것입니다.
    • 왜 필요한가요? 더 빠른 계산을 위해 현대적인 아이디어를 활용하고, 쉽게 확장 가능하며 미래 지향적인 설계로 tlverse의 초석 중 하나를 형성합니다.
  • tmle3: 타겟 러닝을 위한 엔진
    • 무엇인가요? 일련의 일반적인 통계 추정 절차를 식별하고 구현함으로써 타겟 러닝을 단순화하는 일반화된 프레임워크입니다.
    • 왜 필요한가요? 타겟 러닝에 대한 현재의 알고리즘 접근 방식을 수용하면서도 새로운 통계 기술이 개발됨에 따라 이를 구현할 수 있을 만큼 유연한 엔진 역할을 하는 공통 인터페이스를 제공합니다.

tlverse를 이끄는 이러한 엔진 외에도 배경(background)에서 중요한 역할을 하는 몇 가지 지원 패키지가 있습니다.

  • origami: 교차 검증을 위한 일반화된 프레임워크 (Coyle and Hejazi 2018)
    • 무엇인가요? 유연한 교차 검증을 위한 일반화된 프레임워크입니다.
    • 왜 필요한가요? 교차 검증은 오차 추정치가 정직함을 보장하고 과적합을 방지하는 핵심 부분입니다. 이는 슈퍼 러너 앙상블 모델링 알고리즘과 TMLE 추정기 구축 모두에서 필수적인 부분입니다.
  • delayed: 종속 작업(Dependent Tasks)을 위한 병렬화 프레임워크
    • 무엇인가요? 작업 종속성에 기반한 지연 계산(즉, 퓨처(futures))을 위한 프레임워크입니다.
    • 왜 필요한가요? 계산 집약적인 알고리즘을 대규모로 배포할 때 계산 리소스의 효율적인 할당은 필수적입니다.

tlverse의 핵심 원칙 중 하나는 확장성입니다. 즉, 이 소프트웨어 생태계는 새로운 타겟 러닝 추정기가 성숙함에 따라 이를 지원하는 것을 목표로 합니다. 이러한 유연성을 확보하기 위해, 우리는 서로 다른 인과 추론 문제에 대해 별도의 패키지에서 새로운 추정기 클래스를 구현하는 모델을 따르며, 이들은 모두 sl3tmle3가 제공하는 핵심 기계 장치에 의존합니다. 현재 세 가지 예가 있습니다.

  • tmle3mopttx: tlverse에서의 최적 치료(Optimal Treatments)
    • 무엇인가요? 최적의 규칙을 학습하고 그 규칙 하에서의 평균 결과를 추정합니다.
    • 왜 필요한가요? 최적 치료는 정밀 의료 및 일률적인 치료 접근 방식이 적절하지 않은 다른 환경에서 강력한 도구입니다.
  • tmle3shift: tlverse에서 수정된 치료 정책(Modified Treatment Policies)에 기반한 확률적 이동 중재(Stochastic Shift Interventions)
    • 무엇인가요? 연속형 치료 변수의 변화를 평가하기 위한 확률적 이동 중재입니다.
    • 왜 필요한가요? 모든 치료 변수가 이분형 또는 범주형인 것은 아닙니다. 연속형 치료 변수에 중재하는 전체 효과를 추정하면 치료 변수의 이동에 따라 효과가 어떻게 변하는지 조사할 수 있는 방법을 제공합니다.
  • tmle3mediate: tlverse에서의 인과 매개 분석(Causal Mediation Analysis)
    • 무엇인가요? 매개 변수를 통한 치료의 직접 및 간접 효과를 평가하기 위한 기술입니다.
    • 왜 필요한가요? 치료의 총 효과를 평가하는 것만으로는 치료가 작동하는 경로에 대한 정보를 제공하지 않습니다. 매개 변수가 수집된 경우, 치료의 _작용 메커니즘_을 설명하는 직접 및 간접 효과 파라미터를 대신 평가할 수 있습니다.

3.3 R6 클래스 시스템 입문

tlverse는 기본적인 객체 지향 프로그래밍(OOP) 원칙과 R6 OOP 프레임워크를 사용하여 설계되었습니다. OOP에 대해 크게 걱정하지 않고도 tlverse 패키지를 쉽게 사용할 수 있도록 노력했지만, tlverse가 어떻게 구성되어 있는지에 대한 직관을 갖는 것이 도움이 됩니다. 여기서는 OOP의 몇 가지 핵심 개념을 간략하게 설명합니다. OOP 기초에 익숙한 독자는 이 섹션을 건너뛰셔도 좋습니다.

3.3.1 클래스, 필드 및 메서드

OOP의 핵심 개념은 객체(object)입니다. 객체는 어떤 개념적 단위에 대응하는 데이터와 함수의 집합입니다. 객체에는 두 가지 주요 요소가 있습니다.

  1. 필드(fields): 명사라고 생각할 수 있으며, 객체에 대한 정보입니다.
  2. 메서드(methods): 동사라고 생각할 수 있으며, 객체가 수행할 수 있는 작업입니다.

객체는 클래스(classes)의 멤버이며, 클래스는 해당 객체의 특정 필드와 메서드가 무엇인지 정의합니다. 클래스는 다른 클래스(때때로 베이스 클래스라고 함)로부터 요소를 상속받을 수 있습니다. 따라서 비슷하지만 완전히 같지 않은 클래스들은 정의의 일부를 공유할 수 있습니다.

OOP에는 이러한 개념이 구현되고 사용되는 방식에 따라 다양한 구현이 존재합니다. R에는 S3, S4, 참조 클래스(reference classes) 및 R6를 포함하여 여러 가지 구현이 있습니다. tlverseR6 구현을 사용합니다. R6에서 클래스 객체의 메서드와 필드는 $ 연산자를 사용하여 액세스합니다. R의 다양한 OOP 시스템에 대한 더 자세한 소개는 Hadley Wickham의 Advanced R (Wickham 2014) 중 http://adv-r.had.co.nz/OO-essentials.html을 참조하십시오.

3.3.2 객체 지향 프로그래밍: PythonR

OO 개념(상속을 포함한 클래스)은 첫 번째 출판 버전(1991년 버전 0.9)부터 Python에 포함되었습니다. 반면, R은 1976년에 처음 출시된 전신인 S로부터 OO “접근 방식”을 물려받았습니다. 처음 15년 동안 S는 클래스를 지원하지 않았으며, 그러다 갑자기 S에 두 개의 OO 프레임워크가 연달아 추가되었습니다. 1991년 S3를 통한 비형식적 클래스와 1998년 S4를 통한 형식적 클래스가 그것입니다. 이 과정은 계속되어 R의 부족한 OO 지원을 개선하기 위해 새로운 OO 프레임워크가 주기적으로 출시되었으며, 참조 클래스(R5, 2010)와 R6(2014)가 등장했습니다. 이 중 R6는 메서드 정의가 클래스 정의의 일부가 되고 객체를 참조로 수정할 수 있는 등 Python 클래스(및 C++, Java와 같은 OOP 중심 언어)와 가장 유사하게 작동합니다.

4 소프트웨어 설정

4.1 R 및 RStudio 설정하기

RRStudio는 별도로 다운로드하여 설치해야 합니다. R은 기본 통계 컴퓨팅 환경입니다. RStudio는 R을 훨씬 더 쉽고 인터랙티브하게 사용할 수 있게 해주는 그래픽 통합 개발 환경(IDE)입니다. RStudio를 설치하기 전에 R을 먼저 설치해야 합니다.

4.1.1 Windows

4.1.1.1 이미 R과 RStudio가 설치되어 있는 경우:

  • RStudio를 열고 “Help” > “Check for updates”를 클릭합니다. 새 버전을 사용할 수 있는 경우 RStudio를 종료하고 최신 버전의 RStudio를 다운로드합니다.
  • 사용 중인 R 버전을 확인하려면 RStudio를 시작할 때 콘솔에 가장 먼저 나타나는 정보를 확인합니다. 또는 sessionInfo()를 입력하여 확인할 수도 있습니다. CRAN 웹사이트에 접속하여 더 최신 버전이 있는지 확인합니다. 있는 경우 다운로드하여 설치하십시오. 시스템에서 이전 버전을 제거하는 방법에 대한 자세한 내용은 여기를 참조하십시오.

4.1.1.2 R과 RStudio가 설치되어 있지 않은 경우:

  • CRAN 웹사이트에서 R을 다운로드합니다.
  • 방금 다운로드한 .exe 파일을 실행합니다.
  • RStudio 다운로드 페이지로 이동합니다.
  • Installers 아래에서 RStudio x.yy.zzz - Windows XP/Vista/7/8을 선택합니다(x, y, z는 버전 번호를 나타냄).
  • 파일을 더블 클릭하여 설치합니다.
  • 설치가 완료되면 RStudio를 열어 제대로 작동하는지, 오류 메시지가 나타나지 않는지 확인합니다.

4.1.2 macOS / Mac OS X

4.1.2.1 이미 R과 RStudio가 설치되어 있는 경우:

  • RStudio를 열고 “Help” > “Check for updates”를 클릭합니다. 새 버전을 사용할 수 있는 경우 RStudio를 종료하고 최신 버전의 RStudio를 다운로드합니다.
  • 사용 중인 R 버전을 확인하려면 RStudio를 시작할 때 터미널에 가장 먼저 나타나는 정보를 확인합니다. 또는 sessionInfo()를 입력하여 확인할 수도 있습니다. CRAN 웹사이트에 접속하여 더 최신 버전이 있는지 확인합니다. 있는 경우 다운로드하여 설치하십시오.

4.1.2.2 R과 RStudio가 설치되어 있지 않은 경우:

  • CRAN 웹사이트에서 R을 다운로드합니다.
  • 최신 R 버전에 대한 .pkg 파일을 선택합니다.
  • 다운로드한 파일을 더블 클릭하여 R을 설치합니다.
  • XQuartz(일부 패키지에서 필요함)를 설치하는 것도 좋은 생각입니다.
  • RStudio 다운로드 페이지로 이동합니다.
  • Installers 아래에서 RStudio x.yy.zzz - Mac OS X 10.6+ (64-bit)를 선택합니다(x, y, z는 버전 번호를 나타냄).
  • 파일을 더블 클릭하여 RStudio를 설치합니다.
  • 설치가 완료되면 RStudio를 열어 제대로 작동하는지, 오류 메시지가 나타나지 않는지 확인합니다.

4.1.3 Linux

  • CRAN에서 해당 배포판에 대한 지침을 따르십시오. 일반적인 배포판에 대해 최신 버전의 R을 얻을 수 있는 정보를 제공합니다. 대부분의 배포판에서 패키지 관리자를 사용할 수 있지만(예: Debian/Ubuntu의 경우 sudo apt-get install r-base, Fedora의 경우 sudo yum install R 실행), 이 방식으로 제공되는 버전은 대개 구식이므로 이 방법은 권장하지 않습니다. 어쨌든 최신 버전의 R을 사용 중인지 확인하십시오.
  • RStudio 다운로드 페이지로 이동합니다.
  • Installers 아래에서 해당 배포판과 일치하는 버전을 선택하고 선호하는 방법으로 설치합니다(예: Debian/Ubuntu의 경우 터미널에서 sudo dpkg -i rstudio-x.yy.zzz-amd64.deb 실행).
  • 설치가 완료되면 RStudio를 열어 제대로 작동하는지, 오류 메시지가 나타나지 않는지 확인합니다.

이 설정 지침은 Data Carpentry: R for Data Analysis and Visualization of Ecological Data를 위해 작성된 내용을 수정한 것입니다.

4.2 tlverse 설치하기

tlverse 생태계의 패키지들은 현재 https://github.com/tlverse 에 호스팅되어 있으며, 아직 CRAN에는 등록되지 않았습니다. usethis 패키지를 사용하여 설치할 수 있습니다.

install.packages("devtools")
devtools::install_github("tlverse/tlverse")

tlverse는 GitHub에 호스팅된 다른 많은 패키지들에 의존합니다. 이 때문에 다음과 같은 오류가 발생할 수 있습니다.

Error: HTTP error 403.
  API rate limit exceeded for 71.204.135.82. (But here's the good news:
  Authenticated requests get a higher rate limit. Check out the documentation
  for more details.)

  Rate limit remaining: 0/60
  Rate limit reset at: 2019-03-04 19:39:05 UTC

  To increase your GitHub API rate limit
  - Use `usethis::create_github_token()` to create a Personal Access Token.
  - Use `usethis::edit_r_environ()` and add the token as `GITHUB_PAT`.

이것은 R이 너무 짧은 시간 동안 GitHub에서 너무 많은 패키지를 설치하려고 시도했음을 의미합니다. 이를 해결하려면 R에게 GitHub 사용자로 인증하는 방법을 알려줘야 합니다(GitHub 사용자 계정이 필요합니다). 다음 두 단계를 따르십시오.

  1. R 콘솔에 usethis::create_github_token()을 입력하면 새 개인 액세스 토큰(PAT)을 생성할 수 있는 GitHub 페이지로 이동합니다.

  2. 페이지 하단의 “Generate token”을 클릭하여 PAT를 생성합니다.

  3. 소문자와 숫자로 구성된 긴 문자열인 PAT를 복사합니다.

  4. R 콘솔에 usethis::edit_r_environ()을 입력하면 RStudio의 소스 창에서 .Renviron 파일이 열립니다.

    1. usethis::edit_r_environ()을 호출한 후 .Renviron 파일이 나타나지 않으면, Sys.setenv(GITHUB_PAT = "yourPAT")를 입력하여 따옴표 안에 PAT를 넣으십시오. 오류가 발생하지 않으면 8단계로 건너뜁니다.
  5. .Renviron 파일에 GITHUB_PAT=를 입력하고 등호 뒤에 공백 없이 PAT를 붙여넣습니다.

  6. .Renviron 파일이 새 줄로 끝나도록 엔터 키를 누릅니다.

  7. .Renviron 파일을 저장합니다. 아래 예시는 이 구문이 어떻게 보여야 하는지 보여줍니다.

  GITHUB_PAT=yourPAT
  1. R을 재시작합니다. RStudio 인터페이스 상단에 있는 “Session” 탭의 드롭다운 메뉴를 통해 R을 재시작할 수 있습니다. 변경 사항을 적용하려면 반드시 R을 재시작해야 합니다!

이 단계들을 거치면 위와 같은 오류를 발생시킨 패키지를 성공적으로 설치할 수 있을 것입니다.