Chapter 3 비구획분석의 자료해석

한성필3

3.1 서론

약동학(PK) 데이터에 대한 자료해석 시 가장 간단하고도 객관적이며 널리 쓰이는 방법은 NCA(비구획분석, Non-Compartmental analysis)이고 이는 약물의 임상개발에 매우 중요하다. NCA 결과는 약물개발 중 수행 된 많은 임상약리학 연구(예 : 음식 효과, 약물상호작용 및 생물학적 동등성 연구 등)에 대해 중요한 평가기준이 되는 변수를 제공하게 된다. 약물개발 과정에서 개발된 구획 PK 모델을 평가하거나 결정하는데에도 도움을 준다. 이러한 중요성 때문에 약동학을 공부하고 이를 신약개발에 활용하고자 하는 사람들은 NCA가 제공하게 되는 파라미터의 의미와 그 방법론적 한계에 대해 높은 수준의 이해가 필요하다. 따라서 NCA는 능숙하고 정확하게 수행되어야 하며 이에 대한 해석을 통해 약물에 대한 지식과 통찰력을 올바르게 축적해 나갈 수 있다. (Noe 2020)

이 장에서는 PK 자료에 대해 NCA를 수행하는 방법에 대해 자세히 기술하여 능숙하고 정확한 분석을 돕고자 한다. R 소프트웨어를 사용한 프로그래밍이 필요한 부분이 있어 NCA를 수행하기 위해 꼭 알아야 하는 이론은 기술하였으나, 자세한 사항은 별도의 교재를 통해 학습해야 할 것이다. (Wickham 2016)

3.2 NCA를 위한 자료의 처리

3.2.1 채혈 시간

예정된 채혈시간을 사용할 경우 농도 자료를 빠르게 분석할 수 있다는 장점이 있으나, 최종 NCA 파라미터의 산출에는 실제 샘플링 시간을 사용해야 한다. 간혹 예정된 채혈시간과 실제 채혈시간의 차이가 극히 적은 경우, 이를 생략하기도 하지만 규제기관에 제출되는 자료에는 이러한 방식의 분석을 하면 안된다.

실제 채혈시간으로 구성된 자료를 만들기 위해 약동학자는 R 소프트웨어를 주로 사용하게 된다. 방대한 채혈 데이터를 마이크로소프트 엑셀 등을 사용해 다루는 경우 오류의 개입이 될 확률이 커지기 때문이다. 이러한 작업을 도와주는 R 패키지 중 자료를 몇가지 간단한 함수로 빠르게 추출하고 재생성하는 작업에 특화된 dplyr (Wickham, Francois, et al. 2021), 자료의 형태를 변형하는 tidyr (Wickham 2021), 시간 자료를 쉽게 처리할 수 있는 lubridate (Spinu, Grolemund, and Wickham 2021) 등이 있다.

계획된 채혈 시간은 기술통계량을 구하여 표를 만들거나 농도-시간 곡선 등의 그림을 그리는데 사용될 수 있으므로 실제 채혈시간과 병기하여 하나의 최종 자료에 포함되어 있어야 한다.

3.2.2 정량한계를 벗어나거나 누락된 자료의 처리

농도 분석 결과가 정량한계를 벗어나는 경우 실험실에서 “<LLOQ” 또는 “>ULOQ”라는 보고를 하게 되며 각각 정량하한과 정량상한을 벗어나 신뢰성 있는 농도를 제공하지 못한다는 의미이다. 기본적으로 “>ULOQ” 자료는 희석을 통해 재분석을 해야 하며 “<LLOQ” 자료는 재분석을 통해 얻어지기 힘든 경우가 많으므로 그대로 보고하게 된다. 다만 실험실에서 농도분석을 세팅할 때 LLOQ를 과도하게 높은 농도로 설정하는 경우 많은 “<LLOQ” 값이 보고되는 상황이 발생할 수 있으므로 임상시험 또는 비임상연구에서 예측되는 LLOQ 값을 어느정도 반영할 수 있어야 하는 것이 바람직하다. 구체적으로 약물의 최종 반감기(\(t_{1/2\beta}\))를 계산하는데 필요한 소실기의 농도 관찰값보다 LLOQ는 1/3 이하라야 하고, 과거에는 이러한 민감도로 농도 측정이 불가능한 상황이 많았으나 현대 분석 기술에서는 많이 개선 되었다.

정량한계 미만의 값은 문자로 보고되는 경우가 많으므로 R에서 as.numeric() 함수를 사용하면 숫자처럼 보이는 문자("10.1")는 숫자(10.1)로 변환되고, 문자("<LLOQ")는 NA값으로 경고와 함께 변환된다. 이후 Tmax 값 이전의 NA값은 0으로 변환하고, 이후의 값은 dplyr의 filter() 함수를 사용하여 자료에서 제거(filter(!is.na(DV))와 같은 명령어를 사용)하는 것이 NCA용 자료를 구성하는 일반적인 방법이다.

다양한 이유로 누락된 자료가 생길 수 있고, 누락된 자료는 NA로 간주하여 윗 문장과 같이 필터링 아웃 처리하여 제거되게 되나, 이러한 누락 자료가 NCA 파라미터에 어떤 영향을 미치는지 파악할 필요가 있다. 이를테면 Cmax(최고혈중농도)를 제공하는 채혈이 누락된 경우 AUC를 비롯한 이와 연관된 모든 파라미터에 큰 영향을 미치게 되나, 배설 단계 후반의 낮은 농도 값이 누락된 경우 미미한 영향을 미치게 된다.

3.2.3 자료의 제외

분석 오류 또는 시료 취급 중 오류 등으로 자료를 제외해야 하는 경우가 적지않은 빈도로 생길 수 있다. 약물의 배설 과정 중 예측되는 농도 범위를 크게 벗어나거나, 서로 다른 두 대상자(또는 동물 개체) 간의 농도가 뒤바뀌는 등의 상황이 있을 수 있다. 자료가 제외되는 예외적인 상황에서는 임상연구보고서의 약동학 분석 장에서 자료가 제외되는 이유에 대해 근거와 함께 상세히 기록해야 한다. 특히 생물학적 동등성 시험에서 이러한 이슈는 민감할 수 있어, NCA 수행자는 어떤 자료를 무슨 근거로 제외했는지, 그 때 사용한 코드를 처리 방법의 상세한 기술과 함께 보관하고 있어야 한다.

3.3 상용 소프트웨어를 이용한 NCA

상용 소프트웨어 중 가장 많이 사용되는 것이 Certara 사의 Phoenix WinNonLin이다. 오랜 시간 많은 연구자들이 사용하여 익숙한 GUI 인터페이스를 제공하고 있고, 혈액, 소변 자료의 NCA 등을 제공하고 간단한 설계의 생물학적 동등성 판정 등 통계 분석도 지원하여 비교적 진입장벽이 낮은 자료 분석 도구라 할 수 있다.

그러나 소규모 제약사나 학교에서 사용하기에 비싼 사용료를 지불해야 한다. NCA를 빈번하게 사용하지 않는 제약사나 바이오텍에서는 이러한 유지비용이 부담으로 다가올 수 있다. 분석 초보자의 경우 유료 강의를 통한 학습이 필요하며, CDISC(Clinical Data Interchange Standards Consortium)4 표준 용어로 파라미터를 제공하지 않아 그 의미를 따로 파악해야 하는 어려움이 있다. 비교적 경험이 쌓인 연구자에게는 분석 워크플로우를 프로그래밍 코드를 통해 자동화하는게 불가능한 것이 단점으로 여겨질 수 있다. 윈도우 환경에서만 실행 가능하다는 것도 특정 운영체제를 선호하는 사람에게 제한점이 될 수 있다.

