3 R을 사용한 비구획분석

3.1 이 장에서는

NonCompart (Bae 2020)은 비구획 분석을 R을 통해 쉽고 빠르게 (매우 빠르게) 행할 수 있는 패키지입니다. 약동학 교재의 내용을 충실히 반영하였습니다. (Gabrielsson 2016; Rowland 2011) 이에 대해 좀더 자세히 알아보겠습니다.

NonCompartDESCRIPTION 파일을 보면 다음과 같이 설명하고 있습니다.

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).

library(tidyverse)
library(NonCompart)

3.2 NonCompart 사용법

tblNCA의 사용법은 다음과 같습니다.

## function (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 = "") 
## NULL

concData는 데이터셋 이름을 설정합니다. 참고로 tibble 형식은 지원하지 않기 때문에 readr::read_csv()를 통해 자료를 불러왔다면 as.data.frame() 함수 등을 사용하여 data.frame 형식으로 변환하여야 합니다. key는 subject ID의 컬럼명 혹은 treatment code의 컬럼명 (교차시험 등에서)을 벡터 형태로 지정할 수 있습니다. 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를 수동으로 interactive하게 고를 수 있게됩니다.

이제 약동학 파라미터를 산출하기 위해서는 아래와 같이 하면 됩니다. 우선 Theophylline 의 약동학 파라미터를 구해보겠습니다.

Theoph_nca <- tblNCA(Theoph, "Subject", "Time", "conc", 
                     dose=320, concUnit="mg/L")
