Anti-PD1 + LM + GVAX Study

Created r format(Sys.Date(),"%m/%d/%y")

require(immunoSeqR)
require(ggplot2)
require(gridExtra)
require(reshape2)
require(knitr)
require(rmarkdown)
first_run <- FALSE
verbose=FALSE
r <- function(){render('~/Documents/emj/ImmunoseqResults/immunoSeqR/scripts/rmd/pd1.Rmd',
output_file='~/Documents/emj/ImmunoseqResults/new/pd1.pdf',
intermediates_dir='~/Documents/emj/ImmunoseqResults/new/')}
opts_chunk$set(warning=FALSE)
dict <- readRDS('~/Documents/emj/ImmunoseqResults/data/pd1/dict.Rds')
stats <- readRDS('~/Documents/emj/ImmunoseqResults/data/pd1/stats.Rds')
plot_ds <- readRDS('~/Documents/emj/ImmunoseqResults/data/pd1/plot_ds.Rds')
load('~/Documents/emj/ImmunoseqResults/data/pd1/olm.Rda')
sum.ds <- readRDS('~/Documents/emj/ImmunoseqResults/data/pd1/sum.ds.Rds')

Background

\includegraphics[width=\textwidth]{/home/ahopkins/Documents/emj/figures/J14113_timeline.pdf}

Dataset

The data set contains r sum.ds$nsamp samples, of r sum.ds$ntypes types. There are r format(sum.ds$unique.tcr,big.mark=',') unique TCRs, collapsed from r format(sum.ds$total.tcr,big.mark=',') distinct productive CDR3 sequences. This represents an average synonymity of r round(sum.ds$avg.syn,3). The maximum synonymity (in the parent data set) was r sum.ds$max.syn (clone sequence r sum.ds$max.syn.aa).\par

Metadata

The available metadata fields in the dictionary are: r paste(names(dict)[-1],collapse=', '). The statistics computed are r paste(names(stats)[names(stats)!='fn'],collapse=', ').

\clearpage

Quality Control

iseqr_plot_factor(plot_ds,'Total Sequences','type') +
        geom_hline(yintercept=100) +
        scale_y_log10(breaks=c(10,100,1000,10000))
# remove low read count samples
w <- which(plot_ds[,'Total Sequences']<100)
plot_ds <- plot_ds[-w,]
#

By Response

x_val <- 'response'
#metrics <- names(stats[names(stats)!='fn'])[c(1,2,3)]
metrics <- 'Clonality'
types <- levels(plot_ds$type)
for(b in metrics){
    l <- vector('list')
    for(a in types[1:3]){
        l[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
    }
  l2 <- vector('list')
  for(a in types[4:5]){
      l2[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
  }
    do.call(grid.arrange,c(l,ncol=length(types)))
    do.call(grid.arrange,c(l2,ncol=length(types)))
}

\clearpage

Change In Metrics By Response

w <- grep('Log',names(plot_ds))
l <- vector('list')
m <- vector('list')
n <- vector('list')
for(a in seq(length(w))){
  l[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'response','POST2') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PRE to POST2')
  m[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'response','POST3') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PRE to POST3')
  n[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'response','PDACPOST') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PDACPRE to PDACPOST')
}
do.call(grid.arrange,c(l,ncol=length(w)))
cat('\n\n')
do.call(grid.arrange,c(m,ncol=length(w)))
cat('\n\n')
do.call(grid.arrange,c(n,ncol=length(w)))

\clearpage

By Treatment Arm

\begin{center} \begin{tabular}{l l} Arm 1 & Cy + GVAX + LM + PD1 \ Arm 2 & Cy + GVAX + LM \ \end{tabular} \end{center}

x_val <- 'arm'
#metrics <- names(stats[names(stats)!='fn'])[c(1,2,3)]
metrics <- 'Clonality'
types <- levels(plot_ds$type)
for(b in metrics){
        l <- vector('list')
        for(a in types[1:3]){
            l[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
        }
  l2 <- vector('list')
  for(a in types[4:5]){
      l2[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
  }
        do.call(grid.arrange,c(l,ncol=length(types)))
        do.call(grid.arrange,c(l2,ncol=length(types)))
}

\clearpage

Change In Metrics

w <- grep('Log',names(plot_ds))
l <- vector('list')
m <- vector('list')
n <- vector('list')
for(a in seq(length(w))){
  l[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'arm','POST2') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PRE to POST2')
  m[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'arm','POST3') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PRE to POST3')
  n[[a]] <- iseqr_plot_factor(plot_ds,names(plot_ds)[w[a]],'arm','PDACPOST') +
                              geom_hline(yintercept=0,alpha=0.1) + ggtitle('PDACPRE to PDACPOST')
}
do.call(grid.arrange,c(l,ncol=length(w)))
cat('\n\n')
do.call(grid.arrange,c(m,ncol=length(w)))
cat('\n\n')
do.call(grid.arrange,c(n,ncol=length(w)))

Overlaps

rownames(mm) <- paste0(dict$patient,dict$type)
colnames(mm) <- rownames(mm)
w <- c(which(dict$response=='NR'),which(dict$response=='R'))
tdict <- dict[w,]
tmm <- mm[w,w]
tmm.m <- melt(tmm)
g <- ggplot(tmm.m,aes(x=Var1,y=Var2)) +
    geom_tile(aes(fill=value)) +
    coord_fixed() +
    scale_fill_gradient(low='white',high='black',na.value='white')+
    theme(axis.text=element_text(size=5,colour=tdict$response),
            axis.text.x=element_text(angle=90,hjust=1,vjust=0.5))+
    xlab('') + ylab('') + ggtitle('Morisita Overlap')
g

\clearpage

Expanded Clones

w <- grep('Number of Expanded',names(plot_ds))
g <- iseqr_plot_factor(plot_ds,names(plot_ds)[w],'response',type='POST2') + xlab('Response')
f <- iseqr_plot_factor(plot_ds,names(plot_ds)[w],'arm',type='POST2') + xlab('Arm')
grid.arrange(g,f,ncol=2)


w <- grep('Number of Expanded',names(plot_ds))
g <- iseqr_plot_factor(plot_ds,names(plot_ds)[w],'response',type='POST3') + xlab('Response')
f <- iseqr_plot_factor(plot_ds,names(plot_ds)[w],'arm',type='POST3') + xlab('Arm')
grid.arrange(g,f,ncol=2)

\clearpage

Confounders

Sex

x_val <- 'sex'
#metrics <- names(stats[names(stats)!='fn'])[c(1,2,3)]
metrics <- 'Clonality'
types <- levels(plot_ds$type)
for(b in metrics){
  l <- vector('list')
  for(a in types[1:3]){
      l[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
  }
  l2 <- vector('list')
  for(a in types[4:5]){
      l2[[a]] <- iseqr_plot_factor(plot_ds,b,x_val,a)
  }
  do.call(grid.arrange,c(l,ncol=length(types)))
  do.call(grid.arrange,c(l2,ncol=length(types)))
}

\clearpage



ahopki14/immunoSeqR documentation built on May 7, 2019, 2:54 a.m.