식약처, 미국 FDA(Food and Drug Administration), 유럽 EMA(European Medicines Agency)를 비롯한 대부분의 규제기관에서는 NCA에 쓰는 특정 소프트웨어를 규정하고 있지 않아, 상용 소프트웨어를 사용하지 않고 약동학적 지표를 구하는 것을 허용하고 있다.

3.4 NCA에 활용할 수 있는 R package 소개

무료로 누구나 사용할 수 있는 R 패키지를 사용하여 NCA를 통한 약동학적 주요 지표를 구할 수 있다. 비용을 떠나 NCA를 R로 수행하는 가장 중요한 이유는 오류를 줄일 수 있고, 한번 설정한 것을 반복해서 적용하는 것이 쉽기 때문이다. 더 나아가 계량약리학 분석 전후 과정 중에 NCA를 같은 작업환경에서 빠르게 수행할 수 있다는 장점도 있다.

이 책에서 주로 다루게 될 NonCompart (Bae 2021c), ncar (Bae 2021b), pkr (Bae and Lee 2018) 은 NCA를 R을 통해 쉽고 빠르게 행할 수 있는 R 패키지이다.

NonCompart의 패키지 이름은 Noncompartmental Analysis for Pharmacokinetic Data, ncar의 패키지 이름은 Noncompartmental Analysis for Pharmacokinetic Report, pkr의 패키지 이름은 Pharmacokinetics in R 이다.

이들의 기저에 있는 계산 방식은 모두 동일하고 앞서 설명한 상용소프트웨어와 완전히 일치하는 결과를 낼 수 있다. NonCompart의 DESCRIPTION 파일을 보면 다음과 같이 설명하고 있다. CDISC SDTM 용어를 사용하기 때문에 표준을 준수한다는 장점도 있다.

Conduct a noncompartmental analysis with industrial strength. Some features are 1) Use of CDISC SDTM terms 2) Automatic or manual slope selection 3) Supporting both ‘linear-up linear-down’ and ‘linear-up log-down’ method 4) Interval(partial) AUCs with ‘linear’ or ‘log’ interpolation method * Reference: Gabrielsson J, Weiner D. Pharmacokinetic and Pharmacodynamic Data Analysis - Concepts and Applications. 5th ed. 2016. (ISBN:9198299107).

이를 사용하기 위해 아래의 순서로 R과 Rstudio를 설치해야 한다.

3.4.1 R 4.x.x의 설치 (윈도우 환경5)

  1. https://cran.r-project.org 사이트에 접속하여, Download R for Windows 링크를 선택한다.
  2. Subdirectories 유형에서 base - install R for the first time을 선택한다.
  3. Download R for Windows 링크를 선택하여 R-4.x.x-win.exe 설치파일을 다운로드한다.
  4. 설치파일을 실행한 후, ’이 앱이 디바이스를 변경할 수 있도록 허용하시겠어요?’라는 사용자 계정 컨트롤 창이 나타나면 버튼을 클릭한다.
  5. 설치 언어는 한국어로 선택하고 확인 버튼을 클릭한다.
  6. R 4.x.x 설치 정보 내용을 확인하고, 다음 버튼을 클릭한다.
  7. R 4.x.x 프로그램의 설치 경로를 지정하여 다음 버튼을 클릭한다.
  8. R.4.x.x 구성요소 설치는 32bit files를 제외하고 나머지 구성요소들만 체크한 후 다음 버튼을 클릭한다.
  9. 스타트 옵션을 조정하는 화면이 나타나면, No를 선택하고 다음 버튼을 클릭한다.

3.4.2 Rstudio 설치 (윈도우 환경)

  1. https://rstudio.com/products/rstudio/download/ 사이트에 접속하여 Rstudio Desktop free download 버튼을 클릭한다.
  2. 2. Download Rstudio DesktopDOWNLOAD RSTUDIO FOR WINDOWS(64bit) 파란색 버튼을 클릭하고, Studio-1.x.x.exe 파일을 다운받는다.
  3. RStudio-1.x.x.exe 파일을 실행하면 ’이 앱이 디바이스를 변경할 수 있도록 허용하시겠어요?’라는 사용자 계정 컨트롤 창이 나타나면 버튼을 클릭한다.
  4. Rstudio 설치 시작 창이 나타나면 다음 버튼을 클릭한다.
  5. Rstudio를 설치할 경로를 지정하고 다음 버튼을 클릭한다.
  6. Rstudio 바로가기 아이콘이 생성될 시작메뉴 폴더 안에 Rstudio를 입력하고 설치 버튼을 클릭한다.
  7. Rstudio 설치가 완료되면 마침 버튼을 클릭한다.

Rstudio를 실행한 후, 콘솔 창에서 NCA를 위한 패키지를 설치하는 방법은 다음과 같다. 홑따옴표 등의 인용 부호에 주의해야 한다.

install.packages('NonCompart')
install.packages('ncar')
install.packages('pkr')

설치는 한번만 하면 되지만, NCA를 위해서는 매 세션마다 패키지를 library() 함수를 사용하여 불러와야 한다.

library(NonCompart)
library(ncar)
library(pkr)

R을 사용하다가 도움이 필요할때는 맨 앞에 물음표를 붙여서 콘솔창에 입력하거나 help() 함수를 사용할 수 있다.

?NonCompart
help(tblNCA)

3.5 NCA를 위한 데이터셋의 작성

자료의 첫 10개 (표 3.1) 또는 마지막 10개 관찰값만 보고 싶으면 다음을 입력한다. 대상자 번호가 첫 열에 나와있고 시간 순서대로 혈장에서 측정한 테오필린의 농도가 나와있다. 이러한 모습과 흡사하게 자료를 만들어야 하며 이는 앞선 3.2절의 내용을 참고할 수 있다.

head(Theoph, n=10)
tail(Theoph, n=10)
표 3.1: Theoph 자료의 첫 10개 관찰값
Subject Wt Dose Time conc
1 79.6 4.02 0.00 0.74
1 79.6 4.02 0.25 2.84
1 79.6 4.02 0.57 6.57
1 79.6 4.02 1.12 10.50
1 79.6 4.02 2.02 9.66
1 79.6 4.02 3.82 8.58
1 79.6 4.02 5.10 8.36
1 79.6 4.02 7.03 7.47
1 79.6 4.02 9.05 6.89
1 79.6 4.02 12.12 5.94

ggplot2 패키지(Wickham, Chang, et al. 2021)로 그림을 그려서 대략적인 자료의 모습을 파악할 수 있다. (그림 3.1) ggplot2에 대한 설명은 본서의 범위를 벗어나므로 별도의 교재를 통해 학습할 수 있다. (Wickham 2016)

ggplot(Theoph, aes(Time, conc, color = Subject)) +
  geom_point(size=2, alpha=0.5) + 
  geom_line(size=1, alpha=0.5) +
  theme_bw() +
  labs(title = 'Oral Administration of Theoph (320 mg)',
       x = 'Time (hour)', y = 'Concentration (ng/mL)')
Theoph의 경구 투여 후 농도-시간 곡선 (N = 12)

그림 3.1: Theoph의 경구 투여 후 농도-시간 곡선 (N = 12)

3.6 자료 불러오기

가장 단순한 형태의 자료는 CSV파일로 쉼표로 구분된 문서로 메모장 등 텍스트 편집기로 파일을 열었을 때에도 자료를 확인 가능한 형태이다. 이러한 파일은 read.csv() 또는 readr패키지(Wickham and Hester 2020)read_csv() 함수를 사용해서 자료를 불러 온다. 엑셀 파일을 사용하는 경우 readxl 패키지(Wickham and Bryan 2019)를 설치한 후에 read_excel() 함수를 사용해서 불러올 수 있다.

