-
Notifications
You must be signed in to change notification settings - Fork 2
/
README.Rmd
163 lines (107 loc) · 3.34 KB
/
README.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
151
152
153
154
155
156
157
158
159
160
161
162
163
---
title: ""
output: github_document
---
# lastdose <a href='https:/metrumresearchgroup.github.io/lastdose'><img src='man/figures/logo.png' align="right" /></a>
<!-- badges: start -->
[![R build status](https://github-drone.metrumrg.com/api/badges/metrumresearchgroup/lastdose/status.svg)](https://github-drone.metrumrg.com/metrumresearchgroup/lastdose)
<!-- badges: end -->
## Overview
Calculate the time since and amount of the last dose. Additional (`ADDL`)
dosing records are expanded and included in the calculation.
```{r,include=FALSE}
knitr::opts_chunk$set(comment = '.', message=FALSE, warning = FALSE,
fig.path="man/figures/readme-")
```
## Installation
```{r, eval=FALSE}
remotes::install_github("metrumresearchgroup/lastdose")
```
```{r,message=FALSE}
library(lastdose)
library(tidyverse)
theme_set(theme_bw())
```
## A PK profile
We'll use this PK profile as an example
```{r}
file <- system.file("csv/data1.csv", package = "lastdose")
df <- read.csv(file)
head(df)
```
The dosing runs over 12 weeks and there are 3 epochs, with 3 different doses,
most of which are scheduled into the future via `ADDL`.
```{r}
df %>% filter(EVID==1) %>% count(TIME,AMT,ADDL)
ggplot(df, aes(TIME,DV)) + geom_line() + theme_bw()
```
## Calculate TAD, TAFD, and LDOS
Use the `lastdose()` function
```{r}
df <- lastdose(df)
head(df)
```
Now we have `TAD`, `TAFD`, and `LDOS` in our data set.
## Plot last dose versus time
```{r}
ggplot(df, aes(TIME,LDOS)) + geom_line()
```
## Plot time after dose versus time
```{r}
ggplot(df, aes(TIME,TAD)) + geom_line()
```
Observations before doses at the same time by default
```{r}
ggplot(df, aes(TIME,TAD)) + geom_line() +
scale_x_continuous(breaks = seq(0,72,4), limits=c(0,72)) +
scale_y_continuous(breaks = seq(0,24,4), limits=c(0,24))
```
You can also make doses "happen" first
```{r}
dd <- lastdose(df, addl_ties = "dose_first")
ggplot(dd, aes(TIME,TAD)) + geom_line() +
scale_x_continuous(breaks = seq(0,72,4), limits=c(0,72)) +
scale_y_continuous(breaks = seq(0,24,4), limits=c(0,24))
```
## All doses explicit in the data set
```{r}
df2 <- mrgsolve::realize_addl(df) %>% lastdose()
ggplot(df2, aes(TIME,TAD)) + geom_line() +
scale_x_continuous(breaks = seq(0,72,4), limits = c(0,72)) +
scale_y_continuous(breaks = seq(0,24,4))
```
## How does it perform on bigger data?
Same setup as the previous profile, but more individuals.
We have 500K rows and 1000 individuals
```{r}
file <- system.file("csv/data_big.RDS", package = "lastdose")
big <- readRDS(file)
dim(big)
length(unique(big$ID))
```
Timing result
```{r}
system.time(x2 <- lastdose(big))
```
## Compare against the single profile
```{R}
system.time(x1 <- lastdose(df))
x3 <- filter(x2, big[["ID"]]==1) %>% as.data.frame()
all.equal(x1,x3)
```
## Observations prior to the first dose
When non-dose records happen prior to the first dose, lastdose calculates
the time before the first dose (a negative value) for these records.
```{r}
file <- system.file("csv/data2.csv", package = "lastdose")
df <- read_csv(file)
lastdose(df) %>% head()
```
The user can alternatively control what happens for these records
```{r}
lastdose(df, fill = NA_real_, back_calc=FALSE) %>% head()
```
<hr>
## More info
See [inst/doc/about.md](https://github.com/metrumresearchgroup/lastdose/blob/master/inst/doc/about.md)
for more details.