Theoph_nca
##       ID   b0                 CMAX    CMAXD        TMAX   TLAG CLST  
##  [1,] "1"  "2.36878509420585" "10.5"  "0.0328125"  "1.12" "0"  "3.28"
##  [2,] "2"  "2.41123733696293" "8.33"  "0.02603125" "1.92" "0"  "0.9" 
##  [3,] "3"  "2.52971150145858" "8.2"   "0.025625"   "1.02" "0"  "1.05"
##  [4,] "4"  "2.59275546723663" "8.6"   "0.026875"   "1.07" "0"  "1.15"
##  [5,] "5"  "2.55109229061238" "11.4"  "0.035625"   "1"    "0"  "1.57"
##  [6,] "6"  "2.0334043955261"  "6.44"  "0.020125"   "1.15" "0"  "0.92"
##  [7,] "7"  "2.28854976005424" "7.09"  "0.02215625" "3.48" "0"  "1.15"
##  [8,] "8"  "2.17040271754659" "7.56"  "0.023625"   "2.02" "0"  "1.25"
##  [9,] "9"  "2.12464810390587" "9.03"  "0.02821875" "0.63" "0"  "1.12"
## [10,] "10" "2.65770546248091" "10.21" "0.03190625" "3.55" "0"  "2.42"
## [11,] "11" "2.1475943307927"  "8"     "0.025"      "0.98" "0"  "0.86"
## [12,] "12" "2.82449347826545" "9.75"  "0.03046875" "3.52" "0"  "1.17"
##       CLSTP               TLST    LAMZHL             LAMZ                
##  [1,] "3.28014647414312"  "24.37" "14.304377571097"  "0.0484569969657749"
##  [2,] "0.888639849106919" "24.3"  "6.65934156262252" "0.104086443688432" 
##  [3,] "1.05509670837553"  "24.17" "6.76608737718236" "0.102444314109434" 
##  [4,] "1.15642160174997"  "24.65" "6.98124666099893" "0.0992870205306231"
##  [5,] "1.55569511595616"  "24.35" "8.0022640410078"  "0.0866188839818201"
##  [6,] "0.941271173708175" "23.85" "7.89499786796582" "0.0877957400561702"
##  [7,] "1.16071921229933"  "24.22" "7.84666826130148" "0.0883364961379133"
##  [8,] "1.22852675835656"  "24.12" "8.51003788342506" "0.0814505399453019"
##  [9,] "1.11648311706515"  "24.43" "8.40599880716182" "0.0824586341803179"
## [10,] "2.41369227401111"  "23.7"  "9.24691582297898" "0.0749598237757766"
## [11,] "0.859806606884089" "24.08" "7.26123651504339" "0.0954585598642772"
## [12,] "1.17553904959565"  "24.15" "6.28650816367189" "0.110259489451627" 
##       LAMZLL LAMZUL  LAMZNPT CORRXY               R2                 
##  [1,] "9.05" "24.37" "3"     "-0.99999986483748"  "0.999999729674979"
##  [2,] "7.03" "24.3"  "4"     "-0.998596709529913" "0.99719538828397" 
##  [3,] "9"    "24.17" "3"     "-0.999662423945811" "0.999324961849213"
##  [4,] "9.02" "24.65" "3"     "-0.999461923749821" "0.998924137025692"
##  [5,] "7.02" "24.35" "4"     "-0.999323363372814" "0.998647184582752"
##  [6,] "2.03" "23.85" "7"     "-0.999120281624298" "0.998241337153017"
##  [7,] "6.98" "24.22" "4"     "-0.999334862622512" "0.998670167652754"
##  [8,] "3.53" "24.12" "6"     "-0.995496052943785" "0.991012391426654"
##  [9,] "8.8"  "24.43" "3"     "-0.99972179371205"  "0.999443664822839"
## [10,] "9.38" "23.7"  "3"     "-0.999754311749369" "0.999508683861454"
## [11,] "9.03" "24.08" "3"     "-0.999999127979356" "0.999998255959473"
## [12,] "9.03" "24.15" "3"     "-0.999698355328196" "0.9993968016459"  
##       R2ADJ               AUCLST      AUCALL      AUCIFO            
##  [1,] "0.999999459349959" "148.92305" "148.92305" "216.611933038226"
##  [2,] "0.995793082425955" "91.5268"   "91.5268"   "100.173459143183"
##  [3,] "0.998649923698427" "99.2865"   "99.2865"   "109.535970740547"
##  [4,] "0.997848274051385" "106.7963"  "106.7963"  "118.378881427603"
##  [5,] "0.997970776874129" "121.2944"  "121.2944"  "139.419777837118"
##  [6,] "0.99788960458362"  "73.77555"  "73.77555"  "84.2544183301878"
##  [7,] "0.998005251479131" "90.7534"   "90.7534"   "103.771801796293"
##  [8,] "0.988765489283318" "88.55995"  "88.55995"  "103.906686815243"
##  [9,] "0.998887329645677" "86.32615"  "86.32615"  "99.9087179279482"
## [10,] "0.999017367722909" "138.3681"  "138.3681"  "170.652060635217"
## [11,] "0.999996511918946" "80.0936"   "80.0936"   "89.1027449234385"
## [12,] "0.998793603291801" "119.9775"  "119.9775"  "130.588831558118"
##       AUCIFOD             AUCIFP             AUCIFPD            
##  [1,] "0.676912290744456" "216.614955803818" "0.67692173688693" 
##  [2,] "0.313042059822447" "100.064317640308" "0.312700992625963"
##  [3,] "0.342299908564208" "109.585721753278" "0.342455380478994"
##  [4,] "0.369934004461258" "118.44355857992"  "0.370136120562249"
##  [5,] "0.435686805740995" "139.254630430615" "0.435170720095671"
##  [6,] "0.263295057281837" "84.4966985785753" "0.264052183058048"
##  [7,] "0.324286880613414" "103.893147024686" "0.324666084452144"
##  [8,] "0.324708396297635" "103.643051464786" "0.323884535827455"
##  [9,] "0.312214743524838" "99.8660676588793" "0.312081461433998"
## [10,] "0.533287689485054" "170.567912545332" "0.533024726704162"
## [11,] "0.278446077885745" "89.1007189855217" "0.278439746829755"
## [12,] "0.408090098619118" "130.639068046815" "0.408247087646298"
##       AUCPEO             AUCPEP             AUMCLST        AUMCIFO           
##  [1,] "31.2489169404534" "31.2498763313113" "1459.0711035" "4505.53481941065"
##  [2,] "8.63168669340252" "8.53203003991598" "706.586566"   "999.772287999786"
##  [3,] "9.3571734209797"  "9.39832451573008" "803.18587"    "1150.96476871455"
##  [4,] "9.7843308603032"  "9.83359392402986" "901.0842105"  "1303.25240140958"
##  [5,] "13.0005786254328" "12.8974026752838" "1017.1143165" "1667.72161189007"
##  [6,] "12.4371736674055" "12.688245527848"  "609.1523875"  "978.428485741731"
##  [7,] "12.5452209279821" "12.6473664538854" "782.41986"    "1245.09840831465"
##  [8,] "14.7697297311878" "14.5529307094073" "739.534598"   "1298.11575468474"
##  [9,] "13.5949777052926" "13.5580763078894" "705.2296255"  "1201.77153812025"
## [10,] "18.9180022292417" "18.8780011813617" "1278.180042"  "2473.99342735889"
## [11,] "10.1109622730249" "10.1089184106194" "617.2422125"  "928.559971386069"
## [12,] "8.12575733430562" "8.16108703637935" "977.8807235"  "1330.38400236898"
##       AUMCIFP            AUMCPEO            AUMCPEP           
##  [1,] "4505.67086458209" "67.6160286851172" "67.6170064935417"
##  [2,] "996.071583509104" "29.3252499112927" "29.0626720309864"
##  [3,] "1152.65289026304" "30.2162940315685" "30.318495985664" 
##  [4,] "1305.4981091996"  "30.8588106551423" "30.9777467963968"
##  [5,] "1661.79367436228" "39.011744571249"  "38.7941877387202"
##  [6,] "986.966459689532" "37.7417566662308" "38.280335514986" 
##  [7,] "1249.41106012833" "37.1599983764277" "37.376906210544" 
##  [8,] "1288.52011616077" "43.0301500208197" "42.605894256157" 
##  [9,] "1200.2123597462"  "41.3174964516894" "41.2412628670872"
## [10,] "2470.87654175199" "48.3353501320931" "48.2701777931124"
## [11,] "928.489963582081" "33.5269415524517" "33.5219295081337"
## [12,] "1332.05283411623" "26.4963558071417" "26.5884431567018"
##       MRTEVLST           MRTEVIFO           MRTEVIFP          
##  [1,] "9.79748335465867" "20.8000305256292" "20.8003683211179"
##  [2,] "7.71999639449866" "9.98041094468705" "9.95431345556755"
##  [3,] "8.08957783787323" "10.5076420187191" "10.5182762117325"
##  [4,] "8.43741038313125" "11.0091630001303" "11.0221115006327"
##  [5,] "8.38550103302378" "11.9618725389051" "11.9334895308224"
##  [6,] "8.25683288704727" "11.612785479182"  "11.6805328053348"
##  [7,] "8.62138344128154" "11.9984271908357" "12.0259237101698"
##  [8,] "8.3506663903943"  "12.4930915850769" "12.4322865638375"
##  [9,] "8.1693626496722"  "12.0286954236259" "12.0182198807093"
## [10,] "9.23753409926132" "14.4972959491374" "14.4861744795951"
## [11,] "7.70651103833515" "10.4212274513421" "10.4206786898426"
## [12,] "8.15053425433936" "10.1875787270284" "10.1964355229393"
##       VZFO               VZFP               CLFO              
##  [1,] "30.4867482345887" "30.4863228055447" "1.47729626669981"
##  [2,] "30.6904415765423" "30.7239160557228" "3.19445891892989"
##  [3,] "28.5170999496524" "28.5041534217657" "2.92141474473231"
##  [4,] "27.2259641330176" "27.2110971545992" "2.70318485984093"
##  [5,] "26.4979946505636" "26.5294196385914" "2.29522672438806"
##  [6,] "43.2597344953234" "43.135694392041"  "3.79802040465035"
##  [7,] "34.9084408430805" "34.8676684452056" "3.08368934971535"
##  [8,] "37.8105081118408" "37.9066861615621" "3.07968630131565"
##  [9,] "38.8427934436931" "38.8593822173436" "3.20292369511514"
## [10,] "25.0155401378403" "25.0278813214113" "1.87516048038837"
## [11,] "37.6221852019531" "37.6230406407462" "3.59135961832556"
## [12,] "22.2242935639128" "22.2157473419508" "2.4504392617801" 
##       CLFP              
##  [1,] "1.47727565168591"
##  [2,] "3.19794315842211"
##  [3,] "2.92008844656286"
##  [4,] "2.70170876184947"
##  [5,] "2.29794872178016"
##  [6,] "3.78713021198604"
##  [7,] "3.08008765894795"
##  [8,] "3.08752005539633"
##  [9,] "3.20429158273309"
## [10,] "1.87608557333405"
## [11,] "3.59144127728081"
## [12,] "2.44949695970983"
## attr(,"units")
##  [1] ""          ""          "mg/L"      "mg/L/mg"   "h"         "h"        
##  [7] "mg/L"      "mg/L"      "h"         "h"         "/h"        "h"        
## [13] "h"         ""          ""          ""          ""          "h*mg/L"   
## [19] "h*mg/L"    "h*mg/L"    "h*mg/L/mg" "h*mg/L"    "h*mg/L/mg" "%"        
## [25] "%"         "h2*mg/L"   "h2*mg/L"   "h2*mg/L"   "%"         "%"        
## [31] "h"         "h"         "h"         "L"         "L"         "L/h"      
## [37] "L/h"