다만 read_csv(), read_excel()을 사용하는 경우 tibble 형태로 자료가 변형되고 이러한 형태의 자료는 tblNCA() 사용시 오류를 일으키기 때문에 사전에 as.data.frame()을 사용해서 데이타프레임으로 변형해주어야 한다. 6

3.7 NonCompart R 패키지를 이용한 NCA

3.7.1 tblNCA(): 전체 대상자 NCA

가장 많이 쓰는 함수이다. NonCompart 패키지의 핵심적인 기능이다. 코드 3.1를 R의 콘솔창에 넣어 테오필린 경구 투여시의 NCA를 빠르게 수행할 수 있다.

코드 3.1 NonCompart 패키지의 tblNCA() 함수를 사용한 비구획분석 R 코드

Theoph_tblNCA <- tblNCA(Theoph, "Subject", "Time", "conc", 
                        dose=320, concUnit="mg/L")

코드 3.1에서 dose=320으로 되었다는 것은 아미노필린 400mg 투여시 테오필린 320mg이 경구로 투여되었음을 의미한다.

결과는 문자(character)로 구성된 matrix로 구성된 결과물과 단위 정보가 담긴 attribute를 포함하고 있다. 본문에 결과를 싣기에 지면이 부족하여 별첨 A에 수록하였고, 여기에서는 dplyr의 select() 함수를 사용하여 핵심적인 일부 파라미터 (Cmax, Tmax, AUClast, \(t_{1/2\beta}\))만 표시하였다.

Theoph_tblNCA_selected <- Theoph_tblNCA %>% 
  dplyr::select(Subject, CMAX, TMAX, AUCLST, LAMZHL)
Theoph_tblNCA_selected
##    Subject  CMAX TMAX AUCLST LAMZHL
## 1        1 10.50 1.12 148.92 14.304
## 2        2  8.33 1.92  91.53  6.659
## 3        3  8.20 1.02  99.29  6.766
## 4        4  8.60 1.07 106.80  6.981
## 5        5 11.40 1.00 121.29  8.002
## 6        6  6.44 1.15  73.78  7.895
## 7        7  7.09 3.48  90.75  7.847
## 8        8  7.56 2.02  88.56  8.510
## 9        9  9.03 0.63  86.33  8.406
## 10      10 10.21 3.55 138.37  9.247
## 11      11  8.00 0.98  80.09  7.261
## 12      12  9.75 3.52 119.98  6.287

위의 예에서 가장 간단한 형태의 NCA를 실행하였지만, 보다 정밀한 분석은 tblNCA() 함수의 인자(argument)를 살펴봄으로서 알 수 있다. ?tblNCA() 또는 args(tblNCA) 명령어를 통해 아래 결과를 얻을 수 있다.

tblNCA(concData, key = "Subject", colTime = "Time", colConc = "conc", 
       dose = 0, adm = "Extravascular", dur = 0, doseUnit = "mg", 
       timeUnit = "h", concUnit = "ug/L", down = "Linear", R2ADJ = 0.9, 
       MW = 0, iAUC="")

R에서는 함수이름(tblNCA) 뒤의 괄호 안에 쉼표로 구별되는 인자를 통해 구체적인 자료의 성격을 입력해야 한다. concData는 데이터셋 이름을 넣어주고, key는 subject ID의 컬럼명 또는 treatment code의 컬럼명 (교차시험 등에서)을 벡터 형태(c('subject', 'period', 'treatment'))로 지정할 수 있다. 여기서 key로 들어간 컬럼은 모두 결과 표의 초반에 그대로 출력되게 된다. colTime은 time의 컬럼명, colConc는 농도(concentration)의 컬럼명 등을 함수 인자로 갖는다. 그 외 인자들에 대해서 살펴보자면 다음과 같다.

  1. down
    • AUC와 AUMC를 구하는 trapezoidal method 설정이며, 기본값은 Linear이다.
    • LinearLog 중 선택 가능하며 각각 linear trapezoidal method와 linear-up and log-down method를 의미한다.
  2. dose
    • 투여량에 대한 설정이다. 단위에 주의해야 한다. 벡터값을 줌으로서 각 대상자별 용량을 다르게 할 수 있다.
  3. adm
    • 투여경로에 대한 설정, 기본값은 “Extravascular”으로 경구 투여 등을 의미한다.
    • Bolus, Infusion, Extravascular 중에서 선택 가능하다.
  4. dur
    • 주입하는 기간(infusion duration)을 설정한다. 기본값은 0이다.
  5. R2ADJ
    • R2ADJ 값이 설정값 이하인 경우, DetSlope() 함수에 의해 최종 기울기(terminal slope)를 상용소프트웨어와 유사하게 수동으로 고를 수 있게 된다.

인도메타신 정맥 투여시의 NCA이다. 함수인자 adm을 infusion으로 바꾼 것을 볼 수 있고 dur가 추가된 것을 볼 수 있다.

Indometh_tblNCA <- tblNCA(Indometh, key="Subject", 
                          colTime="time", colConc="conc", dose=25, 
                          adm="Infusion", dur=0.5, 
                          concUnit="mg/L", R2ADJ = 0.8)

역시 핵심적인 일부 파라미터 (Cmax, Tmax, AUClast, \(t_{1/2\beta}\))만 표시할 수 있다.

Indometh_tblNCA_selected <- Indometh_tblNCA %>% 
  select(Subject, CMAX, TMAX, AUCLST, LAMZHL) %>% 
  print()
##   Subject CMAX TMAX AUCLST LAMZHL
## 1       1 1.50 0.25  1.741  4.378
## 2       2 2.03 0.25  2.933  2.293
## 3       3 2.72 0.25  2.934  1.643
## 4       4 1.85 0.25  2.478  1.615
## 5       5 2.05 0.25  1.954  2.742
## 6       6 2.31 0.25  2.873  1.961

3.7.2 sNCA()

많이 쓰이지 않는 기능이지만, 한명의 대상자(또는 개체)에 대해 NCA를 시행한다.

# For one subject
x <- Theoph[Theoph$Subject=="1","Time"]
y <- Theoph[Theoph$Subject=="1","conc"]

sNCA(x, y, dose=320, doseUnit="mg", concUnit="mg/L", timeUnit="h")
##         b0       CMAX      CMAXD       TMAX       TLAG 
##    2.36879   10.50000    0.03281    1.12000    0.00000 
##       CLST      CLSTP       TLST     LAMZHL       LAMZ 
##    3.28000    3.28015   24.37000   14.30438    0.04846 
##     LAMZLL     LAMZUL    LAMZNPT     CORRXY         R2 
##    9.05000   24.37000    3.00000   -1.00000    1.00000 
##      R2ADJ     AUCLST     AUCALL     AUCIFO    AUCIFOD 
##    1.00000  148.92305  148.92305  216.61193    0.67691 
##     AUCIFP    AUCIFPD     AUCPEO     AUCPEP    AUMCLST 
##  216.61496    0.67692   31.24892   31.24988 1459.07110 
##    AUMCIFO    AUMCIFP    AUMCPEO    AUMCPEP       VZFO 
## 4505.53482 4505.67086   67.61603   67.61701   30.48675 
##       VZFP       CLFO       CLFP   MRTEVLST   MRTEVIFO 
##   30.48632    1.47730    1.47728    9.79748   20.80003 
##   MRTEVIFP 
##   20.80037 
## attr(,"units")
##  [1] ""          "mg/L"      "mg/L/mg"   "h"        
##  [5] "h"         "mg/L"      "mg/L"      "h"        
##  [9] "h"         "/h"        "h"         "h"        
## [13] ""          ""          ""          ""         
## [17] "h*mg/L"    "h*mg/L"    "h*mg/L"    "h*mg/L/mg"
## [21] "h*mg/L"    "h*mg/L/mg" "%"         "%"        
## [25] "h2*mg/L"   "h2*mg/L"   "h2*mg/L"   "%"        
## [29] "%"         "L"         "L"         "L/h"      
## [33] "L/h"       "h"         "h"         "h"        
## attr(,"UsedPoints")
## [1]  9 10 11

