-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path03.Rmd
151 lines (112 loc) · 5.97 KB
/
03.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# R을 사용한 비구획분석 {#noncompart}
## 이 장에서는 {#summary-noncompart}
`NonCompart` [@R-NonCompart]은 비구획 분석을 R을 통해 쉽고 빠르게 (매우 빠르게) 행할 수 있는 패키지입니다.
약동학 교재의 내용을 충실히 반영하였습니다. [@gab; @tozer]
이에 대해 좀더 자세히 알아보겠습니다.
`NonCompart`의 `DESCRIPTION` 파일을 보면 다음과 같이 설명하고 있습니다.
> `r packageDescription('NonCompart')$Description`
```{r}
library(tidyverse)
library(NonCompart)
```
## NonCompart 사용법 {#how-to-use}
tblNCA의 사용법은 다음과 같습니다.
```{r echo = FALSE}
args(NonCompart::tblNCA)
```
<!---
```r
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.7, MW = 0) # args(NonCompart::tblNCA)
```
--->
`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`입니다.
- `Linear`와 `Log` 중 선택 가능하며 각각 linear trapezoidal method와 linear-up and log-down method를 의미합니다.
1. `dose`
- 투여량에 대한 설정입니다. 단위에 주의해야 합니다. 벡터값을 줌으로서 각 대상자별 용량을 다르게 할 수 있습니다.
1. `adm`
- 투여경로에 대한 설정, 기본값은 "Extravascular"으로 경구 투여 등을 의미합니다.
- Bolus, Infusion, Extravascular 중에서 선택 가능하다.
1. `dur`
- 주입하는 기간(infusion duration)을 설정합니다. 기본값은 0입니다.
1. `R2ADJ`
- `R2ADJ` 값이 설정값 이하인 경우 `DetSlope()`함수에 의해 terminal slope를 수동으로 interactive하게 고를 수 있게됩니다.
이제 약동학 파라미터를 산출하기 위해서는 아래와 같이 하면 됩니다.
우선 Theophylline 의 약동학 파라미터를 구해보겠습니다.
```{r}
Theoph_nca <- tblNCA(Theoph, "Subject", "Time", "conc",
dose=320, concUnit="mg/L")
Theoph_nca
```
여기서 `dose=320`으로 되었다는 것은 아미노필린 400mg 투여시 테오필린 320mg이 경구로 투여되었음을 의미합니다.
```{r include = FALSE}
save(Theoph_nca, file = 'data/Theoph_nca.Rdata')
```
이는 문자(character)로 구성된 matrix로 구성된 결과물과 단위 정보가 담긴 attribute를 포함하고 있습니다.
다음으로 Indomethacin 의 약동학 파라미터를 구해보겠습니다.
이는 IV bolus 이므로 `adm="bolus"` 인자를 정의해야 합니다.
```{r}
Indometh_nca <- NonCompart::tblNCA(Indometh, "Subject", "time", "conc",
dose=25, adm="Bolus", dur=0.5, concUnit="mg/L", R2ADJ=0.5)
```
```{r, include = FALSE, evel = FALSE}
NonCompartdb <- tools::Rd_db('NonCompart')
tblNcaExample <- sapply(NonCompartdb, tools:::.Rd_get_metadata, 'usage')$tblNCA.Rd %>% .[-1]
paste(tblNcaExample, collapse = '\\n')
```
## 구간 NCA {#interval-NCA}
1. iAUC
- 일부구간에 대한 AUC를 구하기 위한 구간설정 옵션입니다.
- "Name", "Start", "End" 3개의 컬럼으로 구성된 데이터 프레임으로 설정해야 합니다.
일부 구간의 AUC를 구하는 방법은 조금 더 복잡하므로 자세히 알아봅시다.
예를 들어 0~12시간까지의 AUC, 0~24시간까지의 AUC를 구하고자 한다면 다음과 같이 하면 됩니다.
먼저 구하고자 하는 구간에 대한 정보를 갖는 변수를 아래와같이 생성합니다.
```{r}
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
이제 iAUC 옵션을 이용해서 이를 구합니다.
```r
# tblNCA(Theoph, "Subject", "Time", "conc", dose=320, iAUC=iAUC)
```
맨 마지막 파라미터로 AUC[0-12h], AUC[0-24h]가 추가되었음을 알 수 있습니다.
개인별 일부 구간의 AUC를 구하는 방법은 아래와 같다.
예를 들어 0~12시간까지의 AUC, 0~24시간까지의 AUC를 구하고자 한다면 다음과 같이 하면 된다.
```r
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
```r
#IntAUC
#IntAUC(Theoph[Theoph$Subject==1,"Time"], Theoph[Theoph$Subject==1, "conc"], Dose=320, iAUC=iAUC)
```
## 함수 살펴보기 {#functions}
<!--
NonCompart 패키지 내의 여러가지 함수를 살펴보겠습니다. `r paste0(paste0(ls('package:NonCompart'), '()'), collapse = ', ')`라는 함수가 있습니다.
-->
### AUC
AUC와 AUMC를 'Linear trapezoidal method' 혹은 'linear-up and log-down method'의 두가지 방식으로 계산하게 됩니다.
```{r}
AUC(Theoph[Theoph$Subject==1, "Time"], Theoph[Theoph$Subject==1, "conc"])
AUC(Theoph[Theoph$Subject==1, "Time"], Theoph[Theoph$Subject==1, "conc"], down="Log")
```
## 긴 형식으로 변환하면서 단위 추가하기 {#long-format}
NonCompart 패키지의 tblNCA()함수를 사용해서 비구획분석 결과를 내면 attr로 names와 units를 등일 갖게 됩니다. 이를 long format의 tidy data로 변환하는 방법은 다음과 같습니다.
```{r}
left_join(as_tibble(Theoph_nca) %>%
gather(PPTESTCD, PPORRES, -Subject),
tibble(PPTESTCD = attributes(Theoph_nca)$names,
UNIT = attributes(Theoph_nca)$units)) %>%
arrange(PPTESTCD)
```