여기서 dose=320으로 되었다는 것은 아미노필린 400mg 투여시 테오필린 320mg이 경구로 투여되었음을 의미합니다.

이는 문자(character)로 구성된 matrix로 구성된 결과물과 단위 정보가 담긴 attribute를 포함하고 있습니다.

다음으로 Indomethacin 의 약동학 파라미터를 구해보겠습니다. 이는 IV bolus 이므로 adm="bolus" 인자를 정의해야 합니다.

Indometh_nca <- NonCompart::tblNCA(Indometh, "Subject", "time", "conc", 
                       dose=25, adm="Bolus", dur=0.5, concUnit="mg/L", R2ADJ=0.5)

3.3 구간 NCA

  1. iAUC
    • 일부구간에 대한 AUC를 구하기 위한 구간설정 옵션입니다.
    • “Name”, “Start”, “End” 3개의 컬럼으로 구성된 데이터 프레임으로 설정해야 합니다.

일부 구간의 AUC를 구하는 방법은 조금 더 복잡하므로 자세히 알아봅시다. 예를 들어 0~12시간까지의 AUC, 0~24시간까지의 AUC를 구하고자 한다면 다음과 같이 하면 됩니다. 먼저 구하고자 하는 구간에 대한 정보를 갖는 변수를 아래와같이 생성합니다.