이때의 그림은 다음과 같다. (그림 3.2)

ggplot(Theoph %>% dplyr::filter(Subject == 1), 
       aes(Time, conc, group = Subject, color = Subject)) +
  geom_point(size = 4) + geom_line(size = 1) +
  theme_minimal() +
  labs(title = 'Oral Administration of Theoph (320 mg) (Subject 1)',
       x = 'Time (hour)', y = 'Concentration (ng/mL)')
테오필린의 경구 투여 후 개별 대상자의 농도-시간 곡선 (Subject 1)

그림 3.2: 테오필린의 경구 투여 후 개별 대상자의 농도-시간 곡선 (Subject 1)

3.8 NCA 보고서

NCA 후 완전한 형태의 자료의 전달을 위해 분석 환경을 상세히 기술한 보고서는 필수적이다. 상용소프트웨어에서 이러한 보고서 작성 기능이 잘 갖추어져 있는데, 무료 NCA 소프트웨어에는 드물게 지원하는 기능이다. ncar은 상용소프트웨어의 보고서의 모든 정보를 포함하는 보고서를 만드는 R 패키지이다. 현재 설정된 작업 디렉토리(working directory) 또는 지정된 위치에 결과 파일이 생성된다.

3.8.1 txtNCA()

txtNCA()를 통해서 다음 결과를 얻을 수 있다.

txtNCA(Theoph[Theoph$Subject=="1","Time"],
       Theoph[Theoph$Subject=="1","conc"], 
       dose=320, doseUnit="mg", concUnit="mg/L", timeUnit="h")

파일로 저장하려면 다음을 입력한다.

writeLines(txtNCA(Theoph[Theoph$Subject=="1","Time"],
                  Theoph[Theoph$Subject=="1","conc"], 
                  dose=320, doseUnit="mg", concUnit="mg/L",
                  timeUnit="h"), 
           'Output-ncar/txtNCA-Theoph.txt')
                        NONCOMPARTMENTAL ANALYSIS REPORT
                       Package version 0.5.0 (2023-11-19)
                          R version 4.3.2 (2023-10-31)

Date and Time: 2024-02-06 13:34:58.640232 Asia/Seoul

Calculation Setting
-------------------
Drug Administration: Extravascular
Observation count excluding trailing zero: 11
Dose at time 0: 320 mg
AUC Calculation Method: Linear-up Linear-down
Weighting for lambda z: Uniform (Ordinary Least Square, OLS)
Lambda z selection criterion: Highest adjusted R-squared value with precision=1e-4


Fitting, AUC, AUMC Result
-------------------------
      Time         Conc.      Pred.   Residual       AUC       AUMC
---------------------------------------------------------------------
     0.0000       0.7400                           0.0000     0.0000
     0.2500       2.8400                           0.4475     0.0888
     0.5700       6.5700                           1.9531     0.8015
     1.1200      10.5000                           6.6474     5.0654
     2.0200       9.6600                          15.7194    19.1383
     3.8200       8.5800                          32.1354    66.1982
     5.1000       8.3600                          42.9770   114.4617
     7.0300       7.4700                          58.2529   206.2815
     9.0500 *     6.8900     6.8912 -1.228e-03    72.7565   322.2988
    12.1200 *     5.9400     5.9387 +1.324e-03    92.4505   528.5219
    24.3700 *     3.2800     3.2801 -1.465e-04   148.9231  1459.0711

*: Used for the calculation of Lambda z.


Calculated Values
-----------------
CMAX       Max Conc                                       10.5000 mg/L
CMAXD      Max Conc Norm by Dose                           0.0328 mg/L/mg
TMAX       Time of CMAX                                    1.1200 h
TLAG       Time Until First Nonzero Conc                   0.0000 h
CLST       Last Nonzero Conc                               3.2800 mg/L
CLSTP      Last Nonzero Conc Pred                          3.2801 mg/L
TLST       Time of Last Nonzero Conc                      24.3700 h
LAMZHL     Half-Life Lambda z                             14.3044 h
LAMZ       Lambda z                                        0.0485 /h
LAMZLL     Lambda z Lower Limit                            9.0500 h
LAMZUL     Lambda z Upper Limit                           24.3700 h
LAMZNPT    Number of Points for Lambda z                   3
CORRXY     Correlation Between TimeX and Log ConcY        -1.0000 
R2         R Squared                                       1.0000 
R2ADJ      R Squared Adjusted                              1.0000 
AUCLST     AUC to Last Nonzero Conc                      148.9231 h*mg/L
AUCALL     AUC All                                       148.9231 h*mg/L
AUCIFO     AUC Infinity Obs                              216.6119 h*mg/L
AUCIFOD    AUC Infinity Obs Norm by Dose                   0.6769 h*mg/L/mg
AUCIFP     AUC Infinity Pred                             216.6150 h*mg/L
AUCIFPD    AUC Infinity Pred Norm by Dose                  0.6769 h*mg/L/mg
AUCPEO     AUC %Extrapolation Obs                         31.2489 %
AUCPEP     AUC %Extrapolation Pred                        31.2499 %
AUMCLST    AUMC to Last Nonzero Conc                    1459.0711 h2*mg/L
AUMCIFO    AUMC Infinity Obs                            4505.5348 h2*mg/L
AUMCIFP    AUMC Infinity Pred                           4505.6709 h2*mg/L
AUMCPEO    AUMC %Extrapolation Obs                        67.6160 %
AUMCPEP    AUMC % Extrapolation Pred                      67.6170 %
VZFO       Vz Obs by F                                    30.4867 L
VZFP       Vz Pred by F                                   30.4863 L
CLFO       Total CL Obs by F                               1.4773 L/h
CLFP       Total CL Pred by F                              1.4773 L/h
MRTEVLST   MRT Extravasc to Last Nonzero Conc              9.7975 h
MRTEVIFO   MRT Extravasc Infinity Obs                     20.8000 h
MRTEVIFP   MRT Extravasc Infinity Pred                    20.8004 h

3.8.2 pdfNCA()

pdfNCA()로 pdf로 결과를 볼 수 있다. (그림 3.3) 이렇게 생성된 파일은 임상시험보고서(CSR)의 별첨으로 첨부하게 된다.

ncar::pdfNCA("Output-ncar/Theoph.pdf", Theoph, key="Subject", 
             colTime="Time",  colConc="conc", dose=320, doseUnit="mg", 
             timeUnit="h", concUnit="mg/L")
pdfNCA() 출력 결과

그림 3.3: pdfNCA() 출력 결과

3.8.3 rtfNCA()

마이크로소프트 워드에서 편집가능한 rtf파일을 만들 수 있다. 이렇게 생성된 파일은 위 PDF파일과 마찬가지로 임상시험보고서(CSR)의 별첨으로 첨부하게 된다.

