-
Notifications
You must be signed in to change notification settings - Fork 1
/
51_RBM_Plot_Serum_IL18.Rmd
290 lines (214 loc) · 7.7 KB
/
51_RBM_Plot_Serum_IL18.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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
---
title: "IL18 Change over time vs Response"
output: github_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
# Clear the environment
rm(list = ls())
# Free up memory by forcing garbage collection
invisible(gc())
# Manually set the seed to an arbitrary number for consistency in reports
myseed <- 9
##_ Set knitr root directory to correspond to project working directory
##_ setting based on structure with code in <project dir>/code
knitr::opts_knit$set(root.dir = here::here())
```
## Paths and Packages
```{r paths_packages}
# Provide paths
data_dir <- "./data/import"
results_dir <- "./results"
work_dir <- "./work"
## Load packages ##
#tidyverse bundles: ggplot2, dplyr, tidyr, readr, purrr and tibble
suppressPackageStartupMessages(library(tidyverse))
library(RColorBrewer)
library(ggpubr)
library(ggsignif)
```
```{r functions}
source("./code/ggplot_theme_dj_prm.R")
#' Custom ggplot theme with bolded text for easier legibility
```
```{r palettes}
# shape map for prior therapy
shape_prior <- c("Pretreated" = 16,
"Naive" = 18)
# color map for response
color_response <- c("Not20pct" = "black",
"20pctDec" = "goldenrod2",
"NE" = "grey")
```
# Data sources
```{r data}
# Patient Annotation
# NB move from stash when finalized (eg PBRM1 added)
clinicalData_file <- paste(data_dir, "CM9_Patient_Annotation.txt", sep = "/" )
clinicalData <- read_tsv(clinicalData_file)
# rbm data
# this is derived from T:\Myriad RBM\PRODUCTION\ARCHIVE\CA209-009\Processed Files\Measurment_Data_Unpivoted.txt
# Should probably import the whole table and filter for Analyte in this script
rbm_file <- paste(data_dir,
"CA209-009 Myriad RBM Measurment_Data_Unpivoted IL18.txt",
sep = "/")
rbm <- read_tsv(rbm_file)
```
# Format data
```{r format}
keepcols <- c()
# Add clinical Annotation from 91 treated
rbm <- left_join(rbm, select(clinicalData,
c("USUBJID","SUBJID", "VEGFstatus","Response20pct")),
by = c("Subject ID" = "USUBJID"))
#remove subjects not in 91 treated
rbm <- filter(rbm, !is.na(SUBJID))
# Set levels of Response factor to determine plotting order
rbm$Response20pct <-factor(rbm$Response20pct,
levels = c("Not20pct","20pctDec","NE"))
# Set levels of biopsy.timepoint factor to determine plotting order
rbm$`BIOSTORE:STUDY_TIMEPOINT` <-factor(rbm$`BIOSTORE:STUDY_TIMEPOINT`,
levels = c("C1D1_0H","C1D1 3HR","C1D1 7HR",
"C1D2 24HR","C2D1_0H","C2D8 168HR",
"C4D1_0H","SCREENING","FOLLUP1"))
rbm$VEGFstatus <- factor(rbm$VEGFstatus,
levels = c("Pretreated" ,"Naive"))
```
## Check all the timpoints
```{r plot_data_check}
#choose timepoints
# here I choose time that matches the biopsy, after checking all times.
timepoints <- c("C1D1_0H",
"C1D2 24HR",
"C2D1_0H",
"C2D8 168HR",
"C4D1_0H")
response <- c("Not20pct","20pctDec")
#subset data to remove unwanted timepoints, subjects
plotdata <- rbm[rbm$`BIOSTORE:STUDY_TIMEPOINT` %in% timepoints,]
plotdata <- plotdata[plotdata$Response20pct %in% response,]
#https://stackoverflow.com/questions/3472980/how-to-change-facet-labels
# Change levels of Response20pct for facet labelling
levels(plotdata$Response20pct) <- c("NonResponder", "Responder", "NE")
plotdata <- plotdata%>%
rename(Timepoint = `BIOSTORE:STUDY_TIMEPOINT`,
Result = `Original Result`)
# #https://github.com/kassambara/ggpubr/issues/65
# # #try to get p values
# anno_df <- compare_means(Result ~ Timepoint,
# group.by = "Response20pct",
# data = plotdata,
# method = "t.test",
# paired = TRUE,
# p.adjust.method = "holm") %>%
# mutate(y_pos = 1400, p.adj = format.pval(p.adj, digits = 2))
# Count Subjects
plotcount <- length(unique(plotdata$`Subject ID`))
# Plot "timepoints" values for IL18
boxplot <- ggplot(plotdata,
aes(x = Timepoint, y = Result)) +
geom_boxplot(aes(Timepoint),
outlier.shape = NA,
alpha=0.2) +
geom_point(aes(color = Response20pct, shape= VEGFstatus),
size = 1,
position = position_jitter(w = 0.2, h = 0)) +
scale_colour_manual(name = 'Response',
values = c("black", "goldenrod2")) +
scale_shape_manual(name = 'Prior Therapy',
values=c(16,18)) +
geom_line(aes(group = `Subject ID`),
colour = "black", alpha=0.3) +
scale_y_continuous(trans='log2',
limits=c(32, 2048)) +
facet_grid(~Response20pct)+
labs(title = "CA209-009 RBM: IL18",
subtitle = paste("Subjects with response status, N=",plotcount),
x = "Response Category",
y = "IL18, pg/mL") +
theme(legend.position = "bottom",
axis.text=element_text(size=6),
axis.title=element_text(size=14,face="bold")) +
guides(shape = guide_legend(nrow=2,byrow=TRUE),
fill = guide_legend(nrow=2,byrow=TRUE))+
# scale_x_discrete(labels=c("C1D1_0H" = "Screen",
# "C2D1_0H" = "Day 28"))+
theme_dj(16)+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
print(boxplot)
# Save box plot
box_file <- paste(results_dir, "/","IL18_vs_",
paste(timepoints, collapse = "_"),"_ByResponse.png",
sep="")
ggsave(boxplot, file = box_file, width=7, height=7,
units = "in", dpi = 96)
```
## Print one comparison
```{r plot_data_publication}
mycomparisons <- list(c("C1D1_0H","C2D1_0H"))
#choose timepoints
# here I choose C2D1, after checking all times.
timepoints <- c("C1D1_0H","C2D1_0H")
response <- c("Not20pct","20pctDec")
#subset data to remove unwanted timepoints, subjects
plotdata <- rbm[rbm$`BIOSTORE:STUDY_TIMEPOINT` %in% timepoints,]
plotdata <- plotdata[plotdata$Response20pct %in% response,]
#https://stackoverflow.com/questions/3472980/how-to-change-facet-labels
# Change levels of Response20pct for facet labelling
levels(plotdata$Response20pct) <- c("NonResponder", "Responder", "NE")
plotdata <- plotdata%>%
rename(Timepoint = `BIOSTORE:STUDY_TIMEPOINT`,
Result = `Original Result`)
# #https://github.com/kassambara/ggpubr/issues/65
# # #try to get p values
# anno_df <- compare_means(Result ~ Timepoint,
# group.by = "Response20pct",
# data = plotdata,
# method = "t.test",
# paired = TRUE,
# p.adjust.method = "holm") %>%
# mutate(y_pos = 1400, p.adj = format.pval(p.adj, digits = 2))
# Count Subjects
plotcount <- length(unique(plotdata$`Subject ID`))
# Plot "timepoints" values for IL18
boxplot <- ggplot(plotdata,
aes(x = Timepoint, y = Result)) +
geom_boxplot(aes(Timepoint),
outlier.shape = NA,
alpha=0.2) +
geom_point(aes(color = Response20pct, shape= VEGFstatus),
size = 2,
position = position_jitter(w = 0.2, h = 0)) +
scale_colour_manual(name = 'Response',
values = c("black", "goldenrod2")) +
scale_shape_manual(name = 'Prior Therapy',
values=c(16,18)) +
geom_line(aes(group = `Subject ID`),
colour = "black", alpha=0.3) +
scale_y_continuous(trans='log2',
limits=c(32, 2048)) +
facet_grid(~Response20pct)+
labs(title = "CA209-009 RBM: IL18",
subtitle = paste("Subjects with response status, N=",plotcount),
x = "Response Category",
y = "IL18, pg/mL") +
theme(legend.position = "bottom",
axis.text=element_text(size=6),
axis.title=element_text(size=14,face="bold")) +
guides(shape = guide_legend(nrow=2,byrow=TRUE),
fill = guide_legend(nrow=2,byrow=TRUE))+
scale_x_discrete(labels=c("C1D1_0H" = "Screen",
"C2D1_0H" = "Day21"))+
stat_compare_means(method="t.test", size = 6,
aes(label = paste0("P = ", ..p.format..)),
comparisons = mycomparisons,
vjust = "inward")+
theme_dj(16)
print(boxplot)
# Save box plot
box_file <- paste(results_dir, "/","IL18_vs_",
paste(timepoints, collapse = "_"),"_ByResponse.png",
sep="")
ggsave(boxplot, file = box_file, width=7, height=4,
units = "in", dpi = 96)
```