iAUC <- data.frame(Name=c("AUC[0-12h]","AUC[0-24h]"), Start=c(0,0), End=c(12,24))
iAUC
##         Name Start End
## 1 AUC[0-12h]     0  12
## 2 AUC[0-24h]     0  24
    Name Start End

1 AUC[0-12h] 0 12 2 AUC[0-24h] 0 24

이제 iAUC 옵션을 이용해서 이를 구합니다.

# tblNCA(Theoph, "Subject", "Time", "conc", dose=320, iAUC=iAUC)

맨 마지막 파라미터로 AUC[0-12h], AUC[0-24h]가 추가되었음을 알 수 있습니다.

개인별 일부 구간의 AUC를 구하는 방법은 아래와 같다. 예를 들어 0~12시간까지의 AUC, 0~24시간까지의 AUC를 구하고자 한다면 다음과 같이 하면 된다.

iAUC = data.frame(Name=c("AUC[0-12h]","AUC[0-24h]"), Start=c(0,0), End=c(12,24)) ; iAUC
    Name Start End

1 AUC[0-12h] 0 12 2 AUC[0-24h] 0 24

#IntAUC
#IntAUC(Theoph[Theoph$Subject==1,"Time"], Theoph[Theoph$Subject==1, "conc"], Dose=320, iAUC=iAUC)

3.4 함수 살펴보기

3.4.1 AUC

AUC와 AUMC를 ‘Linear trapezoidal method’ 혹은 ’linear-up and log-down method’의 두가지 방식으로 계산하게 됩니다.

AUC(Theoph[Theoph$Subject==1, "Time"], Theoph[Theoph$Subject==1, "conc"])
##            [,1]        [,2]
##  [1,]   0.00000    0.000000
##  [2,]   0.44750    0.088750
##  [3,]   1.95310    0.801534
##  [4,]   6.64735    5.065382
##  [5,]  15.71935   19.138321
##  [6,]  32.13535   66.198241
##  [7,]  42.97695  114.461665
##  [8,]  58.25290  206.281512
##  [9,]  72.75650  322.298798
## [10,]  92.45055  528.521903
## [11,] 148.92305 1459.071104
AUC(Theoph[Theoph$Subject==1, "Time"], Theoph[Theoph$Subject==1, "conc"], down="Log")
##            [,1]        [,2]
##  [1,]   0.00000    0.000000
##  [2,]   0.44750    0.088750
##  [3,]   1.95310    0.801534
##  [4,]   6.64735    5.065382
##  [5,]  15.71410   19.243482
##  [6,]  32.11090   66.830600
##  [7,]  42.95189  115.151380
##  [8,]  58.21173  207.426110
##  [9,]  72.70744  323.774418
## [10,]  92.36544  531.108538
## [11,] 147.23475 1499.129085

3.5 긴 형식으로 변환하면서 단위 추가하기

NonCompart 패키지의 tblNCA()함수를 사용해서 비구획분석 결과를 내면 attr로 names와 units를 등일 갖게 됩니다. 이를 long format의 tidy data로 변환하는 방법은 다음과 같습니다.

left_join(as_tibble(Theoph_nca) %>% 
            gather(PPTESTCD, PPORRES, -Subject),
          tibble(PPTESTCD = attributes(Theoph_nca)$names,
                 UNIT = attributes(Theoph_nca)$units)) %>% 
  arrange(PPTESTCD)
## Error: Can't subset columns that don't exist.
## x Column `Subject` doesn't exist.

참고문헌

Bae, Kyun-Seop. 2020. NonCompart: Noncompartmental Analysis for Pharmacokinetic Data. https://CRAN.R-project.org/package=NonCompart.

Gabrielsson, Johan. 2016. Pharmacokinetic and Pharmacodynamic Data Analysis : Concepts and Applications. Stockholm: Apotekarsocieteten.

Rowland, Malcolm. 2011. Clinical Pharmacokinetics and Pharmacodynamics : Concepts and Applications. Philadelphia: Wolters Kluwer Health/Lippincott William & Wilkins.