ncar::rtfNCA("rtfNCA-Theoph.rtf", Theoph, key="Subject", 
             colTime="Time", colConc="conc", dose=320, doseUnit="mg", 
             timeUnit="h", concUnit="mg/L")

3.9 NCA의 시각화 plotPK()

NCA에 대한 다양한 시각화는 여러 유용한 정보를 제공해 줄 수 있으나, R로 분석을 시작하는 사람은 다소 어려움을 겪을 수 있다. 이를 비교적 쉽게 가능하게 해 주는 pkr 패키지(Bae and Lee 2018)가 있다. Theoph 자료의 시각화를 아래의 명령어를 통해 수행할 수 있다.

library(pkr)
pkr::plotPK(Theoph, "Subject", "Time", "conc", 
            unitTime = "hr", unitConc = "mg/L", dose = 320)

조금 기다린 후 Output 폴더를 확인해 보면 세개의 그림 파일과 두개의 PDF 파일이 생성된 것을 볼 수 있다. (그림 3.4, 3.5, 3.6) 평균 약동학 파라미터와 그룹 농도-시간 그림 및 개별 대상자의 약동학 파라미터와 개별 농도-시간 그림이 생성된다.

평균 약동학 파라미터와 그룹 농도-시간 그림 (선형)

그림 3.4: 평균 약동학 파라미터와 그룹 농도-시간 그림 (선형)

평균 약동학 파라미터와 그룹 농도-시간 그림 (로그)

그림 3.5: 평균 약동학 파라미터와 그룹 농도-시간 그림 (로그)

평균 약동학 파라미터와 그룹 평균 농도-시간 그림 (로그)

그림 3.6: 평균 약동학 파라미터와 그룹 평균 농도-시간 그림 (로그)

3.10 파라미터의 의미

NCA 시 여러 파라미터가 나오며 약어로 표현하는 경우가 많다. 또한 소프트웨어마다 약어가 상이하기 때문에 자주 그 의미를 찾아볼 필요가 있다. 콘솔창에 다음을 입력하여 의미를 파악할 수 있다.

?ncar::txtNCA()
ncar::RptCfg

ncar::RptCfg의 일부를 첨부한다. (표 3.2) PPTESTCD는 NonCompart 패키지에서 출력하는 파라미터 이름이며, CDISC SDTM PPTESTCD (Parameter Short Name)7와 같은 값이다. WNL 열은 Certara Phoenix WinNonLin에서 구한 파라미터 이름이다.

표 3.2: NonCompart에서 결과로 제시하는 파라미터와 그에 대한 설명 및 Certara Phoenix WinNonLin에서 보고되는 파라미터
PPTESTCD Description (WNL)
b0 Intercept (b0)
TLAG Time Until First Nonzero Conc (Tlag)
MRTEVLST MRT Extravasc to Last Nonzero Conc (MRTlast)
MRTEVIFO MRT Extravasc Infinity Obs (MRTINF_obs)
MRTEVIFP MRT Extravasc Infinity Pred (MRTINF_pred)
VZFO Vz Obs by F (Vz_F_obs)
VZFP Vz Pred by F (Vz_F_pred)
CLFO Total CL Obs by F (Cl_F_obs)
CLFP Total CL Pred by F (Cl_F_pred)
C0 Initial Conc (C0)
AUCPBEO AUC %Back Extrapolation Obs (AUC_.Back_Ext_obs)
AUCPBEP AUC %Back Extrapolation Pred (AUC_.Back_Ext_pred)
CMAX Max Conc (Cmax)
CMAXD Max Conc Norm by Dose (Cmax_D)
TMAX Time of CMAX (Tmax)
CLST Last Nonzero Conc (Clast)
TLST Time of Last Nonzero Conc (Tlast)
CLSTP Last Nonzero Conc Pred (Clast_pred)
LAMZHL Half-Life Lambda z (HL_Lambda_z)
LAMZ Lambda z (Lambda_z)
LAMZLL Lambda z Lower Limit (Lambda_z_lower)
LAMZUL Lambda z Upper Limit (Lambda_z_upper)
LAMZNPT Number of Points for Lambda z (No_points_lambda_z)
CORRXY Correlation Between TimeX and Log ConcY (Corr_XY)
R2 R Squared (Rsq)
R2ADJ R Squared Adjusted (Rsq_adjusted)
AUCLST AUC to Last Nonzero Conc (AUClast)
AUCALL AUC All (AUCall)
AUCIFO AUC Infinity Obs (AUCINF_obs)
AUCIFOD AUC Infinity Obs Norm by Dose (AUCINF_D_obs)
AUCPEO AUC %Extrapolation Obs (AUC_.Extrap_obs)
AUCIFP AUC Infinity Pred (AUCINF_pred)
AUCIFPD AUC Infinity Pred Norm by Dose (AUCINF_D_pred)
AUCPEP AUC %Extrapolation Pred (AUC_.Extrap_pred)
AUMCLST AUMC to Last Nonzero Conc (AUMClast)
AUMCIFO AUMC Infinity Obs (AUMCINF_obs)
AUMCPEO AUMC %Extrapolation Obs (AUMC_.Extrap_obs)
AUMCIFP AUMC Infinity Pred (AUMCINF_pred)
AUMCPEP AUMC % Extrapolation Pred (AUMC_.Extrap_pred)
MRTIVLST MRT Intravasc to Last Nonzero Conc (MRTlast)
MRTIVIFO MRT Intravasc Infinity Obs (MRTINF_obs)
MRTIVIFP MRT Intravasc Infinity Pred (MRTINF_pred)
VZO Vz Obs (Vz_obs)
VZP Vz Pred (Vz_pred)
CLO Total CL Obs (Cl_obs)
CLP Total CL Pred (Cl_pred)
VSSO Vol Dist Steady State Obs (Vss_obs)
VSSP Vol Dist Steady State Pred (Vss_pred)

각 파라미터의 의미를 아래에 풀이하였다.

Cmax (CMAX)

최대 농도. Cmax는 피크 (최대) 농도이다. 이 농도에서 시간은 Tmax라고 지칭한다. 채혈 일정(샘플링 시간 간격)에 따라 실제 체내에서의 최대 농도와 차이가 클수도 크지 않을 수 있으며, 가급적 차이를 줄일 수 있도록 Cmax 부근에서의 채혈은 촘촘히 이뤄져야 한다.

Cmax_D (CMAXD)

투여 용량으로 보정된 Cmax이다. 이는 Cmax를 복용량으로 나눈 값이다. 복용량은 총량이어야 하며, 체중당 투여량의 경우 대상자에게 주어진 투여량으로 환산하게 입력해야 한다. (즉, mg / kg이 아닌 mg).

Tmax (TMAX)

Tmax는 제거속도가 흡수속도와 같은 시점이며 이때의 농도는 최대(Cmax)로 관찰된다. 만일 주어진 데이터에 여러 피크 농도가있는 경우 첫 번째 시점이 선택된다.

Tlag (TLAG)

0이 아닌 첫 번째 농도까지의 시간이다. 지연 시간은 약물 투여와 흡수 시작 사이의 시간 지연을 나타낸다. 빠른 약물 작용이 필요할 때, Tlag는 그 목적을 위한 후보 약물의 선정에 대해 정보를 줄 수 있다. 혈관 외 투여의 경우 첫 번째 관찰 가능한 농도 측정 이전 마지막 관찰시점을 말한다.

Clast (CLST)

농도 측정이 가능한 마지막 시점을 의미한다. AUCinf의 외삽을 위해 사용되는 중요한 정보이다.

Tlast (TLST)

마지막 농도 측정이 된 시간을 의미한다. (Clast에서의 시간).

Rsq (R2)

Rsq는 NCA에 사용 된 선형 회귀에서 상관 계수 (r)의 제곱이다. 즉, 로그 변환 된 관측 농도 대 시간 데이터가 적합 회귀선에 얼마나 가까운지를 알려주는 통계적 적합도 측정값이다. 그러나 R-제곱은 치우침을 결정할 수 없으므로 잔차(residual) 그림도 확인해야할 필요가 있다.

Rsq_adjusted (R2ADJ)

최적 모델을 검색하는 동안 데이터 포인트가 추가되면 적합도를 개선하지 않고 Rsq가 증가 할 수 있다. 조정 R-제곱은 예측 변수의 수(여기서는 데이터 포인트)에 대해 변형된 R- 제곱으로 모집단 R-제곱의 편향되지 않은 추정치로 사용할 수 있다. 일반적으로 Rsq 보다 작다. 가장 적은 수의 데이터 포인트로 조정 R-제곱을 최대화하는 기울기 및 절편이 탐색되고, 가장 적합한 모델로 선택된다. 공식은 아래와 같다.

\[R_{adj}^{2} = 1 - (1 - R^{2}) \cdot \frac{n - 1}{n - 2}\]

Corr_XY (CORRXY)

LAMZ 추정에 사용된 포인트에 대한 시간(X)과 로그 농도(Y) 간의 상관 관계이며, 일반적으로 음수값이다. 상관 관계가 높을수록 불규칙한 농도가 줄어들고 더 잘 맞는다고 생각할 수 있다.

b0 (b0)

로그 농도 대 시간의 회귀선의 절편이다. CLSTP 계산에 사용되지만 정맥주사(i.v. bolus)의 경우 외삽된 C0 (시간 0에서의 농도)에는 사용되지 않는다.

Lambda_z (LAMZ)

양의 값으로서 시간에 대한 자연로그 농도 회귀선의 마지막 기울기를 의미한다. 0 값의 로그 변환은 음의 무한대를 생성하고 회귀를 불가능하게하므로 회귀 전에 모든 0 값을 일시적으로 제거해야 한다. 최종 기울기(마지막 관찰 시점부터 최소 3 개 지점까지)가 자동으로 결정되는 경우 최적 기울기는 최대 R2ADJ에서 허용 한계(기본값은 \(10^{-4}\)) 내에서 가장 긴(가장 많은 관찰값으로 생성 된) 기울기로 결정된다.

No_points_Lambda_z (LAMZNPT)

LAMZ 계산에 사용되는 관찰 농도의 개수이다.

Lambda_z_lower (LAMZLL)

LAMZ 계산에 사용 된 가장 빠른 시점이다.

Lambda_z_upper (LAMZUL)

LAMZ 계산에 사용 된 마지막 시점이다.

HL_Lambda_z (LAMZHL)

최종 반감기. LAMZ는 로그 농도-시간 곡선의 최종 부분에 대한 1 차 속도 상수이며, 최종 반감기는 \(\frac{ln(2)}{LAMZ}\)로 계산된다.

Clast_pred (CLSTP)

선형 회귀는 약동학 분석에서 LAMZ를 계산하는 데 사용되며 적합도에 대한 기울기, 절편 및 R-제곱을 추정한다. 계산은 가중치가 없는 선형 회귀에 의해 수행되며, CLSTP는 회귀에 의해 Tlast에서 예측 된 농도이다. CLSTP은 AUCIFP, AUCPEP, AUMCIFP, AUMCPEP, MRTIVIFP, MRTEVIFP, VZP, VZFP, CLP, CLFP 및 VSSP (P로 끝나는 파라미터) 계산에 사용되며, 이 값을 얻는 공식은 다음과 같다.

\[ C_ {last, pred} = exp(\beta_{0}-\lambda \cdot T_{last}) \]

C0 (C0)

초기 농도. 시간 0에서의 농도, 초기 농도. 처음 두 농도가 양수이고 첫 번째 농도가 두 번째 농도보다 크면 다음과 같이 C0를 계산할 수 있다. 그렇지 않으면 C0는 첫 번째 양수 농도가 된다.

\[ C_ {0} = exp (log (c_ {1})-t_ {1} \frac {log (c_ {2})-log (c_ {1})} {t_ {2}-t_ {1} }) \]

AUClast (AUCLST)

투약 후 마지막 양수의 농도까지의 시간-농도 곡선 아래 영역을 의미한다. NCA에서 가장 널리 사용되는 계산 방법은 선형 사다리꼴 규칙 (linear-up, linear-down) 또는 로그 선형 사다리꼴 규칙(linear-up, log-down). 선형 사다리꼴 방법의 경우 아래의 공식을 사용한다.

\[AUC_{last} = \sum_{i = 2}^{}\frac{(t_{i} - t_{i - 1}) \times (c_{i} - c_{i - 1})}{2}\]

간헐적으로 나오는 0 농도는 AUCLST 및 AUCALL 모두에 포함되지만 AUCLST에서는 후행하는 0 값이 제거되는 반면, AUCALL에서는 제거되지 않는다는 큰 차이가 있다.

AUCall (AUCALL)

마지막 농도가 측정 가능한지 여부에 관계없이 투여 시점부터 마지막 관찰 시점까지의 곡선하 면적을 의미한다. 따라서 AUCALL은 모든 0 값 관찰을 계산에 사용한다.

AUCinf_obs (AUCIFO)

마지막으로 관찰된 농도를 기준으로 투여 시간으로부터 무한대로 외삽된 AUC이며 공식은 아래와 같다.

\[AUC_{inf,obs} = AUC_{last} + \frac{C_{last}}{\lambda_{z}}\]

AUC_%Extrap_obs (AUCPEO)

Tlast에서 무한대로 외삽된 AUC의 백분율이다. AUCIFO에서 외삽된 부분이 과도하게 크다면 약물의 배설 과정에 대한 정보가 일부 누락되었다고 생각할 수 있다.

\[AUC_{\% Extrap,obs} = (1 - \frac{AUC_{last}}{AUC_{inf,obs}}) \times 100\]

AUCinf_D_obs (AUCIFOD)

무한대로 외삽된 관찰된 AUC을 투여 용량으로 나눈 값이다.

\[AUC_{dose,inf,obs} = \frac{AUC_{inf,obs}}{Dose}\]

AUCinf_pred (AUCIFP)

예측된 마지막 농도를 기반으로 투여 시간에서 무한대로 외삽된 AUC. \[AUC_{inf,pred} = AUC_{last} + \frac{C_{last,pred}}{\lambda_{z}}\]

3.11 기술통계 (Descriptive statistics)

R에서는 필요에 따라서 자신만의 함수를 만들 수도 있다. 코드 3.2를 실행하면 desc_tblNCA() 함수를 사용하여 기술통계량을 쉽게 구할 수 있다. (표 3.3 and 3.4) psych 패키지의 describe() 함수를 사용하였으므로 이에 대한 설치를 해야 한다. (install.packages('psych')) (Revelle 2021)

코드 3.2 핵심 기술통계량(자료개수, 평균, 표준편차, 중앙값, 최소값, 최대값)을 수월하게 구하기 위한 사용자 생성 함수의 예

desc_tblNCA <- function(tblNCA){
  psych::describe(tblNCA) %>%
    select(n, mean, sd, median, min, max)
}
desc_tblNCA(Theoph_tblNCA_selected)
desc_tblNCA(Indometh_tblNCA_selected)
표 3.3: 테오필린 경구 투여 후 약동학 파라미터의 기술 통계
n mean sd median min max
Subject* 12 6.500 3.606 6.500 1.000 12.00
CMAX 12 8.759 1.473 8.465 6.440 11.40
TMAX 12 1.788 1.112 1.135 0.630 3.55
AUCLST 12 103.807 23.645 95.407 73.776 148.92
LAMZHL 12 8.181 2.115 7.871 6.287 14.30
표 3.4: 인도메타신 정맥 주입 후 약동학 파라미터의 기술 통계
n mean sd median min max
Subject* 6 3.500 1.8708 3.500 1.000 6.000
CMAX 6 2.077 0.4136 2.040 1.500 2.720
TMAX 6 0.250 0.0000 0.250 0.250 0.250
AUCLST 6 2.485 0.5267 2.675 1.741 2.934
LAMZHL 6 2.439 1.0406 2.127 1.615 4.378

3.12 NCA 후 생물학적 동등성 판별

3.12.1 이론

생물학적동등성시험(bioequivalence test)는 기존 의약품의 특허가 만료된 후, 해당 의약품을 동일하게 개발하여 판매하고자 할 때 수행하는 임상시험이다. 기존 오리지널 의약품(Reference)과 새로 개발한 의약품 즉 시험약(Test)을 교차연구(crossover study)의 형태로 투여한 뒤, 얻어진 혈장약물농도로부터 구한 Cmax와 AUC를 비교하여 평가하게 된다.

2x2 cross-over design이 가장 기본적인 디자인(통상 RT / TR)으로 사용된다. 대상자를 무작위로 두 군으로 나누어 각 군별로 동일 성분의 대조약과 시험약을 각각 투여(제1기 투약)하고 대상자별로 투약 전후 정해진 시간마다 약동학 채혈을 실시한다. 이전에 투여한 약이 모두 배설될 정도로 충분한 기간 경과(보통 반감기의 5배 이상) 후 각 군별로 대조약과 시험약을 바꾸어 각각 투여하고(제2기 투약) 동일하게 약동학 채혈을 실시한다.

시뮬레이션된 농도들로부터 얻어진 Cmax와 AUC를 사용해 자료가 구성되고, NCA에 사용될 자료의 형태는 아래의 표와 같다. SEQ(sequence, 순서군) 혹은 GRP(group), TRT(treatment, 치료), SUBJ(subject, 대상자 구분자), PRD(period, 기)의 자료가 열 형태로 제시되어야 하며 이는 NonCompart에서 key로 사용되기 때문에(key=c('SUBJ', 'GRP', 'PRD', 'TRT')) 유사한 형태로 자료를 만들어야 한다.

SUBJ GRP PRD TRT nTIME TIME CONC
1 RT 1 R 0 0 0
1 RT 1 R 0.25 0.26 511.3
1 RT 1 R 0.5 0.46 678.79
1 RT 1 R
1 RT 2 T 0 0 0
1 RT 2 T 0.25 0.25 487.62
1 RT 2 T 0.5 0.48 769.6
5 TR 1 T 0 0 0
5 TR 1 T 0.25 0.23 382.79
5 TR 1 T 0.5 0.45 477.03
5 TR 1 T
5 TR 2 R 0 0 0
5 TR 2 R 0.25 0.28 596.98
5 TR 2 R 0.5 0.47 832.76
5 TR 2 R

비교평가항목은 검체가 혈액인 경우, 1회 투약 시 AUCt, Cmax, 반복투약 시 AUCτ, Css,max를 주로 사용한다. 다만, 니트로글리세린 설하정과 같이 빠른 약효를 나타내는 제제 등은 Tmax를 비교평가항목으로 추가하기도 한다. 약동학 파라미터는 로그정규분포(log-normal distribution)을 따르고, 대조약과 시험약의 산출된 곡선하 면적(AUC)과 최대 농도 Cmax의 geometric mean ratio가 0.8 ~ 1.25 이내일 때, 약동학적으로 동등하다고 평가하게 된다. 생물학적 동등성을 위한 수학 식은 다음과 같다. (3.1)

\[\begin{equation} \begin{split} 0.8 < & 90\%\ CI\ of\ \frac{GM(AUC_{last, test})}{GM(AUC_{last, ref})} < 1.25 \\ 0.8 < & 90\%\ CI\ of\ \frac{GM(AUC_{last, test})}{GM(AUC_{last, ref})} < 1.25 \end{split} \tag{3.1} \end{equation}\]

\[ Y_{ijk} = \mu + S_{ik} + P_{j} + F_{j,k} + C_{(j-1,k)} + \varepsilon_{ijk} \]

이때에 μ: 전체 평균, Sik: k 번째 sequence에서 i 번째 subject의 효과(랜덤), Pj: j번째 period 의 효과(고정), Fj,k; k 번째 sequence에서 j 번째 period의 제제의 효과(고정), C(j-1,k): k 번째 sequence에서(j-1) 번째 period의 잔류효과(고정), εijk : 오차항으로 정의한다. 이 모델에서 사용하는 가정은 1) Sik ~ N(0,σs2), 2) εijk ~ N(0,σε2), 3) Sik 와 εijk가 독립이라는 세 가지이다. 이때 (μT - μR)에 대한 (1-2α) × 100% 신뢰구간이 ln(0.8), ln(1.25) 안에 들어가면 두 제제가 생물학적으로 동등하다 결론을 내릴 수 있다.

생물학적 동등성을 평가하는데 통계학은 핵심적인 역할을 수행하고 있고, 통계적 분석을 위해서는 컴퓨터 소프트웨어가 필요하다. SAS는 통계 패키지중에서는 가장 방대하고 다양한 분석을 제공하고 전 세계적으로 생물학적동등성의 판단을 위해 표준으로 사용되고 있다. 아래의 SAS 코드로 ANOVA 표와 신뢰구간을 구할 수 있다.

PROC GLM DATA=BE OUTSTAT=STATRES; /* GLM use only complete subjects. */
CLASS SEQ PRD TRT SUBJ;
MODEL LNAUCL = SEQ SUBJ(SEQ) PRD TRT;
RANDOM SUBJ(SEQ)/TEST;
LSMEANS TRT /PDIFF=CONTROL('R') CL ALPHA=0.1 COV OUT=LSOUT;

PROC MIXED DATA=BE; /* MIXED uses all data. */
CLASS SEQ TRT SUBJ PRD;
MODEL LNAUCL = SEQ PRD TRT;
RANDOM SUBJ(SEQ);
ESTIMATE 'T VS R' TRT -1 1 /CL ALPHA=0.1;
ODS OUTPUT ESTIMATES=ESTIM COVPARMS=COVPAR;

그러나 SAS를 사용하는데 몇가지 어려움이 있다. SAS 설치하고 입력자료를 불러오는 작업이 다소 어렵고, 과정이 복잡하며 큰 유지 비용이 든다. 특히 약동학 분석 초보자나 통계학 비전공자가 사용하기 어려웠다.

3.12.2 BE R 패키지를 사용한 생물학적 동등성 판정

2x2의 생물학적 동등성을 판정하기 위한 가장 간단하고 손쉬운 방법은 Chow와 Liu의 책의 내용(Chow and Liu 2008)을 충실히 반영한 BE 패키지(Bae 2021a)를 사용하는 것이다. 위에서 NCA 관련 패키지를 설치하였듯 BE 패키지를 아래 명령어를 사용하여 설치 및 불러오기 할 수 있다.

install.packages("BE")
library(BE)

BE 패키지 중 핵심이 되는 함수는 be2x2() 이다. 현재로서는 2x2 디자인의 간단한 임상시험 디자인만을 지원하고 있으며 (그림 3.7) 이외의 디자인은 sasLM 패키지(Bae 2021d)를 사용하여 분석해야 한다.

전형적인 2x2 설계

그림 3.7: 전형적인 2x2 설계

BE 패키지에 내장되어 있는 자료인 NCAResult4BE를 사용하여 예제를 구성하였다. (표 3.5) 33명의 대상자에 대해 2x2 교차설계 임상시험의 약동학 파라미터 AUClast, Cmax, Tmax 자료가 정리되어 있다. 33명의 대상자의 개인별 농도-시간 그래프는 그림 3.8에 나타내었다.

표 3.5: 생물학적 동등성 평가를 위한 예제 데이터셋 (BE 패키지에 내장된 NCAResult4BE의 첫 6개 관찰값)
SUBJ GRP PRD TRT AUClast Cmax Tmax
1 RT 1 R 5019 1043.1 1.04
1 RT 2 T 6738 894.2 1.03
2 TR 1 T 4374 447.3 1.01
2 TR 2 R 6164 783.9 1.98
4 TR 1 T 5593 824.4 1.97
4 TR 2 R 5958 646.3 0.97
생물학적 동등성 평가를 위한 예제 데이터셋의 농도-시간 곡선 (N=33)

그림 3.8: 생물학적 동등성 평가를 위한 예제 데이터셋의 농도-시간 곡선 (N=33)

아래 코드에서 be2x2() 함수의 인자인 NCAResult4BE가 처리 되어 생물학적동등성 판단을 위한 ANOVA 표, 변이 (variability), Least square mean (LSM), geometric mean ratio (GMR)의 90% 신뢰구간, 샘플 수의 계산이 수행된다. (그림 3.9) 본 자료로 계산한 AUClast는 생물학적 동등성 기준을 만족하고 있음을 알 수 있다.

be2x2(NCAResult4BE, c("AUClast", "Cmax", "Tmax"))
BE R 패키지에 의해 수행된 생물학적 동등성 통계분석 결과.

그림 3.9: BE R 패키지에 의해 수행된 생물학적 동등성 통계분석 결과.

위 과정으로 얻어진 계산값은 가장 정확하게 생물학적 동등성을 평가하고 있어 표준으로 사용되는 SAS 소프트웨어 결과값과 완전히 동일하였다.

표 3.6: R BE 패키지와 SAS의 PROC GLM, PROC MIXED 계산 결과값의 비교
Parameter Analysis LL PE UL
AUC R BE 패키지 0.88944 0.95408 1.02341
SAS: PROC GLM 0.88944 0.95408 1.02341
SAS: PROC MIXED 0.88944 0.95408 1.02341
C R BE 패키지 0.90136 0.97984 1.06515
SAS: PROC GLM 0.90136 0.97984 1.06515
SAS: PROC MIXED 0.90136 0.97984 1.06515

3.13 웹브라우저를 통한 NCA 및 생물학적동등성 판정

웹브라우저를 통해 간단히 NCA를 할 수 있는 앱이 웹 기반으로 개발되어 R을 설치할 필요없이 사용할 수 있다. (그림 3.10) https://www.pipetapps.com/project/pkrshiny/ shiny-be는 NCA 및 생물학적동등성 분석을 웹브라우저에서 할 수 있는 응용 소프트웨어로 https://www.pipetapps.com/project/shiny-be/에서 서비스 하고 있다. (그림 3.11)

NCA용 앱, pkrshiny 접속 화면

그림 3.10: NCA용 앱, pkrshiny 접속 화면

NCA 및 BE용 앱, shiny-be 접속 화면

그림 3.11: NCA 및 BE용 앱, shiny-be 접속 화면

3.14 맺음말

이상으로 비구획분석 자료해석을 위한 R 패키지에 대해 알아보았다. 정확한 비구획분석은 모든 약동학 자료해석의 기본이 되며, R을 통한 자료의 처리와 분석은 오류를 줄이고, 시간과 비용을 을 단축하는 등 큰 잇점이 있다. 처음에는 R을 사용하는 방법이 다소 생소할 수 있으나 약동학을 공부하는 사람이라면 반드시 접하게 되는 소프트웨어 이고, 약동학 관련 R 패키지에 대해 지속적인 연구와 개발이 이뤄지고 있으므로 연구자들은 이에 대해 꾸준한 공부를 지속해야 할 것이다.

참고문헌

———. 2021a. BE: Bioequivalence Study Data Analysis. https://cran.r-project.org/package=BE.
———. 2021b. Ncar: Noncompartmental Analysis for Pharmacokinetic Report. https://cran.r-project.org/package=ncar.
———. 2021c. NonCompart: Noncompartmental Analysis for Pharmacokinetic Data. https://cran.r-project.org/package=NonCompart.
———. 2021d. sasLM: SAS Linear Model. https://cran.r-project.org/package=sasLM.
Bae, Kyun-Seop, and Jee Eun Lee. 2018. Pkr: Pharmacokinetics in r. https://cran.r-project.org/package=pkr.
Chow, S. C., and J. Liu. 2008. Design and Analysis of Bioavailability and Bioequivalence Studies. Chapman & Hall/CRC Biostatistics Series. CRC Press. https://books.google.co.kr/books?id=KtKJFGJeV3MC.
Noe, Dennis A. 2020. “Parameter Estimation and Reporting in Noncompartmental Analysis of Clinical Pharmacokinetic Data.” Clinical Pharmacology in Drug Development 9: S5–35.
Revelle, William. 2021. Psych: Procedures for Psychological, Psychometric, and Personality Research. https://personality-project.org/r/psych-manual.pdf.
Spinu, Vitalie, Garrett Grolemund, and Hadley Wickham. 2021. Lubridate: Make Dealing with Dates a Little Easier. https://CRAN.R-project.org/package=lubridate.
Wickham, Hadley. 2016. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.
———. 2021. Tidyr: Tidy Messy Data. https://CRAN.R-project.org/package=tidyr.
Wickham, Hadley, and Jennifer Bryan. 2019. Readxl: Read Excel Files. https://CRAN.R-project.org/package=readxl.
Wickham, Hadley, Winston Chang, Lionel Henry, Thomas Lin Pedersen, Kohske Takahashi, Claus Wilke, Kara Woo, Hiroaki Yutani, and Dewey Dunnington. 2021. Ggplot2: Create Elegant Data Visualisations Using the Grammar of Graphics. https://CRAN.R-project.org/package=ggplot2.
Wickham, Hadley, Romain Francois, Lionel Henry, and Kirill Müller. 2021. Dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr.
Wickham, Hadley, and Jim Hester. 2020. Readr: Read Rectangular Text Data. https://CRAN.R-project.org/package=readr.

  1. 약동학 데이터를 분석하여 PK 파라미터를 찾는 업무를 하지 않는 독자들은 이 장을 읽지 않고 넘어가도 좋습니다.↩︎

  2. 임상시험에 관련된 국제표준을 개발하는 표준화 기구로, 2010년부터 미국 FDA와 유럽 EMA는 전자문서(eCTD)로 허가를 신청할 경우 CDISC에서 제정한 표준을 이용한 임상시험 데이터 제출만 허용하고 있다.↩︎

  3. 윈도의 외의 환경에 대한 것은 별도의 공간 https://github.com/pipetcpt/pharmapk/discussions 에 정리되어 있다.↩︎

  4. https://groups.google.com/a/pagk.or.kr/g/list/c/VGy3lhWig7o↩︎

  5. 다음과 같이 CDISC note에 표시되어 있다. ‘Short name of the pharmacokinetic parameter. PPTESTCD cannot contain characters other than letters, numbers, or underscores. Examples: “AUCALL”, “TMAX”, “CMAX”.’↩︎