Last updated: 2025-05-05
Checks: 6 1
Knit directory: CX5461_Project/
This reproducible R Markdown analysis was created with workflowr (version 1.7.1). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
The R Markdown file has unstaged changes. To know which version of
the R Markdown file created these results, you’ll want to first commit
it to the Git repo. If you’re still working on the analysis, you can
ignore this warning. When you’re finished, you can run
wflow_publish
to commit the R Markdown file and build the
HTML.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20250129)
was run prior to running
the code in the R Markdown file. Setting a seed ensures that any results
that rely on randomness, e.g. subsampling or permutations, are
reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 10ab0f3. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for
the analysis have been committed to Git prior to generating the results
(you can use wflow_publish
or
wflow_git_commit
). workflowr only checks the R Markdown
file, but you know if there are other scripts or data files that it
depends on. Below is the status of the Git repository when the results
were generated:
Ignored files:
Ignored: .RData
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: 0.1 box.svg
Ignored: Rplot04.svg
Untracked files:
Untracked: 0.1 density.svg
Untracked: 0.1.emf
Untracked: 0.1.svg
Untracked: 0.5 box.svg
Untracked: 0.5 density.svg
Untracked: 0.5.svg
Untracked: Additional/
Untracked: CX_5461_Pattern_Genes_24hr.csv
Untracked: CX_5461_Pattern_Genes_3hr.csv
Untracked: Cell viability box plot.svg
Untracked: DRC1.svg
Untracked: Figure 1.jpeg
Untracked: Figure 1.pdf
Untracked: Figure_CM_Purity.pdf
Untracked: Rplot.svg
Untracked: Rplot01.svg
Untracked: Rplot02.svg
Untracked: Rplot03.svg
Untracked: Rplot05.svg
Untracked: Rplot06.svg
Untracked: Rplot07.svg
Untracked: Rplot08.jpeg
Untracked: Rplot08.svg
Untracked: Rplot09.svg
Untracked: Rplot10.svg
Untracked: Rplot11.svg
Untracked: TS HPA (Violin).svg
Untracked: TS HPA.svg
Untracked: TS_HA.svg
Untracked: TS_HV.svg
Untracked: Violin HA.svg
Untracked: Violin HV (CX vs DOX).svg
Untracked: Violin HV.svg
Untracked: data/AF.csv
Untracked: data/AF_Mapped.csv
Untracked: data/AF_genes.csv
Untracked: data/Annotated_DOX_Gene_Table.csv
Untracked: data/CAD_genes.csv
Untracked: data/Cardiotox.csv
Untracked: data/DDR.csv
Untracked: data/DDR_Mapped.csv
Untracked: data/DOX_Vald.csv
Untracked: data/DOX_Vald_Mapped.csv
Untracked: data/Entrez_Cardiotox.csv
Untracked: data/Entrez_Cardiotox_Mapped.csv
Untracked: data/GWAS.xlsx
Untracked: data/GWAS_SNPs.bed
Untracked: data/HF.csv
Untracked: data/HF_Mapped.csv
Untracked: data/HF_genes.csv
Untracked: data/Hypertension_genes.csv
Untracked: data/MI_genes.csv
Untracked: data/P53_Target_mapped.csv
Untracked: data/TS.csv
Untracked: data/TS_HPA.csv
Untracked: data/TS_HPA_mapped.csv
Untracked: data/Toptable_CX_0.1_24.csv
Untracked: data/Toptable_CX_0.1_3.csv
Untracked: data/Toptable_CX_0.1_48.csv
Untracked: data/Toptable_CX_0.5_24.csv
Untracked: data/Toptable_CX_0.5_3.csv
Untracked: data/Toptable_CX_0.5_48.csv
Untracked: data/Toptable_DOX_0.1_24.csv
Untracked: data/Toptable_DOX_0.1_3.csv
Untracked: data/Toptable_DOX_0.1_48.csv
Untracked: data/Toptable_DOX_0.5_24.csv
Untracked: data/Toptable_DOX_0.5_3.csv
Untracked: data/Toptable_DOX_0.5_48.csv
Untracked: data/ts_data_mapped
Untracked: results/
Untracked: run_bedtools.bat
Unstaged changes:
Deleted: analysis/Actox.Rmd
Modified: analysis/Corrmotif_Conc.Rmd
Modified: data/P53_Target.csv
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were
made to the R Markdown (analysis/Corrmotif_Conc.Rmd
) and
HTML (docs/Corrmotif_Conc.html
) files. If you’ve configured
a remote Git repository (see ?wflow_git_remote
), click on
the hyperlinks in the table below to view the files as they were in that
past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
Rmd | 10ab0f3 | sayanpaul01 | 2025-05-05 | Commit |
html | 10ab0f3 | sayanpaul01 | 2025-05-05 | Commit |
Rmd | da5bc51 | sayanpaul01 | 2025-05-04 | Commit |
html | da5bc51 | sayanpaul01 | 2025-05-04 | Commit |
Rmd | 6f9e594 | sayanpaul01 | 2025-04-24 | Commit |
html | 6f9e594 | sayanpaul01 | 2025-04-24 | Commit |
Rmd | d6226a0 | sayanpaul01 | 2025-04-24 | Commit |
html | d6226a0 | sayanpaul01 | 2025-04-24 | Commit |
Rmd | 062a73a | sayanpaul01 | 2025-04-24 | Commit |
html | 062a73a | sayanpaul01 | 2025-04-24 | Commit |
html | 07b9670 | sayanpaul01 | 2025-04-21 | Commit |
html | 9618a00 | sayanpaul01 | 2025-04-21 | Commit |
html | 008117a | sayanpaul01 | 2025-04-14 | Build site. |
html | 1433d37 | sayanpaul01 | 2025-04-14 | Commit |
Rmd | 4bad905 | sayanpaul01 | 2025-04-14 | Commit |
html | 4bad905 | sayanpaul01 | 2025-04-14 | Commit |
Rmd | 6ef5f61 | sayanpaul01 | 2025-04-14 | Commit |
html | 6ef5f61 | sayanpaul01 | 2025-04-14 | Commit |
Rmd | d8a2f25 | sayanpaul01 | 2025-04-14 | Commit |
html | d8a2f25 | sayanpaul01 | 2025-04-14 | Commit |
Rmd | a568872 | sayanpaul01 | 2025-04-10 | Commit |
html | a568872 | sayanpaul01 | 2025-04-10 | Commit |
Rmd | 4e40091 | sayanpaul01 | 2025-04-07 | Commit |
html | 4e40091 | sayanpaul01 | 2025-04-07 | Commit |
Rmd | aab6b9f | sayanpaul01 | 2025-04-07 | Commit |
html | aab6b9f | sayanpaul01 | 2025-04-07 | Commit |
Rmd | 2990b21 | sayanpaul01 | 2025-03-10 | Commit |
html | 2990b21 | sayanpaul01 | 2025-03-10 | Commit |
Rmd | ef3a951 | sayanpaul01 | 2025-03-09 | Commit |
html | ef3a951 | sayanpaul01 | 2025-03-09 | Commit |
Rmd | 81247f6 | sayanpaul01 | 2025-03-06 | Commit |
html | 81247f6 | sayanpaul01 | 2025-03-06 | Commit |
Rmd | 96d0db1 | sayanpaul01 | 2025-03-05 | Commit |
html | 96d0db1 | sayanpaul01 | 2025-03-05 | Commit |
Rmd | 91a7ce4 | sayanpaul01 | 2025-03-03 | Commit |
html | 91a7ce4 | sayanpaul01 | 2025-03-03 | Commit |
Rmd | d9ff853 | sayanpaul01 | 2025-03-03 | Commit |
html | d9ff853 | sayanpaul01 | 2025-03-03 | Commit |
Rmd | 2de67e6 | sayanpaul01 | 2025-02-27 | Commit |
html | 2de67e6 | sayanpaul01 | 2025-02-27 | Commit |
Rmd | 41cd1be | sayanpaul01 | 2025-02-27 | Commit |
html | 41cd1be | sayanpaul01 | 2025-02-27 | Commit |
Rmd | f84821f | sayanpaul01 | 2025-02-26 | Commit |
Rmd | b6e38a1 | sayanpaul01 | 2025-02-25 | Commit |
html | b6e38a1 | sayanpaul01 | 2025-02-25 | Commit |
Rmd | ce4b325 | sayanpaul01 | 2025-02-25 | Commit |
html | ce4b325 | sayanpaul01 | 2025-02-25 | Commit |
## Fit limma model using code as it is found in the original cormotif code. It has
## only been modified to add names to the matrix of t values, as well as the
## limma fits
limmafit.default <- function(exprs,groupid,compid) {
limmafits <- list()
compnum <- nrow(compid)
genenum <- nrow(exprs)
limmat <- matrix(0,genenum,compnum)
limmas2 <- rep(0,compnum)
limmadf <- rep(0,compnum)
limmav0 <- rep(0,compnum)
limmag1num <- rep(0,compnum)
limmag2num <- rep(0,compnum)
rownames(limmat) <- rownames(exprs)
colnames(limmat) <- rownames(compid)
names(limmas2) <- rownames(compid)
names(limmadf) <- rownames(compid)
names(limmav0) <- rownames(compid)
names(limmag1num) <- rownames(compid)
names(limmag2num) <- rownames(compid)
for(i in 1:compnum) {
selid1 <- which(groupid == compid[i,1])
selid2 <- which(groupid == compid[i,2])
eset <- new("ExpressionSet", exprs=cbind(exprs[,selid1],exprs[,selid2]))
g1num <- length(selid1)
g2num <- length(selid2)
designmat <- cbind(base=rep(1,(g1num+g2num)), delta=c(rep(0,g1num),rep(1,g2num)))
fit <- lmFit(eset,designmat)
fit <- eBayes(fit)
limmat[,i] <- fit$t[,2]
limmas2[i] <- fit$s2.prior
limmadf[i] <- fit$df.prior
limmav0[i] <- fit$var.prior[2]
limmag1num[i] <- g1num
limmag2num[i] <- g2num
limmafits[[i]] <- fit
# log odds
# w<-sqrt(1+fit$var.prior[2]/(1/g1num+1/g2num))
# log(0.99)+dt(fit$t[1,2],g1num+g2num-2+fit$df.prior,log=TRUE)-log(0.01)-dt(fit$t[1,2]/w, g1num+g2num-2+fit$df.prior, log=TRUE)+log(w)
}
names(limmafits) <- rownames(compid)
limmacompnum<-nrow(compid)
result<-list(t = limmat,
v0 = limmav0,
df0 = limmadf,
s20 = limmas2,
g1num = limmag1num,
g2num = limmag2num,
compnum = limmacompnum,
fits = limmafits)
}
limmafit.counts <-
function (exprs, groupid, compid, norm.factor.method = "TMM", voom.normalize.method = "none")
{
limmafits <- list()
compnum <- nrow(compid)
genenum <- nrow(exprs)
limmat <- matrix(NA,genenum,compnum)
limmas2 <- rep(0,compnum)
limmadf <- rep(0,compnum)
limmav0 <- rep(0,compnum)
limmag1num <- rep(0,compnum)
limmag2num <- rep(0,compnum)
rownames(limmat) <- rownames(exprs)
colnames(limmat) <- rownames(compid)
names(limmas2) <- rownames(compid)
names(limmadf) <- rownames(compid)
names(limmav0) <- rownames(compid)
names(limmag1num) <- rownames(compid)
names(limmag2num) <- rownames(compid)
for (i in 1:compnum) {
message(paste("Running limma for comparision",i,"/",compnum))
selid1 <- which(groupid == compid[i, 1])
selid2 <- which(groupid == compid[i, 2])
# make a new count data frame
counts <- cbind(exprs[, selid1], exprs[, selid2])
# remove NAs
not.nas <- which(apply(counts, 1, function(x) !any(is.na(x))) == TRUE)
# runn voom/limma
d <- DGEList(counts[not.nas,])
d <- calcNormFactors(d, method = norm.factor.method)
g1num <- length(selid1)
g2num <- length(selid2)
designmat <- cbind(base = rep(1, (g1num + g2num)), delta = c(rep(0,
g1num), rep(1, g2num)))
y <- voom(d, designmat, normalize.method = voom.normalize.method)
fit <- lmFit(y, designmat)
fit <- eBayes(fit)
limmafits[[i]] <- fit
limmat[not.nas, i] <- fit$t[, 2]
limmas2[i] <- fit$s2.prior
limmadf[i] <- fit$df.prior
limmav0[i] <- fit$var.prior[2]
limmag1num[i] <- g1num
limmag2num[i] <- g2num
}
limmacompnum <- nrow(compid)
names(limmafits) <- rownames(compid)
result <- list(t = limmat,
v0 = limmav0,
df0 = limmadf,
s20 = limmas2,
g1num = limmag1num,
g2num = limmag2num,
compnum = limmacompnum,
fits = limmafits)
}
limmafit.list <-
function (fitlist, cmp.idx=2)
{
compnum <- length(fitlist)
genes <- c()
for (i in 1:compnum) genes <- unique(c(genes, rownames(fitlist[[i]])))
genenum <- length(genes)
limmat <- matrix(NA,genenum,compnum)
limmas2 <- rep(0,compnum)
limmadf <- rep(0,compnum)
limmav0 <- rep(0,compnum)
limmag1num <- rep(0,compnum)
limmag2num <- rep(0,compnum)
rownames(limmat) <- genes
colnames(limmat) <- names(fitlist)
names(limmas2) <- names(fitlist)
names(limmadf) <- names(fitlist)
names(limmav0) <- names(fitlist)
names(limmag1num) <- names(fitlist)
names(limmag2num) <- names(fitlist)
for (i in 1:compnum) {
this.t <- fitlist[[i]]$t[,cmp.idx]
limmat[names(this.t),i] <- this.t
limmas2[i] <- fitlist[[i]]$s2.prior
limmadf[i] <- fitlist[[i]]$df.prior
limmav0[i] <- fitlist[[i]]$var.prior[cmp.idx]
limmag1num[i] <- sum(fitlist[[i]]$design[,cmp.idx]==0)
limmag2num[i] <- sum(fitlist[[i]]$design[,cmp.idx]==1)
}
limmacompnum <- compnum
result <- list(t = limmat,
v0 = limmav0,
df0 = limmadf,
s20 = limmas2,
g1num = limmag1num,
g2num = limmag2num,
compnum = limmacompnum,
fits = limmafits)
}
## Rank genes based on statistics
generank<-function(x) {
xcol<-ncol(x)
xrow<-nrow(x)
result<-matrix(0,xrow,xcol)
z<-(1:1:xrow)
for(i in 1:xcol) {
y<-sort(x[,i],decreasing=TRUE,na.last=TRUE)
result[,i]<-match(x[,i],y)
result[,i]<-order(result[,i])
}
result
}
## Log-likelihood for moderated t under H0
modt.f0.loglike<-function(x,df) {
a<-dt(x, df, log=TRUE)
result<-as.vector(a)
flag<-which(is.na(result)==TRUE)
result[flag]<-0
result
}
## Log-likelihood for moderated t under H1
## param=c(df,g1num,g2num,v0)
modt.f1.loglike<-function(x,param) {
df<-param[1]
g1num<-param[2]
g2num<-param[3]
v0<-param[4]
w<-sqrt(1+v0/(1/g1num+1/g2num))
dt(x/w, df, log=TRUE)-log(w)
a<-dt(x/w, df, log=TRUE)-log(w)
result<-as.vector(a)
flag<-which(is.na(result)==TRUE)
result[flag]<-0
result
}
## Correlation Motif Fit
cmfit.X<-function(x, type, K=1, tol=1e-3, max.iter=100) {
## initialize
xrow <- nrow(x)
xcol <- ncol(x)
loglike0 <- list()
loglike1 <- list()
p <- rep(1, K)/K
q <- matrix(runif(K * xcol), K, xcol)
q[1, ] <- rep(0.01, xcol)
for (i in 1:xcol) {
f0 <- type[[i]][[1]]
f0param <- type[[i]][[2]]
f1 <- type[[i]][[3]]
f1param <- type[[i]][[4]]
loglike0[[i]] <- f0(x[, i], f0param)
loglike1[[i]] <- f1(x[, i], f1param)
}
condlike <- list()
for (i in 1:xcol) {
condlike[[i]] <- matrix(0, xrow, K)
}
loglike.old <- -1e+10
for (i.iter in 1:max.iter) {
if ((i.iter%%50) == 0) {
print(paste("We have run the first ", i.iter, " iterations for K=",
K, sep = ""))
}
err <- tol + 1
clustlike <- matrix(0, xrow, K)
#templike <- matrix(0, xrow, 2)
templike1 <- rep(0, xrow)
templike2 <- rep(0, xrow)
for (j in 1:K) {
for (i in 1:xcol) {
templike1 <- log(q[j, i]) + loglike1[[i]]
templike2 <- log(1 - q[j, i]) + loglike0[[i]]
tempmax <- Rfast::Pmax(templike1, templike2)
templike1 <- exp(templike1 - tempmax)
templike2 <- exp(templike2 - tempmax)
tempsum <- templike1 + templike2
clustlike[, j] <- clustlike[, j] + tempmax +
log(tempsum)
condlike[[i]][, j] <- templike1/tempsum
}
clustlike[, j] <- clustlike[, j] + log(p[j])
}
#tempmax <- apply(clustlike, 1, max)
tempmax <- Rfast::rowMaxs(clustlike, value=TRUE)
for (j in 1:K) {
clustlike[, j] <- exp(clustlike[, j] - tempmax)
}
#tempsum <- apply(clustlike, 1, sum)
tempsum <- Rfast::rowsums(clustlike)
for (j in 1:K) {
clustlike[, j] <- clustlike[, j]/tempsum
}
#p.new <- (apply(clustlike, 2, sum) + 1)/(xrow + K)
p.new <- (Rfast::colsums(clustlike) + 1)/(xrow + K)
q.new <- matrix(0, K, xcol)
for (j in 1:K) {
clustpsum <- sum(clustlike[, j])
for (i in 1:xcol) {
q.new[j, i] <- (sum(clustlike[, j] * condlike[[i]][,
j]) + 1)/(clustpsum + 2)
}
}
err.p <- max(abs(p.new - p)/p)
err.q <- max(abs(q.new - q)/q)
err <- max(err.p, err.q)
loglike.new <- (sum(tempmax + log(tempsum)) + sum(log(p.new)) +
sum(log(q.new) + log(1 - q.new)))/xrow
p <- p.new
q <- q.new
loglike.old <- loglike.new
if (err < tol) {
break
}
}
clustlike <- matrix(0, xrow, K)
for (j in 1:K) {
for (i in 1:xcol) {
templike1 <- log(q[j, i]) + loglike1[[i]]
templike2 <- log(1 - q[j, i]) + loglike0[[i]]
tempmax <- Rfast::Pmax(templike1, templike2)
templike1 <- exp(templike1 - tempmax)
templike2 <- exp(templike2 - tempmax)
tempsum <- templike1 + templike2
clustlike[, j] <- clustlike[, j] + tempmax + log(tempsum)
condlike[[i]][, j] <- templike1/tempsum
}
clustlike[, j] <- clustlike[, j] + log(p[j])
}
#tempmax <- apply(clustlike, 1, max)
tempmax <- Rfast::rowMaxs(clustlike, value=TRUE)
for (j in 1:K) {
clustlike[, j] <- exp(clustlike[, j] - tempmax)
}
#tempsum <- apply(clustlike, 1, sum)
tempsum <- Rfast::rowsums(clustlike)
for (j in 1:K) {
clustlike[, j] <- clustlike[, j]/tempsum
}
p.post <- matrix(0, xrow, xcol)
for (j in 1:K) {
for (i in 1:xcol) {
p.post[, i] <- p.post[, i] + clustlike[, j] * condlike[[i]][,
j]
}
}
loglike.old <- loglike.old - (sum(log(p)) + sum(log(q) +
log(1 - q)))/xrow
loglike.old <- loglike.old * xrow
result <- list(p.post = p.post, motif.prior = p, motif.q = q,
loglike = loglike.old, clustlike=clustlike, condlike=condlike)
}
## Fit using (0,0,...,0) and (1,1,...,1)
cmfitall<-function(x, type, tol=1e-3, max.iter=100) {
## initialize
xrow<-nrow(x)
xcol<-ncol(x)
loglike0<-list()
loglike1<-list()
p<-0.01
## compute loglikelihood
L0<-matrix(0,xrow,1)
L1<-matrix(0,xrow,1)
for(i in 1:xcol) {
f0<-type[[i]][[1]]
f0param<-type[[i]][[2]]
f1<-type[[i]][[3]]
f1param<-type[[i]][[4]]
loglike0[[i]]<-f0(x[,i],f0param)
loglike1[[i]]<-f1(x[,i],f1param)
L0<-L0+loglike0[[i]]
L1<-L1+loglike1[[i]]
}
## EM algorithm to get MLE of p and q
loglike.old <- -1e10
for(i.iter in 1:max.iter) {
if((i.iter%%50) == 0) {
print(paste("We have run the first ", i.iter, " iterations",sep=""))
}
err<-tol+1
## compute posterior cluster membership
clustlike<-matrix(0,xrow,2)
clustlike[,1]<-log(1-p)+L0
clustlike[,2]<-log(p)+L1
tempmax<-apply(clustlike,1,max)
for(j in 1:2) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
## update motif occurrence rate
for(j in 1:2) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.new<-(sum(clustlike[,2])+1)/(xrow+2)
## evaluate convergence
err<-abs(p.new-p)/p
## evaluate whether the log.likelihood increases
loglike.new<-(sum(tempmax+log(tempsum))+log(p.new)+log(1-p.new))/xrow
loglike.old<-loglike.new
p<-p.new
if(err<tol) {
break;
}
}
## compute posterior p
clustlike<-matrix(0,xrow,2)
clustlike[,1]<-log(1-p)+L0
clustlike[,2]<-log(p)+L1
tempmax<-apply(clustlike,1,max)
for(j in 1:2) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
for(j in 1:2) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.post<-matrix(0,xrow,xcol)
for(i in 1:xcol) {
p.post[,i]<-clustlike[,2]
}
## return
#calculate back loglikelihood
loglike.old<-loglike.old-(log(p)+log(1-p))/xrow
loglike.old<-loglike.old*xrow
result<-list(p.post=p.post, motif.prior=p, loglike=loglike.old)
}
## Fit each dataset separately
cmfitsep<-function(x, type, tol=1e-3, max.iter=100) {
## initialize
xrow<-nrow(x)
xcol<-ncol(x)
loglike0<-list()
loglike1<-list()
p<-0.01*rep(1,xcol)
loglike.final<-rep(0,xcol)
## compute loglikelihood
for(i in 1:xcol) {
f0<-type[[i]][[1]]
f0param<-type[[i]][[2]]
f1<-type[[i]][[3]]
f1param<-type[[i]][[4]]
loglike0[[i]]<-f0(x[,i],f0param)
loglike1[[i]]<-f1(x[,i],f1param)
}
p.post<-matrix(0,xrow,xcol)
## EM algorithm to get MLE of p
for(coli in 1:xcol) {
loglike.old <- -1e10
for(i.iter in 1:max.iter) {
if((i.iter%%50) == 0) {
print(paste("We have run the first ", i.iter, " iterations",sep=""))
}
err<-tol+1
## compute posterior cluster membership
clustlike<-matrix(0,xrow,2)
clustlike[,1]<-log(1-p[coli])+loglike0[[coli]]
clustlike[,2]<-log(p[coli])+loglike1[[coli]]
tempmax<-apply(clustlike,1,max)
for(j in 1:2) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
## evaluate whether the log.likelihood increases
loglike.new<-sum(tempmax+log(tempsum))/xrow
## update motif occurrence rate
for(j in 1:2) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.new<-(sum(clustlike[,2]))/(xrow)
## evaluate convergence
err<-abs(p.new-p[coli])/p[coli]
loglike.old<-loglike.new
p[coli]<-p.new
if(err<tol) {
break;
}
}
## compute posterior p
clustlike<-matrix(0,xrow,2)
clustlike[,1]<-log(1-p[coli])+loglike0[[coli]]
clustlike[,2]<-log(p[coli])+loglike1[[coli]]
tempmax<-apply(clustlike,1,max)
for(j in 1:2) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
for(j in 1:2) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.post[,coli]<-clustlike[,2]
loglike.final[coli]<-loglike.old
}
## return
loglike.final<-loglike.final*xrow
result<-list(p.post=p.post, motif.prior=p, loglike=loglike.final)
}
## Fit the full model
cmfitfull<-function(x, type, tol=1e-3, max.iter=100) {
## initialize
xrow<-nrow(x)
xcol<-ncol(x)
loglike0<-list()
loglike1<-list()
K<-2^xcol
p<-rep(1,K)/K
pattern<-rep(0,xcol)
patid<-matrix(0,K,xcol)
## compute loglikelihood
for(i in 1:xcol) {
f0<-type[[i]][[1]]
f0param<-type[[i]][[2]]
f1<-type[[i]][[3]]
f1param<-type[[i]][[4]]
loglike0[[i]]<-f0(x[,i],f0param)
loglike1[[i]]<-f1(x[,i],f1param)
}
L<-matrix(0,xrow,K)
for(i in 1:K)
{
patid[i,]<-pattern
for(j in 1:xcol) {
if(pattern[j] < 0.5) {
L[,i]<-L[,i]+loglike0[[j]]
} else {
L[,i]<-L[,i]+loglike1[[j]]
}
}
if(i < K) {
pattern[xcol]<-pattern[xcol]+1
j<-xcol
while(pattern[j] > 1) {
pattern[j]<-0
j<-j-1
pattern[j]<-pattern[j]+1
}
}
}
## EM algorithm to get MLE of p and q
loglike.old <- -1e10
for(i.iter in 1:max.iter) {
if((i.iter%%50) == 0) {
print(paste("We have run the first ", i.iter, " iterations",sep=""))
}
err<-tol+1
## compute posterior cluster membership
clustlike<-matrix(0,xrow,K)
for(j in 1:K) {
clustlike[,j]<-log(p[j])+L[,j]
}
tempmax<-apply(clustlike,1,max)
for(j in 1:K) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
## update motif occurrence rate
for(j in 1:K) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.new<-(apply(clustlike,2,sum)+1)/(xrow+K)
## evaluate convergence
err<-max(abs(p.new-p)/p)
## evaluate whether the log.likelihood increases
loglike.new<-(sum(tempmax+log(tempsum))+sum(log(p.new)))/xrow
loglike.old<-loglike.new
p<-p.new
if(err<tol) {
break;
}
}
## compute posterior p
clustlike<-matrix(0,xrow,K)
for(j in 1:K) {
clustlike[,j]<-log(p[j])+L[,j]
}
tempmax<-apply(clustlike,1,max)
for(j in 1:K) {
clustlike[,j]<-exp(clustlike[,j]-tempmax)
}
tempsum<-apply(clustlike,1,sum)
for(j in 1:K) {
clustlike[,j]<-clustlike[,j]/tempsum
}
p.post<-matrix(0,xrow,xcol)
for(j in 1:K) {
for(i in 1:xcol) {
if(patid[j,i] > 0.5) {
p.post[,i]<-p.post[,i]+clustlike[,j]
}
}
}
## return
#calculate back loglikelihood
loglike.old<-loglike.old-sum(log(p))/xrow
loglike.old<-loglike.old*xrow
result<-list(p.post=p.post, motif.prior=p, loglike=loglike.old)
}
generatetype<-function(limfitted)
{
jtype<-list()
df<-limfitted$g1num+limfitted$g2num-2+limfitted$df0
for(j in 1:limfitted$compnum)
{
jtype[[j]]<-list(f0=modt.f0.loglike, f0.param=df[j], f1=modt.f1.loglike, f1.param=c(df[j],limfitted$g1num[j],limfitted$g2num[j],limfitted$v0[j]))
}
jtype
}
cormotiffit <- function(exprs, groupid=NULL, compid=NULL, K=1, tol=1e-3,
max.iter=100, BIC=TRUE, norm.factor.method="TMM",
voom.normalize.method = "none", runtype=c("logCPM","counts","limmafits"), each=3)
{
# first I want to do some typechecking. Input can be either a normalized
# matrix, a count matrix, or a list of limma fits. Dispatch the correct
# limmafit accordingly.
# todo: add some typechecking here
limfitted <- list()
if (runtype=="counts") {
limfitted <- limmafit.counts(exprs,groupid,compid, norm.factor.method, voom.normalize.method)
} else if (runtype=="logCPM") {
limfitted <- limmafit.default(exprs,groupid,compid)
} else if (runtype=="limmafits") {
limfitted <- limmafit.list(exprs)
} else {
stop("runtype must be one of 'logCPM', 'counts', or 'limmafits'")
}
jtype<-generatetype(limfitted)
fitresult<-list()
ks <- rep(K, each = each)
fitresult <- bplapply(1:length(ks), function(i, x, type, ks, tol, max.iter) {
cmfit.X(x, type, K = ks[i], tol = tol, max.iter = max.iter)
}, x=limfitted$t, type=jtype, ks=ks, tol=tol, max.iter=max.iter)
best.fitresults <- list()
for (i in 1:length(K)) {
w.k <- which(ks==K[i])
this.bic <- c()
for (j in w.k) this.bic[j] <- -2 * fitresult[[j]]$loglike + (K[i] - 1 + K[i] * limfitted$compnum) * log(dim(limfitted$t)[1])
w.min <- which(this.bic == min(this.bic, na.rm = TRUE))[1]
best.fitresults[[i]] <- fitresult[[w.min]]
}
fitresult <- best.fitresults
bic <- rep(0, length(K))
aic <- rep(0, length(K))
loglike <- rep(0, length(K))
for (i in 1:length(K)) loglike[i] <- fitresult[[i]]$loglike
for (i in 1:length(K)) bic[i] <- -2 * fitresult[[i]]$loglike + (K[i] - 1 + K[i] * limfitted$compnum) * log(dim(limfitted$t)[1])
for (i in 1:length(K)) aic[i] <- -2 * fitresult[[i]]$loglike + 2 * (K[i] - 1 + K[i] * limfitted$compnum)
if(BIC==TRUE) {
bestflag=which(bic==min(bic))
}
else {
bestflag=which(aic==min(aic))
}
result<-list(bestmotif=fitresult[[bestflag]],bic=cbind(K,bic),
aic=cbind(K,aic),loglike=cbind(K,loglike), allmotifs=fitresult)
}
cormotiffitall<-function(exprs,groupid,compid, tol=1e-3, max.iter=100)
{
limfitted<-limmafit(exprs,groupid,compid)
jtype<-generatetype(limfitted)
fitresult<-cmfitall(limfitted$t,type=jtype,tol=1e-3,max.iter=max.iter)
}
cormotiffitsep<-function(exprs,groupid,compid, tol=1e-3, max.iter=100)
{
limfitted<-limmafit(exprs,groupid,compid)
jtype<-generatetype(limfitted)
fitresult<-cmfitsep(limfitted$t,type=jtype,tol=1e-3,max.iter=max.iter)
}
cormotiffitfull<-function(exprs,groupid,compid, tol=1e-3, max.iter=100)
{
limfitted<-limmafit(exprs,groupid,compid)
jtype<-generatetype(limfitted)
fitresult<-cmfitfull(limfitted$t,type=jtype,tol=1e-3,max.iter=max.iter)
}
plotIC<-function(fitted_cormotif)
{
oldpar<-par(mfrow=c(1,2))
plot(fitted_cormotif$bic[,1], fitted_cormotif$bic[,2], type="b",xlab="Motif Number", ylab="BIC", main="BIC")
plot(fitted_cormotif$aic[,1], fitted_cormotif$aic[,2], type="b",xlab="Motif Number", ylab="AIC", main="AIC")
}
plotMotif<-function(fitted_cormotif,title="")
{
layout(matrix(1:2,ncol=2))
u<-1:dim(fitted_cormotif$bestmotif$motif.q)[2]
v<-1:dim(fitted_cormotif$bestmotif$motif.q)[1]
image(u,v,t(fitted_cormotif$bestmotif$motif.q),
col=gray(seq(from=1,to=0,by=-0.1)),xlab="Study",yaxt = "n",
ylab="Corr. Motifs",main=paste(title,"pattern",sep=" "))
axis(2,at=1:length(v))
for(i in 1:(length(u)+1))
{
abline(v=(i-0.5))
}
for(i in 1:(length(v)+1))
{
abline(h=(i-0.5))
}
Ng=10000
if(is.null(fitted_cormotif$bestmotif$p.post)!=TRUE)
Ng=nrow(fitted_cormotif$bestmotif$p.post)
genecount=floor(fitted_cormotif$bestmotif$motif.p*Ng)
NK=nrow(fitted_cormotif$bestmotif$motif.q)
plot(0,0.7,pch=".",xlim=c(0,1.2),ylim=c(0.75,NK+0.25),
frame.plot=FALSE,axes=FALSE,xlab="No. of genes",ylab="", main=paste(title,"frequency",sep=" "))
segments(0,0.7,fitted_cormotif$bestmotif$motif.p[1],0.7)
rect(0,1:NK-0.3,fitted_cormotif$bestmotif$motif.p,1:NK+0.3,
col="dark grey")
mtext(1:NK,at=1:NK,side=2,cex=0.8)
text(fitted_cormotif$bestmotif$motif.p+0.15,1:NK,
labels=floor(fitted_cormotif$bestmotif$motif.p*Ng))
}
library(Cormotif)
library(Rfast)
library(dplyr)
library(BiocParallel)
library(gprofiler2)
library(ggplot2)
# Read the Corrmotif Results
Corrmotif <- read.csv("data/Corrmotif/CX5461.csv")
Corrmotif_df <- data.frame(Corrmotif)
rownames(Corrmotif_df) <- Corrmotif_df$Gene
# Filter for 0.1 Concentration Only
exprs.corrmotif <- as.matrix(Corrmotif_df[, grep("0.1", colnames(Corrmotif_df))])
# Read group and comparison IDs
groupid <- read.csv("data/Corrmotif/groupid.csv")
groupid_df <- data.frame(groupid[, grep("0.1", colnames(groupid))])
compid <- read.csv("data/Corrmotif/Compid.csv")
compid_df <- compid[compid$Cond1 %in% unique(as.numeric(groupid_df)) & compid$Cond2 %in% unique(as.numeric(groupid_df)), ]
set.seed(11111)
# Fit Corrmotif Model (K = 1 to 8)
set.seed(11111)
motif.fitted_0.1 <- cormotiffit(
exprs = exprs.corrmotif,
groupid = groupid_df,
compid = compid_df,
K = 1:8,
max.iter = 1000,
BIC = TRUE,
runtype = "logCPM"
)
gene_prob_0.1 <- motif.fitted_0.1$bestmotif$p.post
rownames(gene_prob_0.1) <- rownames(Corrmotif_df)
motif_prob_0.1 <- motif.fitted_0.1$bestmotif$clustlike
rownames(motif_prob_0.1) <- rownames(gene_prob_0.1)
write.csv(motif_prob_0.1,"data/cormotif_probability_genelist_0.1.csv")
cormotif_0.1 <- readRDS("data/Corrmotif/cormotif_0.1.RDS")
cormotif_0.1$bic
K bic
[1,] 1 291696.5
[2,] 2 284585.3
[3,] 3 283482.9
[4,] 4 283551.8
[5,] 5 283620.7
[6,] 6 283689.6
[7,] 7 283758.5
[8,] 8 283827.4
plotIC(cormotif_0.1)
plotMotif(cormotif_0.1)
# Extract posterior probabilities for genes
gene_prob_tran_0.1 <- cormotif_0.1$bestmotif$p.post
rownames(gene_prob_tran_0.1) <- rownames(Corrmotif_df)
# Define gene probability groups
prob_1_0.1 <- rownames(gene_prob_tran_0.1[(gene_prob_tran_0.1[,1] <0.5 & gene_prob_tran_0.1[,2] <0.5 & gene_prob_tran_0.1[,3] <0.5 & gene_prob_tran_0.1[,4] <0.5 & gene_prob_tran_0.1[,5] < 0.5 & gene_prob_tran_0.1[,6]<0.5),])
length(prob_1_0.1)
[1] 12308
prob_2_0.1 <- rownames(gene_prob_tran_0.1[(gene_prob_tran_0.1[,1] <0.5 & gene_prob_tran_0.1[,2] >0.5 & gene_prob_tran_0.1[,3] >0.5 & gene_prob_tran_0.1[,4] <0.5 & gene_prob_tran_0.1[,5] > 0.5 & gene_prob_tran_0.1[,6]>0.5),])
length(prob_2_0.1)
[1] 415
prob_3_0.1 <- rownames(gene_prob_tran_0.1[(gene_prob_tran_0.1[,1] <0.5 & gene_prob_tran_0.1[,2] <0.5 & gene_prob_tran_0.1[,3] <0.5 & gene_prob_tran_0.1[,4] <0.5 & gene_prob_tran_0.1[,5] > 0.5 & gene_prob_tran_0.1[,6]>0.5),])
length(prob_3_0.1)
[1] 1551
# Load necessary library
library(ggplot2)
# Data
data <- data.frame(
Category = c("Non response (0.1 µM)", "CX-DOX mid-late response (0.1 µM)", "DOX only mid-late (0.1 µM)"),
Value = c(12308, 415, 1551)
)
# Define custom colors
custom_colors <- c("Non response (0.1 µM)" = "#FF9999",
"CX-DOX mid-late response (0.1 µM)" = "#66B2FF",
"DOX only mid-late (0.1 µM)" = "#99FF99")
# Create pie chart
ggplot(data, aes(x = "", y = Value, fill = Category)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start = 0) +
geom_text(aes(label = Value),
position = position_stack(vjust = 0.5),
size = 4, color = "black") +
labs(title = "Pie Chart (0.1 micromolar Corrmotif)", x = NULL, y = NULL) +
theme_void() +
scale_fill_manual(values = custom_colors)
write.csv(data.frame(Entrez_ID = prob_1_0.1), "data/prob_1_0.1.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_2_0.1), "data/prob_2_0.1.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_3_0.1), "data/prob_3_0.1.csv", row.names = FALSE)
# Load Required Libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# Load Datasets (Only 0.1 Micromolar)
CX_0.1_3 <- read.csv("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- read.csv("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- read.csv("data/DEGs/Toptable_CX_0.1_48.csv")
DOX_0.1_3 <- read.csv("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- read.csv("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- read.csv("data/DEGs/Toptable_DOX_0.1_48.csv")
# Combine All 0.1 Micromolar Datasets into a Single Dataframe
all_toptables_0.1 <- bind_rows(
CX_0.1_3 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 3 hours"),
CX_0.1_24 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 24 hours"),
CX_0.1_48 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 48 hours"),
DOX_0.1_3 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 3 hours"),
DOX_0.1_24 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 24 hours"),
DOX_0.1_48 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 48 hours")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.1$Entrez_ID <- as.character(all_toptables_0.1$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response\n(0.1 micromolar)",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response\n(0.1 micromolar)",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response\n(0.1 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# Compute Absolute logFC
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(absFC = abs(logFC))
# Convert Factors for Proper Ordering (Reversed Order for Response Groups)
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(
Drug = factor(Drug, levels = c("CX.5461", "DOX")),
Timepoint = factor(Timepoint, levels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group,
levels = c(
"DOX only mid-late response\n(0.1 micromolar)",
"CX-DOX mid-late response\n(0.1 micromolar)",
"Non response\n(0.1 micromolar)" # Reversed Order
))
)
# **Plot the Boxplot with Faceted Labels Wrapping Correctly**
ggplot(all_toptables_0.1, aes(x = Drug, y = absFC, fill = Drug)) +
geom_boxplot() +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) + # Custom color palette
facet_grid(Response_Group ~ Timepoint, labeller = label_wrap_gen(width = 20)) + # Ensure Proper Wrapping
theme_bw() +
labs(
x = "Drugs",
y = "|Log Fold Change|",
title = "|Log Fold| for 0.1 micromolar"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.line = element_line(linewidth = 1.5),
strip.background = element_rect(fill = "gray"), # Gray background for facet labels
strip.text = element_text(size = 12, color = "black", face = "bold"), # Bold styling for facet labels
axis.text.x = element_text(size = 10, color = "black", angle = 15)
)
# Load Required Libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# Load Datasets (Only 0.1 Micromolar)
CX_0.1_3 <- read.csv("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- read.csv("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- read.csv("data/DEGs/Toptable_CX_0.1_48.csv")
DOX_0.1_3 <- read.csv("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- read.csv("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- read.csv("data/DEGs/Toptable_DOX_0.1_48.csv")
# Combine All 0.1 Micromolar Datasets into a Single Dataframe
all_toptables_0.1 <- bind_rows(
CX_0.1_3 %>% mutate(Drug = "CX.5461", Timepoint = "3"),
CX_0.1_24 %>% mutate(Drug = "CX.5461", Timepoint = "24"),
CX_0.1_48 %>% mutate(Drug = "CX.5461", Timepoint = "48"),
DOX_0.1_3 %>% mutate(Drug = "DOX", Timepoint = "3"),
DOX_0.1_24 %>% mutate(Drug = "DOX", Timepoint = "24"),
DOX_0.1_48 %>% mutate(Drug = "DOX", Timepoint = "48")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.1$Entrez_ID <- as.character(all_toptables_0.1$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response\n(0.1 micromolar)",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response\n(0.1 micromolar)",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response\n(0.1 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# Compute Mean Absolute logFC for Line Plot
data_summary <- all_toptables_0.1 %>%
mutate(abs_logFC = abs(logFC)) %>% # Take absolute log fold change
group_by(Response_Group, Drug, Timepoint) %>%
dplyr::summarize(mean_abs_logFC = mean(abs_logFC, na.rm = TRUE), .groups = "drop") %>%
as.data.frame()
# **Ensure all timepoints exist in the summary**
timepoints_full <- expand.grid(
Response_Group = unique(all_toptables_0.1$Response_Group),
Drug = unique(all_toptables_0.1$Drug),
Timepoint = c("3", "24", "48")
)
# **Merge to keep missing timepoints**
data_summary <- full_join(timepoints_full, data_summary, by = c("Response_Group", "Drug", "Timepoint"))
# **Replace NA mean_abs_logFC with 0 if no genes were present**
data_summary$mean_abs_logFC[is.na(data_summary$mean_abs_logFC)] <- 0
# Convert Factors for Proper Ordering (Reversed Order for Response Groups)
data_summary <- data_summary %>%
mutate(
Timepoint = factor(Timepoint, levels = c("3", "24", "48"), labels = c("3 hours", "24 hours", "48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX only mid-late response\n(0.1 micromolar)",
"CX-DOX mid-late response\n(0.1 micromolar)",
"Non response\n(0.1 micromolar)" # Reversed Order
))
)
# Define custom drug palette
drug_palette <- c("CX.5461" = "blue", "DOX" = "red")
# **Plot the Line Plot for Absolute logFC**
ggplot(data_summary, aes(x = Timepoint, y = mean_abs_logFC, group = Drug, color = Drug)) +
geom_point(size = 3) +
geom_line(size = 1.2) +
scale_color_manual(values = drug_palette) +
ylim(0, 2.5) + # Adjust the Y-axis for better visualization
facet_wrap(~ Response_Group, ncol = 1) + # Facet by Response Group (Reversed Order)
theme_bw() +
labs(
x = "Timepoints",
y = "Mean |Log Fold Change|",
title = "Mean |Log Fold Change| Across Response Groups (0.1 micromolar)",
color = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text = element_text(size = 12, color = "black"),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
# Load required libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# Load Datasets (Only 0.1 Micromolar)
CX_0.1_3 <- read.csv("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- read.csv("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- read.csv("data/DEGs/Toptable_CX_0.1_48.csv")
DOX_0.1_3 <- read.csv("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- read.csv("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- read.csv("data/DEGs/Toptable_DOX_0.1_48.csv")
# Combine All 0.1 Micromolar Datasets into a Single Dataframe
all_toptables_0.1 <- bind_rows(
CX_0.1_3 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 3 hours"),
CX_0.1_24 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 24 hours"),
CX_0.1_48 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 48 hours"),
DOX_0.1_3 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 3 hours"),
DOX_0.1_24 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 24 hours"),
DOX_0.1_48 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 48 hours")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.1$Entrez_ID <- as.character(all_toptables_0.1$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response\n(0.1 micromolar)",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response\n(0.1 micromolar)",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response\n(0.1 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# Convert factors to ensure correct ordering (Reversed Order for Response Groups)
all_toptables_0.1 <- all_toptables_0.1 %>%
mutate(
Timepoint = factor(Timepoint, levels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX only mid-late response\n(0.1 micromolar)",
"CX-DOX mid-late response\n(0.1 micromolar)",
"Non response\n(0.1 micromolar)" # Reversed Order
))
)
# **Plot the Boxplot**
ggplot(all_toptables_0.1, aes(x = Drug, y = logFC, fill = Drug)) +
geom_boxplot() +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) +
facet_grid(Response_Group ~ Timepoint) +
theme_bw() +
labs(x = "Drugs", y = "Log Fold Change", title = "Log Fold Change for 0.1 Micromolar") +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
strip.text = element_text(size = 12, face = "bold")
)
# Compute Mean logFC for Line Plot
data_summary <- all_toptables_0.1 %>%
group_by(Response_Group, Drug, Timepoint) %>%
dplyr::summarize(mean_logFC = mean(logFC, na.rm = TRUE), .groups = "drop") %>%
as.data.frame()
# Convert factors to ensure correct ordering (Reversed Order for Response Groups)
data_summary <- data_summary %>%
mutate(
Timepoint = factor(Timepoint, levels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX only mid-late response\n(0.1 micromolar)",
"CX-DOX mid-late response\n(0.1 micromolar)",
"Non response\n(0.1 micromolar)" # Reversed Order
))
)
# **Plot the Line Plot**
ggplot(data_summary, aes(x = Timepoint, y = mean_logFC, group = Drug, color = Drug)) +
geom_point(size = 3) +
geom_line(size = 1.2) +
scale_color_manual(values = c("CX.5461" = "blue", "DOX" = "red")) +
ylim(-2, 1.5) + # Adjust the Y-axis for better visualization
facet_wrap(~ Response_Group, ncol = 1) + # Facet by Response Group (Reversed Order)
theme_bw() +
labs(
x = "Timepoints",
y = "Mean Log Fold Change",
title = "Mean Log Fold Change Across Response Groups (0.1 micromolar)",
color = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text = element_text(size = 12, color = "black"),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
# Read the Corrmotif Results
Corrmotif <- read.csv("data/Corrmotif/CX5461.csv")
Corrmotif_df <- data.frame(Corrmotif)
rownames(Corrmotif_df) <- Corrmotif_df$Gene
# Filter for 0.5 Concentration Only
exprs.corrmotif <- as.matrix(Corrmotif_df[, grep("0.5", colnames(Corrmotif_df))])
# Read group and comparison IDs
groupid <- read.csv("data/Corrmotif/groupid.csv")
groupid_df <- data.frame(groupid[, grep("0.5", colnames(groupid))])
compid <- read.csv("data/Corrmotif/Compid.csv")
compid_df <- compid[compid$Cond1 %in% unique(as.numeric(groupid_df)) & compid$Cond2 %in% unique(as.numeric(groupid_df)), ]
# Fit Corrmotif Model (K = 1 to 8)
set.seed(11111)
motif.fitted_0.5 <- cormotiffit(
exprs = exprs.corrmotif,
groupid = groupid_df,
compid = compid_df,
K = 1:8,
max.iter = 1000,
BIC = TRUE,
runtype = "logCPM"
)
gene_prob_0.5 <- motif.fitted_0.5$bestmotif$p.post
rownames(gene_prob_0.5) <- rownames(Corrmotif_df)
motif_prob_0.5 <- motif.fitted_0.5$bestmotif$clustlike
rownames(motif_prob_0.5) <- rownames(gene_prob_0.5)
write.csv(motif_prob_0.5,"data/cormotif_probability_genelist_0.5.csv")
cormotif_0.5 <- readRDS("data/Corrmotif/cormotif_0.5.RDS")
cormotif_0.5$bic
K bic
[1,] 1 352140.7
[2,] 2 346785.8
[3,] 3 344812.9
[4,] 4 344860.1
[5,] 5 344751.9
[6,] 6 344820.8
[7,] 7 344889.7
[8,] 8 344966.6
plotIC(cormotif_0.5)
plotMotif(cormotif_0.5)
# Extract posterior probabilities for genes
gene_prob_tran_0.5 <- cormotif_0.5$bestmotif$p.post
rownames(gene_prob_tran_0.5) <- rownames(Corrmotif_df)
# Define gene probability groups
prob_1_0.5 <- rownames(gene_prob_tran_0.5[(gene_prob_tran_0.5[,1] <0.5 & gene_prob_tran_0.5[,2] <0.5 & gene_prob_tran_0.5[,3] <0.5 & gene_prob_tran_0.5[,4] <0.5 & gene_prob_tran_0.5[,5] < 0.5 & gene_prob_tran_0.5[,6]<0.5),])
length(prob_1_0.5)
[1] 7134
prob_2_0.5 <- rownames(gene_prob_tran_0.5[(gene_prob_tran_0.5[,1] <0.5 & gene_prob_tran_0.5[,2] <0.5 & gene_prob_tran_0.5[,3] <0.5 & gene_prob_tran_0.5[,4] >0.5 & gene_prob_tran_0.5[,5] > 0.5 & gene_prob_tran_0.5[,6]>=0.02),])
length(prob_2_0.5)
[1] 179
prob_3_0.5 <- rownames(gene_prob_tran_0.5[(gene_prob_tran_0.5[,1] <0.5 & gene_prob_tran_0.5[,2] <0.5 & gene_prob_tran_0.5[,3] <0.5 & gene_prob_tran_0.5[,4] <0.5 & gene_prob_tran_0.5[,5] > 0.5 & gene_prob_tran_0.5[,6]>0.5),])
length(prob_3_0.5)
[1] 6450
prob_4_0.5 <- rownames(gene_prob_tran_0.5[(gene_prob_tran_0.5[,1] >= 0.1 & gene_prob_tran_0.5[,2] > 0.5 & gene_prob_tran_0.5[,3] > 0.5 & gene_prob_tran_0.5[,4] >= 0.02 & gene_prob_tran_0.5[,5] < 0.5 & gene_prob_tran_0.5[,6] < 0.5),])
length(prob_4_0.5)
[1] 142
prob_5_0.5 <- rownames(gene_prob_tran_0.5[(gene_prob_tran_0.5[,1] <0.5 & gene_prob_tran_0.5[,2] >0.5 & gene_prob_tran_0.5[,3] >0.5 & gene_prob_tran_0.5[,4] >=0.02 & gene_prob_tran_0.5[,4] <0.5 & gene_prob_tran_0.5[,5] > 0.5 & gene_prob_tran_0.5[,6]>0.5),])
length(prob_5_0.5)
[1] 221
# Load necessary library
library(ggplot2)
# Data
data <- data.frame(
Category = c("Non response (0.5)", "DOX-specific response (0.5 µM)", "DOX only mid-late response (0.5 µM)", "CX + DOX (early) response (0.5 µM)", "DOX + CX (mid-late) response (0.5 µM)"),
Value = c(7134,179,6450,142,221)
)
# Add values to category names (to be displayed in the legend)
data$Category <- paste0(data$Category, " (", data$Value, ")")
# Define custom colors with updated category names
custom_colors <- setNames(
c("#FF9999", "#FF66CC", "#66B2FF", "#99FF99", "#FFD700"),
data$Category # Ensures color names match updated categories
)
# Create pie chart without number labels inside
ggplot(data, aes(x = "", y = Value, fill = Category)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start = 0) +
labs(title = "Pie Chart (0.5 micromolar Corrmotif)", x = NULL, y = NULL) +
theme_void() +
scale_fill_manual(values = custom_colors)
# Load necessary libraries
library(ggplot2)
library(dplyr)
# Data for 0.1 µM
data_0.1 <- data.frame(
Category = c("Non response", "CX-DOX mid-late response", "DOX only mid-late"),
Value = c(12308, 415, 1551),
Concentration = "0.1 µM"
)
# Data for 0.5 µM
data_0.5 <- data.frame(
Category = c("Non response", "DOX specific response", "DOX only mid-late response",
"CX + DOX (early) response", "DOX + CX (mid-late) response"),
Value = c(7134, 179, 6450, 142, 221),
Concentration = "0.5 µM"
)
# Combine both datasets
combined_data <- bind_rows(data_0.1, data_0.5)
# Add values to category names (for legend only)
combined_data$Category_Legend <- paste0(combined_data$Category, " (", combined_data$Value, ")")
# Define custom colors for updated categories
custom_colors <- c(
"Non response (12308)" = "#FF9999",
"CX-DOX mid-late response (415)" = "#66B2FF",
"DOX only mid-late (1551)" = "#99FF99",
"Non response (7134)" = "#FF9999",
"DOX specific response (179)" = "#FF66CC",
"DOX only mid-late response (6450)" = "#99FF99",
"CX + DOX (early) response (142)" = "#FFD700",
"DOX + CX (mid-late) response (221)" = "#8A2BE2"
)
# Ensure categories appear in a specific order
combined_data$Category_Legend <- factor(combined_data$Category_Legend, levels = names(custom_colors))
# Create faceted pie charts without numbers inside the slices
pie_chart <- ggplot(combined_data, aes(x = "", y = Value, fill = Category_Legend)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start = 0) +
facet_wrap(~ Concentration) + # Facet by concentration (side-by-side)
labs(title = "Corrmotif Pie Charts for 0.1 µM and 0.5 µM", x = NULL, y = NULL, fill = "Category") +
theme_void() +
theme(
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.5), # Adds box around facets
strip.background = element_rect(fill = "white", color = "black", linewidth = 1), # Box for facet titles
strip.text = element_text(size = 12, face = "bold", color = "black"),
legend.title = element_text(size = 12, face = "bold"), # Bold legend title
legend.text = element_text(size = 10) # Adjust legend text size
) +
scale_fill_manual(values = custom_colors)
# Display the plot
print(pie_chart)
write.csv(data.frame(Entrez_ID = prob_1_0.5), "data/prob_1_0.5.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_2_0.5), "data/prob_2_0.5.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_3_0.5), "data/prob_3_0.5.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_4_0.5), "data/prob_4_0.5.csv", row.names = FALSE)
write.csv(data.frame(Entrez_ID = prob_5_0.5), "data/prob_5_0.5.csv", row.names = FALSE)
# Load Response Groups from CSV Files
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# Load Datasets (Only 0.5 Micromolar)
CX_0.5_3 <- read.csv("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- read.csv("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- read.csv("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.5_3 <- read.csv("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- read.csv("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- read.csv("data/DEGs/Toptable_DOX_0.5_48.csv")
# Convert datasets to DataFrames
Toptable_CX_0.5_3_df <- data.frame(CX_0.5_3)
Toptable_CX_0.5_24_df <- data.frame(CX_0.5_24)
Toptable_CX_0.5_48_df <- data.frame(CX_0.5_48)
Toptable_DOX_0.5_3_df <- data.frame(DOX_0.5_3)
Toptable_DOX_0.5_24_df <- data.frame(DOX_0.5_24)
Toptable_DOX_0.5_48_df <- data.frame(DOX_0.5_48)
# Combine All 0.5 Micromolar Datasets into a Single Dataframe
all_toptables_0.5 <- bind_rows(
Toptable_CX_0.5_3_df %>% mutate(Drug = "CX.5461", Timepoint = "3"),
Toptable_CX_0.5_24_df %>% mutate(Drug = "CX.5461", Timepoint = "24"),
Toptable_CX_0.5_48_df %>% mutate(Drug = "CX.5461", Timepoint = "48"),
Toptable_DOX_0.5_3_df %>% mutate(Drug = "DOX", Timepoint = "3"),
Toptable_DOX_0.5_24_df %>% mutate(Drug = "DOX", Timepoint = "24"),
Toptable_DOX_0.5_48_df %>% mutate(Drug = "DOX", Timepoint = "48")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.5$Entrez_ID <- as.character(all_toptables_0.5$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 micromolar)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response\n(0.5 micromolar)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response\n(0.5 micromolar)",
Entrez_ID %in% prob_4_0.5 ~ "CX + DOX (early) response\n(0.5 micromolar)",
Entrez_ID %in% prob_5_0.5 ~ "DOX + CX (mid-late) response\n(0.5 micromolar)",
TRUE ~ NA_character_
)
)
# Remove NA Values (Genes Not in Response Groups)
all_toptables_0.5 <- all_toptables_0.5 %>% filter(!is.na(Response_Group))
# Compute Absolute logFC
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(absFC = abs(logFC))
# Convert Factors for Proper Ordering (Reversed Order for Response Groups)
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Drug = factor(Drug, levels = c("CX.5461", "DOX")),
Timepoint = factor(Timepoint, levels = c("3", "24", "48"),
labels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group,
levels = c("DOX + CX (mid-late) response\n(0.5 micromolar)",
"CX + DOX (early) response\n(0.5 micromolar)",
"DOX only mid-late response\n(0.5 micromolar)",
"DOX-specific response\n(0.5 micromolar)",
"Non response\n(0.5 micromolar)")) # Reversed Order
)
# **Plot the Boxplot with Faceted Labels Wrapping Correctly**
ggplot(all_toptables_0.5, aes(x = Drug, y = absFC, fill = Drug)) +
geom_boxplot() +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) + # Custom color palette
facet_grid(Response_Group ~ Timepoint, labeller = label_wrap_gen(width = 20)) + # Ensure Proper Wrapping
theme_bw() +
labs(
x = "Drugs",
y = "|Log Fold Change|",
title = "|Log Fold| for 0.5 micromolar"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.line = element_line(linewidth = 1.5),
strip.background = element_rect(fill = "gray"), # Gray background for facet labels
strip.text = element_text(size = 12, color = "black", face = "bold"), # Bold styling for facet labels
axis.text.x = element_text(size = 10, color = "black", angle = 15)
)
# Load required libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# Load Datasets (Only 0.5 Micromolar)
CX_0.5_3 <- read.csv("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- read.csv("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- read.csv("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.5_3 <- read.csv("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- read.csv("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- read.csv("data/DEGs/Toptable_DOX_0.5_48.csv")
# Combine All 0.5 Micromolar Datasets into a Single Dataframe
all_toptables_0.5 <- bind_rows(
CX_0.5_3 %>% mutate(Drug = "CX.5461", Timepoint = "3"),
CX_0.5_24 %>% mutate(Drug = "CX.5461", Timepoint = "24"),
CX_0.5_48 %>% mutate(Drug = "CX.5461", Timepoint = "48"),
DOX_0.5_3 %>% mutate(Drug = "DOX", Timepoint = "3"),
DOX_0.5_24 %>% mutate(Drug = "DOX", Timepoint = "24"),
DOX_0.5_48 %>% mutate(Drug = "DOX", Timepoint = "48")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.5$Entrez_ID <- as.character(all_toptables_0.5$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 micromolar)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response\n(0.5 micromolar)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response\n(0.5 micromolar)",
Entrez_ID %in% prob_4_0.5 ~ "CX + DOX (early) response\n(0.5 micromolar)",
Entrez_ID %in% prob_5_0.5 ~ "DOX + CX (mid-late) response\n(0.5 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group)) # Remove NA values
# Compute Mean Absolute logFC for Line Plot
data_summary <- all_toptables_0.5 %>%
mutate(abs_logFC = abs(logFC)) %>%
group_by(Response_Group, Drug, Timepoint) %>%
dplyr::summarize(mean_abs_logFC = mean(abs_logFC, na.rm = TRUE), .groups = "drop") %>%
as.data.frame()
# **Ensure all timepoints exist in the summary**
timepoints_full <- expand.grid(
Response_Group = unique(all_toptables_0.5$Response_Group),
Drug = unique(all_toptables_0.5$Drug),
Timepoint = c("3", "24", "48")
)
# **Merge to keep missing timepoints**
data_summary <- full_join(timepoints_full, data_summary, by = c("Response_Group", "Drug", "Timepoint"))
# **Replace NA mean_abs_logFC with 0 if no genes were present**
data_summary$mean_abs_logFC[is.na(data_summary$mean_abs_logFC)] <- 0
# Convert Factors for Proper Ordering (Reversed Order for Response Groups)
data_summary <- data_summary %>%
mutate(
Timepoint = factor(Timepoint, levels = c("3", "24", "48"), labels = c("3 hours", "24 hours", "48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX + CX (mid-late) response\n(0.5 micromolar)",
"CX + DOX (early) response\n(0.5 micromolar)",
"DOX only mid-late response\n(0.5 micromolar)",
"DOX-specific response\n(0.5 micromolar)",
"Non response\n(0.5 micromolar)" # Reversed order
))
)
# Define custom drug palette
drug_palette <- c("CX.5461" = "blue", "DOX" = "red")
# **Plot the Line Plot for Mean Absolute logFC**
ggplot(data_summary, aes(x = Timepoint, y = mean_abs_logFC, group = Drug, color = Drug)) +
geom_point(size = 3) +
geom_line(size = 1.2) +
scale_color_manual(values = drug_palette) +
ylim(0, 2.5) + # Adjust the Y-axis for better visualization
facet_wrap(~ Response_Group, ncol = 1) + # Facet by Response Group (Reversed Order)
theme_bw() +
labs(
x = "Timepoints",
y = "Mean |Log Fold Change|",
title = "Mean |Log Fold Change| Across Response Groups (0.5 micromolar)",
color = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text = element_text(size = 12, color = "black"),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
# Load required libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# Load Datasets (Only 0.5 Micromolar)
CX_0.5_3 <- read.csv("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- read.csv("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- read.csv("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.5_3 <- read.csv("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- read.csv("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- read.csv("data/DEGs/Toptable_DOX_0.5_48.csv")
# Combine All 0.5 Micromolar Datasets into a Single Dataframe
all_toptables_0.5 <- bind_rows(
CX_0.5_3 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 3 hours"),
CX_0.5_24 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 24 hours"),
CX_0.5_48 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 48 hours"),
DOX_0.5_3 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 3 hours"),
DOX_0.5_24 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 24 hours"),
DOX_0.5_48 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 48 hours")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.5$Entrez_ID <- as.character(all_toptables_0.5$Entrez_ID)
# Assign Response Groups
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 micromolar)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response\n(0.5 micromolar)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response\n(0.5 micromolar)",
Entrez_ID %in% prob_4_0.5 ~ "CX + DOX (early) response\n(0.5 micromolar)",
Entrez_ID %in% prob_5_0.5 ~ "DOX + CX (mid-late) response\n(0.5 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# Convert factors to ensure correct ordering (Reversed Order for Response Groups)
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Timepoint = factor(Timepoint, levels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX + CX (mid-late) response\n(0.5 micromolar)",
"CX + DOX (early) response\n(0.5 micromolar)",
"DOX only mid-late response\n(0.5 micromolar)",
"DOX-specific response\n(0.5 micromolar)",
"Non response\n(0.5 micromolar)" # Reversed Order
))
)
# **Plot the Boxplot**
ggplot(all_toptables_0.5, aes(x = Drug, y = logFC, fill = Drug)) +
geom_boxplot() +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) +
facet_grid(Response_Group ~ Timepoint) +
theme_bw() +
labs(x = "Drugs", y = "Log Fold Change", title = "Log Fold Change for 0.5 Micromolar") +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
strip.text = element_text(size = 12, face = "bold")
)
# Load Required Libraries
library(dplyr)
library(ggplot2)
# Load Response Groups from CSV Files
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# Load Datasets (Only 0.5 Micromolar)
CX_0.5_3 <- read.csv("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- read.csv("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- read.csv("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.5_3 <- read.csv("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- read.csv("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- read.csv("data/DEGs/Toptable_DOX_0.5_48.csv")
# Combine All 0.5 Micromolar Datasets into a Single Dataframe
all_toptables_0.5 <- bind_rows(
CX_0.5_3 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 3 hours"),
CX_0.5_24 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 24 hours"),
CX_0.5_48 %>% mutate(Drug = "CX.5461", Timepoint = "Timepoint: 48 hours"),
DOX_0.5_3 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 3 hours"),
DOX_0.5_24 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 24 hours"),
DOX_0.5_48 %>% mutate(Drug = "DOX", Timepoint = "Timepoint: 48 hours")
)
# Convert `Entrez_ID` to Character to Avoid `%in%` Issues
all_toptables_0.5$Entrez_ID <- as.character(all_toptables_0.5$Entrez_ID)
# Assign Response Groups with Line Breaks for Better Plotting
all_toptables_0.5 <- all_toptables_0.5 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 micromolar)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response\n(0.5 micromolar)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response\n(0.5 micromolar)",
Entrez_ID %in% prob_4_0.5 ~ "CX + DOX (early) response\n(0.5 micromolar)",
Entrez_ID %in% prob_5_0.5 ~ "DOX + CX (mid-late) response\n(0.5 micromolar)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# Compute Mean logFC for Line Plot
data_summary_0.5 <- all_toptables_0.5 %>%
group_by(Response_Group, Drug, Timepoint) %>%
dplyr::summarize(mean_logFC = mean(logFC, na.rm = TRUE), .groups = "drop") %>%
as.data.frame()
# **Ensure all timepoints exist in the summary**
timepoints_full <- expand.grid(
Response_Group = unique(all_toptables_0.5$Response_Group),
Drug = unique(all_toptables_0.5$Drug),
Timepoint = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")
)
# **Merge to keep missing timepoints**
data_summary_0.5 <- full_join(timepoints_full, data_summary_0.5, by = c("Response_Group", "Drug", "Timepoint"))
# **Replace NA mean_logFC with 0 if no genes were present**
data_summary_0.5$mean_logFC[is.na(data_summary_0.5$mean_logFC)] <- 0
# Convert Factors for Proper Ordering (Reversed Order for Response Groups)
data_summary_0.5 <- data_summary_0.5 %>%
mutate(
Timepoint = factor(Timepoint, levels = c("Timepoint: 3 hours", "Timepoint: 24 hours", "Timepoint: 48 hours")),
Response_Group = factor(Response_Group, levels = c(
"DOX + CX (mid-late) response\n(0.5 micromolar)",
"CX + DOX (early) response\n(0.5 micromolar)",
"DOX only mid-late response\n(0.5 micromolar)",
"DOX-specific response\n(0.5 micromolar)",
"Non response\n(0.5 micromolar)" # Reversed Order
))
)
# Define custom drug palette
drug_palette <- c("CX.5461" = "blue", "DOX" = "red")
# **Plot the Line Plot for Mean logFC**
ggplot(data_summary_0.5, aes(x = Timepoint, y = mean_logFC, group = Drug, color = Drug)) +
geom_point(size = 3) +
geom_line(size = 1.2) +
scale_color_manual(values = drug_palette) +
ylim(-2, 1.5) + # Adjust the Y-axis for better visualization
facet_wrap(~ Response_Group, ncol = 1) + # Facet by Response Group (Reversed Order)
theme_bw() +
labs(
x = "Timepoints",
y = "Mean Log Fold Change",
title = "Mean Log Fold Change Across Response Groups (0.5 micromolar)",
color = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text = element_text(size = 12, color = "black"),
strip.text = element_text(size = 12, color = "black", face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
# Load necessary libraries
library(dplyr)
library(ggplot2)
library(tidyr)
Warning: package 'tidyr' was built under R version 4.3.3
library(org.Hs.eg.db)
Warning: package 'AnnotationDbi' was built under R version 4.3.2
Warning: package 'IRanges' was built under R version 4.3.1
Warning: package 'S4Vectors' was built under R version 4.3.2
# **🔹 Read DNA Damage Repair Gene List**
DNA_damage <- read.csv("data/DNA_Damage.csv", stringsAsFactors = FALSE)
# Convert gene symbols to Entrez IDs
DNA_damage <- DNA_damage %>%
mutate(Entrez_ID = mapIds(org.Hs.eg.db,
keys = DNA_damage$Symbol,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"))
DNA_damage_genes <- na.omit(DNA_damage$Entrez_ID)
# **🔹 Load Corrmotif Groups for 0.1 Concentration**
prob_groups_0.1 <- list(
"Non Response (0.1)" = read.csv("data/prob_1_0.1.csv")$Entrez_ID,
"CX_DOX mid-late (0.1)" = read.csv("data/prob_2_0.1.csv")$Entrez_ID,
"DOX only mid-late (0.1)"= read.csv("data/prob_3_0.1.csv")$Entrez_ID
)
# **🔹 Create Dataframe for Corrmotif Groups**
corrmotif_df_0.1 <- bind_rows(
lapply(prob_groups_0.1, function(ids) {
data.frame(Entrez_ID = ids)
}),
.id = "Response_Group"
)
# **🔹 Match Entrez_IDs with DNA Damage Repair Genes**
corrmotif_df_0.1 <- corrmotif_df_0.1 %>%
mutate(DNA_Damage = ifelse(Entrez_ID %in% DNA_damage_genes, "Yes", "No"))
# **🔹 Count DNA Damage Repair Genes in Each Response Group**
proportion_data <- corrmotif_df_0.1 %>%
group_by(Response_Group, DNA_Damage) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = (Count / sum(Count)) * 100)
# **🔹 Ensure "Yes" is at the Bottom and "No" at the Top**
proportion_data$DNA_Damage <- factor(proportion_data$DNA_Damage, levels = c("Yes", "No"))
# **🔹 Set Order of Response Groups for X-axis**
response_order <- c("Non Response (0.1)", "CX_DOX mid-late (0.1)","DOX only mid-late (0.1)")
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = response_order)
# **🔹 Perform Chi-Square Tests for "DOX only mid-late (0.1)" and "CX_DOX mid-late (0.1)" vs "Non Response (0.1)"**
non_response_counts <- proportion_data %>%
filter(Response_Group == "Non Response (0.1)") %>%
dplyr::select(DNA_Damage, Count) %>%
{setNames(.$Count, .$DNA_Damage)} # Convert to named vector
chi_results <- proportion_data %>%
filter(Response_Group %in% c("CX_DOX mid-late (0.1)","DOX only mid-late (0.1)")) %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[DNA_Damage %in% c("Yes", "No")]
if (!"Yes" %in% DNA_Damage) group_counts <- c(group_counts, 0)
if (!"No" %in% DNA_Damage) group_counts <- c(0, group_counts)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
non_response_counts["Yes"], non_response_counts["No"]
), nrow = 2, byrow = TRUE)
# Perform chi-square test if all values are valid
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
# **🔹 Merge Chi-Square Results into Proportion Data**
proportion_data <- proportion_data %>%
left_join(chi_results %>% dplyr::select(Response_Group, Significance), by = "Response_Group")
# **🔹 Set Star Position Uniform Across Groups at 105%**
star_positions <- data.frame(
Response_Group = c("CX_DOX mid-late (0.1)", "DOX only mid-late (0.1)"),
y_pos = 105, # Fixed at 105% of Y-axis
Significance = chi_results$Significance
)
# **🔹 Generate Proportion Plot with Chi-Square Stars**
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = DNA_Damage)) +
geom_bar(stat = "identity", position = "stack") + # Stacked bars
geom_text(
data = star_positions,
aes(x = Response_Group, y = y_pos, label = Significance), # Place stars at fixed 105%
inherit.aes = FALSE,
size = 6, color = "black", fontface = "bold", vjust = 0 # Keeps stars aligned
) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 110)) + # Fixed Y-axis to 100%
scale_fill_manual(values = c("Yes" = "#e41a1c", "No" = "#377eb8")) + # Yes (Red), No (Blue)
labs(
title = "Proportion of DNA Damage Repair Genes in\n0.1 Corrmotif Response Groups",
x = "Response Groups (0.1 Concentration)",
y = "Percentage",
fill = "DNA Damage Repair"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
legend.title = element_blank(),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2),
strip.background = element_blank(),
strip.text = element_text(size = 12, face = "bold")
)
# Load necessary libraries
library(dplyr)
library(ggplot2)
library(tidyr)
library(org.Hs.eg.db)
# **🔹 Read DNA Damage Repair Gene List**
DNA_damage <- read.csv("data/DNA_Damage.csv", stringsAsFactors = FALSE)
# Convert gene symbols to Entrez IDs
DNA_damage <- DNA_damage %>%
mutate(Entrez_ID = mapIds(org.Hs.eg.db,
keys = DNA_damage$Symbol,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"))
DNA_damage_genes <- na.omit(DNA_damage$Entrez_ID)
# **🔹 Load Corrmotif Groups for 0.5 Concentration**
prob_groups_0.5 <- list(
"Non Response (0.5)" = read.csv("data/prob_1_0.5.csv")$Entrez_ID,
"DOX-specific response (0.5)" = read.csv("data/prob_2_0.5.csv")$Entrez_ID,
"DOX only mid-late response (0.5)" = read.csv("data/prob_3_0.5.csv")$Entrez_ID,
"CX DOX (early) response (0.5)" = read.csv("data/prob_4_0.5.csv")$Entrez_ID,
"DOX + CX (mid-late) response (0.5)" = read.csv("data/prob_5_0.5.csv")$Entrez_ID
)
# **🔹 Create Dataframe for Corrmotif Groups**
corrmotif_df_0.5 <- bind_rows(
lapply(prob_groups_0.5, function(ids) {
data.frame(Entrez_ID = ids)
}),
.id = "Response_Group"
)
# **🔹 Match Entrez_IDs with DNA Damage Repair Genes**
corrmotif_df_0.5 <- corrmotif_df_0.5 %>%
mutate(DNA_Damage = ifelse(Entrez_ID %in% DNA_damage_genes, "Yes", "No"))
# **🔹 Count DNA Damage Repair Genes in Each Response Group**
proportion_data <- corrmotif_df_0.5 %>%
group_by(Response_Group, DNA_Damage) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = (Count / sum(Count)) * 100)
# **🔹 Ensure "Yes" is at the Bottom and "No" at the Top**
proportion_data$DNA_Damage <- factor(proportion_data$DNA_Damage, levels = c("Yes", "No"))
# **🔹 Set Order of Response Groups for X-axis**
response_order <- c("Non Response (0.5)", "DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)")
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = response_order)
# **🔹 Perform Chi-Square Tests for Each Response Group vs Non-Response**
non_response_counts <- proportion_data %>%
filter(Response_Group == "Non Response (0.5)") %>%
dplyr::select(DNA_Damage, Count) %>%
{setNames(.$Count, .$DNA_Damage)} # Convert to named vector
# **Comparing Each Group Against "Non Response (0.5)"**
chi_results <- proportion_data %>%
filter(Response_Group %in% c("DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)")) %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[DNA_Damage %in% c("Yes", "No")]
if (!"Yes" %in% DNA_Damage) group_counts <- c(group_counts, 0)
if (!"No" %in% DNA_Damage) group_counts <- c(0, group_counts)
contingency_table <- matrix(c(
group_counts[1], group_counts[2], # Response group counts
non_response_counts["Yes"], non_response_counts["No"] # Non-response counts
), nrow = 2, byrow = TRUE)
# Perform chi-square test if all values are valid
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
# **🔹 Merge Chi-Square Results into Proportion Data**
proportion_data <- proportion_data %>%
left_join(chi_results %>% dplyr::select(Response_Group, Significance), by = "Response_Group")
# **🔹 Set Star Position Uniform Across Groups at 105%**
star_positions <- data.frame(
Response_Group = c("DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)"),
y_pos = 105, # Fixed at 105% of Y-axis
Significance = chi_results$Significance
)
# **🔹 Generate Proportion Plot with Chi-Square Stars**
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = DNA_Damage)) +
geom_bar(stat = "identity", position = "stack") + # Stacked bars
geom_text(
data = star_positions,
aes(x = Response_Group, y = y_pos, label = Significance), # Place stars at fixed 105%
inherit.aes = FALSE,
size = 6, color = "black", fontface = "bold", vjust = 0 # Keeps stars aligned
) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 110)) + # **Y-axis now limited to 110% for visibility**
scale_fill_manual(values = c("Yes" = "#e41a1c", "No" = "#377eb8")) + # Yes (Red), No (Blue)
labs(
title = "Proportion of DNA Damage Repair Genes in\n0.5 Corrmotif Response Groups",
x = "Response Groups (0.5 Concentration)",
y = "Percentage",
fill = "DNA Damage Repair Genes"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
legend.title = element_blank(),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2),
strip.background = element_blank(),
strip.text = element_text(size = 12, face = "bold")
)
# Load Required Libraries
library(dplyr)
library(ggplot2)
library(org.Hs.eg.db)
library(AnnotationDbi)
# ----------------- Load DNA Damage Genes -----------------
DNA_damage <- read.csv("data/DNA_Damage.csv", stringsAsFactors = FALSE)
DNA_damage$Entrez_ID <- mapIds(
org.Hs.eg.db,
keys = DNA_damage$Symbol,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"
)
dna_damage_ids <- na.omit(DNA_damage$Entrez_ID)
# ----------------- Load CorrMotif Groups -----------------
# 0.1 µM
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# 0.5 µM
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# ----------------- Annotate CorrMotif Groups -----------------
df_0.1 <- data.frame(Entrez_ID = unique(c(prob_1_0.1, prob_2_0.1, prob_3_0.1))) %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response"
),
Category = ifelse(Entrez_ID %in% dna_damage_ids, "Yes", "No"),
Concentration = "0.1 µM"
)
df_0.5 <- data.frame(Entrez_ID = unique(c(prob_1_0.5, prob_2_0.5, prob_3_0.5, prob_4_0.5, prob_5_0.5))) %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response",
Entrez_ID %in% prob_4_0.5 ~ "CX total + DOX early response",
Entrez_ID %in% prob_5_0.5 ~ "DOX early + CX-DOX mid-late response"
),
Category = ifelse(Entrez_ID %in% dna_damage_ids, "Yes", "No"),
Concentration = "0.5 µM"
)
# ----------------- Combine All -----------------
df_combined <- bind_rows(df_0.1, df_0.5)
# ----------------- Calculate Proportions -----------------
proportion_data <- df_combined %>%
group_by(Concentration, Response_Group, Category) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Concentration, Response_Group) %>%
mutate(Percentage = Count / sum(Count) * 100)
# ----------------- Set Order: "Yes" at bottom -----------------
proportion_data$Category <- factor(proportion_data$Category, levels = c("Yes", "No"))
# ----------------- Chi-square or Fisher's Test -----------------
get_chi_or_fisher <- function(df, ref_group) {
ref_counts <- df %>%
ungroup() %>%
filter(Response_Group == ref_group) %>%
dplyr::select(Category, Count) %>%
{setNames(.$Count, .$Category)}
df %>%
filter(Response_Group != ref_group) %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[Category %in% c("Yes", "No")]
if (length(group_counts) < 2) group_counts <- c(group_counts, 0)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
ref_counts["Yes"], ref_counts["No"]
), nrow = 2)
if (any(contingency_table < 5)) {
fisher.test(contingency_table)$p.value
} else {
chisq.test(contingency_table)$p.value
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
}
# Perform tests
chi_0.1 <- get_chi_or_fisher(proportion_data %>% filter(Concentration == "0.1 µM"), "Non response")
chi_0.5 <- get_chi_or_fisher(proportion_data %>% filter(Concentration == "0.5 µM"), "Non response")
chi_all <- bind_rows(
chi_0.1 %>% mutate(Concentration = "0.1 µM"),
chi_0.5 %>% mutate(Concentration = "0.5 µM")
)
proportion_data <- proportion_data %>%
left_join(chi_all, by = c("Concentration", "Response_Group"))
# ----------------- Factor Levels -----------------
proportion_data$Concentration <- factor(proportion_data$Concentration, levels = c("0.1 µM", "0.5 µM"))
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = c(
"Non response",
"CX-DOX mid-late response",
"DOX-specific response",
"DOX only mid-late response",
"CX total + DOX early response",
"DOX early + CX-DOX mid-late response"
))
# ----------------- Star Positions -----------------
label_data <- proportion_data %>%
group_by(Concentration, Response_Group) %>%
summarise(Significance = dplyr::first(Significance), .groups = "drop") %>%
filter(Significance == "*") %>%
mutate(y_pos = 105)
# ----------------- Stack Order -----------------
proportion_data <- proportion_data %>%
arrange(Concentration, Response_Group, Category)
# ----------------- Plot -----------------
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = Category)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
data = label_data,
aes(x = Response_Group, y = y_pos, label = Significance),
inherit.aes = FALSE,
size = 5, color = "black"
) +
facet_wrap(~ Concentration, scales = "free_x") +
scale_fill_manual(values = c("Yes" = "#e41a1c", "No" = "#377eb8")) +
scale_y_continuous(limits = c(0, 110), expand = c(0, 0)) +
labs(
title = "DNA Damage Gene Proportions Across\nCormotif Clusters (0.1 and 0.5 µM)",
x = "Response Groups",
y = "Percentage of Genes",
fill = "DNA Damage Gene"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(size = 16, hjust = 0.5, face = "bold"),
axis.title.x = element_text(size = 14, face = "bold"),
axis.title.y = element_text(size = 14, face = "bold"),
axis.text.x = element_text(size = 11, angle = 45, hjust = 1),
axis.text.y = element_text(size = 12),
legend.title = element_text(size = 13),
legend.text = element_text(size = 12),
strip.text = element_text(size = 14, face = "bold"),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2),
panel.spacing = unit(1.2, "lines")
)
# Load libraries
library(tidyverse)
library(ComplexHeatmap)
library(circlize)
library(grid)
library(org.Hs.eg.db)
library(reshape2)
# Load DEG files
load_deg <- function(path) read.csv(path)
CX_0.1_3 <- load_deg("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- load_deg("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- load_deg("data/DEGs/Toptable_CX_0.1_48.csv")
CX_0.5_3 <- load_deg("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- load_deg("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- load_deg("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.1_3 <- load_deg("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- load_deg("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- load_deg("data/DEGs/Toptable_DOX_0.1_48.csv")
DOX_0.5_3 <- load_deg("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- load_deg("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- load_deg("data/DEGs/Toptable_DOX_0.5_48.csv")
# DNA damage response Entrez IDs
entrez_ids <- c(
10111, 1017, 1019, 1020, 1021, 1026, 1027, 10912, 11011, 1111,
11200, 1385, 1643, 1647, 1869, 207, 2177, 25, 27113, 27244,
3014, 317, 355, 4193, 4292, 4361, 4609, 4616, 4683, 472, 50484,
5366, 5371, 54205, 545, 55367, 5591, 581, 5810, 5883, 5884,
5888, 5893, 5925, 595, 5916, 5981, 6118, 637, 672, 7157, 7799,
8243, 836, 841, 84126, 842, 8795, 891, 894, 896, 898, 9133,
9134, 983, 9874, 993, 995
)
# Function to extract relevant data
extract_data <- function(df, name) {
df %>%
filter(Entrez_ID %in% entrez_ids) %>%
mutate(Gene = mapIds(org.Hs.eg.db, as.character(Entrez_ID),
column = "SYMBOL", keytype = "ENTREZID", multiVals = "first"),
Condition = name,
Signif = ifelse(adj.P.Val < 0.05, "*", ""))
}
# Collect all data
deg_list <- list(
"CX_0.1_3" = CX_0.1_3, "CX_0.1_24" = CX_0.1_24, "CX_0.1_48" = CX_0.1_48,
"CX_0.5_3" = CX_0.5_3, "CX_0.5_24" = CX_0.5_24, "CX_0.5_48" = CX_0.5_48,
"DOX_0.1_3" = DOX_0.1_3, "DOX_0.1_24" = DOX_0.1_24, "DOX_0.1_48" = DOX_0.1_48,
"DOX_0.5_3" = DOX_0.5_3, "DOX_0.5_24" = DOX_0.5_24, "DOX_0.5_48" = DOX_0.5_48
)
all_data <- bind_rows(mapply(extract_data, deg_list, names(deg_list), SIMPLIFY = FALSE))
# Create matrices
logFC_mat <- acast(all_data, Gene ~ Condition, value.var = "logFC")
signif_mat <- acast(all_data, Gene ~ Condition, value.var = "Signif")
# Desired column order
desired_order <- c("CX_0.1_3", "CX_0.1_24", "CX_0.1_48",
"CX_0.5_3", "CX_0.5_24", "CX_0.5_48",
"DOX_0.1_3", "DOX_0.1_24", "DOX_0.1_48",
"DOX_0.5_3", "DOX_0.5_24", "DOX_0.5_48")
logFC_mat <- logFC_mat[, desired_order]
signif_mat <- signif_mat[, desired_order]
# Column annotation
meta <- str_split_fixed(colnames(logFC_mat), "_", 3)
col_annot <- HeatmapAnnotation(
Drug = meta[, 1],
Conc = meta[, 2],
Time = meta[, 3],
col = list(
Drug = c("CX" = "blue", "DOX" = "red"),
Conc = c("0.1" = "lightgreen", "0.5" = "darkgreen"),
Time = c("3" = "yellow", "24" = "orange", "48" = "purple")
),
annotation_height = unit(c(2, 2, 2), "cm")
)
# Draw heatmap
Heatmap(logFC_mat,
name = "logFC",
top_annotation = col_annot,
cluster_columns = FALSE,
cluster_rows = TRUE,
show_row_names = TRUE,
show_column_names = FALSE,
cell_fun = function(j, i, x, y, width, height, fill) {
grid.text(signif_mat[i, j], x, y, gp = gpar(fontsize = 9))
},
column_title = "DNA Damage Response Genes\nCX-5461 and DOX Expression",
column_title_gp = gpar(fontsize = 14, fontface = "bold")
)
# Load necessary libraries
library(dplyr)
library(ggplot2)
library(tidyr)
library(org.Hs.eg.db)
# **🔹 Read P53 Target Gene List**
P53_Target <- read.csv("data/P53_Target.csv", stringsAsFactors = FALSE)
# Convert gene symbols to Entrez IDs
P53_Target <- P53_Target %>%
mutate(Entrez_ID = mapIds(org.Hs.eg.db,
keys = P53_Target$Symbol,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"))
P53_Target_genes <- na.omit(P53_Target$Entrez_ID)
# **🔹 Load Corrmotif Groups for 0.1 Concentration**
prob_groups_0.1 <- list(
"Non Response (0.1)" = read.csv("data/prob_1_0.1.csv")$Entrez_ID,
"CX_DOX mid-late (0.1)" = read.csv("data/prob_2_0.1.csv")$Entrez_ID,
"DOX only mid-late (0.1)"= read.csv("data/prob_3_0.1.csv")$Entrez_ID
)
# **🔹 Create Dataframe for Corrmotif Groups**
corrmotif_df_0.1 <- bind_rows(
lapply(prob_groups_0.1, function(ids) {
data.frame(Entrez_ID = ids)
}),
.id = "Response_Group"
)
# **🔹 Match Entrez_IDs with P53 Target Genes**
corrmotif_df_0.1 <- corrmotif_df_0.1 %>%
mutate(P53_Target = ifelse(Entrez_ID %in% P53_Target_genes, "Yes", "No"))
# **🔹 Count P53 Target Genes in Each Response Group**
proportion_data <- corrmotif_df_0.1 %>%
group_by(Response_Group, P53_Target) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = (Count / sum(Count)) * 100)
# **🔹 Ensure "Yes" is at the Bottom and "No" at the Top**
proportion_data$P53_Target <- factor(proportion_data$P53_Target, levels = c("Yes", "No"))
# **🔹 Set Order of Response Groups for X-axis**
response_order <- c("Non Response (0.1)", "CX_DOX mid-late (0.1)", "DOX only mid-late (0.1)")
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = response_order)
# **🔹 Perform Chi-Square Tests for "DOX only mid-late (0.1)" and "CX_DOX mid-late (0.1)" vs "Non Response (0.1)"**
non_response_counts <- proportion_data %>%
filter(Response_Group == "Non Response (0.1)") %>%
dplyr::select(P53_Target, Count) %>%
{setNames(.$Count, .$P53_Target)} # Convert to named vector
chi_results <- proportion_data %>%
filter(Response_Group %in% c("CX_DOX mid-late (0.1)","DOX only mid-late (0.1)")) %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[P53_Target %in% c("Yes", "No")]
if (!"Yes" %in% P53_Target) group_counts <- c(group_counts, 0)
if (!"No" %in% P53_Target) group_counts <- c(0, group_counts)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
non_response_counts["Yes"], non_response_counts["No"]
), nrow = 2, byrow = TRUE)
# Perform chi-square test if all values are valid
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
# **🔹 Merge Chi-Square Results into Proportion Data**
proportion_data <- proportion_data %>%
left_join(chi_results %>% dplyr::select(Response_Group, Significance), by = "Response_Group")
# **🔹 Set Star Position Uniform Across Groups at 105%**
star_positions <- data.frame(
Response_Group = c("CX_DOX mid-late (0.1)","DOX only mid-late (0.1)"),
y_pos = 105, # Fixed at 105% of Y-axis
Significance = chi_results$Significance
)
# **🔹 Generate Proportion Plot with Chi-Square Stars**
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = P53_Target)) +
geom_bar(stat = "identity", position = "stack") + # Stacked bars
geom_text(
data = star_positions,
aes(x = Response_Group, y = y_pos, label = Significance), # Place stars at fixed 105%
inherit.aes = FALSE,
size = 6, color = "black", fontface = "bold", vjust = 0 # Keeps stars aligned
) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 110)) + # Fixed Y-axis to 100%
scale_fill_manual(values = c("Yes" = "#e41a1c", "No" = "#377eb8")) + # Yes (Red), No (Blue)
labs(
title = "Proportion of P53 Target Genes in\n0.1 Corrmotif Response Groups",
x = "Response Groups (0.1 Concentration)",
y = "Percentage",
fill = "P53 Target Genes"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
legend.title = element_blank(),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2),
strip.background = element_blank(),
strip.text = element_text(size = 12, face = "bold")
)
# Load necessary libraries
library(dplyr)
library(ggplot2)
library(tidyr)
library(org.Hs.eg.db)
# **🔹 Read P53 Target Gene List**
P53_Target <- read.csv("data/P53_Target.csv", stringsAsFactors = FALSE)
# Convert gene symbols to Entrez IDs
P53_Target <- P53_Target %>%
mutate(Entrez_ID = mapIds(org.Hs.eg.db,
keys = P53_Target$Symbol,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"))
P53_Target_genes <- na.omit(P53_Target$Entrez_ID)
# **🔹 Load Corrmotif Groups for 0.5 Concentration**
prob_groups_0.5 <- list(
"Non Response (0.5)" = read.csv("data/prob_1_0.5.csv")$Entrez_ID,
"DOX-specific response (0.5)" = read.csv("data/prob_2_0.5.csv")$Entrez_ID,
"DOX only mid-late response (0.5)" = read.csv("data/prob_3_0.5.csv")$Entrez_ID,
"CX DOX (early) response (0.5)" = read.csv("data/prob_4_0.5.csv")$Entrez_ID,
"DOX + CX (mid-late) response (0.5)" = read.csv("data/prob_5_0.5.csv")$Entrez_ID
)
# **🔹 Create Dataframe for Corrmotif Groups**
corrmotif_df_0.5 <- bind_rows(
lapply(prob_groups_0.5, function(ids) {
data.frame(Entrez_ID = ids)
}),
.id = "Response_Group"
)
# **🔹 Match Entrez_IDs with P53 Target Genes**
corrmotif_df_0.5 <- corrmotif_df_0.5 %>%
mutate(P53_Target = ifelse(Entrez_ID %in% P53_Target_genes, "Yes", "No"))
# **🔹 Count P53 Target Genes in Each Response Group**
proportion_data <- corrmotif_df_0.5 %>%
group_by(Response_Group, P53_Target) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = (Count / sum(Count)) * 100)
# **🔹 Ensure "Yes" is at the Bottom and "No" at the Top**
proportion_data$P53_Target <- factor(proportion_data$P53_Target, levels = c("Yes", "No"))
# **🔹 Set Order of Response Groups for X-axis**
response_order <- c("Non Response (0.5)", "DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)")
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = response_order)
# **🔹 Perform Chi-Square Tests for Each Response Group vs Non-Response**
non_response_counts <- proportion_data %>%
filter(Response_Group == "Non Response (0.5)") %>%
dplyr::select(P53_Target, Count) %>%
{setNames(.$Count, .$P53_Target)} # Convert to named vector
# **Comparing Each Group Against "Non Response (0.5)"**
chi_results <- proportion_data %>%
filter(Response_Group %in% c("DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)")) %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[P53_Target %in% c("Yes", "No")]
if (!"Yes" %in% P53_Target) group_counts <- c(group_counts, 0)
if (!"No" %in% P53_Target) group_counts <- c(0, group_counts)
contingency_table <- matrix(c(
group_counts[1], group_counts[2], # Response group counts
non_response_counts["Yes"], non_response_counts["No"] # Non-response counts
), nrow = 2, byrow = TRUE)
# Perform chi-square test if all values are valid
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
Warning: There was 1 warning in `summarise()`.
ℹ In argument: `p_value = { ... }`.
ℹ In group 3: `Response_Group = CX DOX (early) response (0.5)`.
Caused by warning in `chisq.test()`:
! Chi-squared approximation may be incorrect
# **🔹 Merge Chi-Square Results into Proportion Data**
proportion_data <- proportion_data %>%
left_join(chi_results %>% dplyr::select(Response_Group, Significance), by = "Response_Group")
# **🔹 Set Star Position Uniform Across Groups at 105%**
star_positions <- data.frame(
Response_Group = c("DOX-specific response (0.5)", "DOX only mid-late response (0.5)",
"CX DOX (early) response (0.5)", "DOX + CX (mid-late) response (0.5)"),
y_pos = 105, # Fixed at 105% of Y-axis
Significance = chi_results$Significance
)
# **🔹 Generate Proportion Plot with Chi-Square Stars**
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = P53_Target)) +
geom_bar(stat = "identity", position = "stack") + # Stacked bars
geom_text(
data = star_positions,
aes(x = Response_Group, y = y_pos, label = Significance), # Place stars at fixed 105%
inherit.aes = FALSE,
size = 6, color = "black", fontface = "bold", vjust = 0 # Keeps stars aligned
) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 110)) + # **Y-axis now limited to 110% for visibility**
scale_fill_manual(values = c("Yes" = "#e41a1c", "No" = "#377eb8")) + # Yes (Red), No (Blue)
labs(
title = "Proportion of P53 Target Genes in\n0.5 Corrmotif Response Groups",
x = "Response Groups (0.5 Concentration)",
y = "Percentage",
fill = "P53 Target Genes"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.text.x = element_text(size = 10, angle = 45, hjust = 1),
legend.title = element_blank(),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2),
strip.background = element_blank(),
strip.text = element_text(size = 12, face = "bold")
)
# Load libraries
library(tidyverse)
library(ComplexHeatmap)
library(circlize)
library(grid)
library(org.Hs.eg.db)
library(reshape2)
# Load DEG files
load_deg <- function(path) read.csv(path)
CX_0.1_3 <- load_deg("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- load_deg("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- load_deg("data/DEGs/Toptable_CX_0.1_48.csv")
CX_0.5_3 <- load_deg("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- load_deg("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- load_deg("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.1_3 <- load_deg("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- load_deg("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- load_deg("data/DEGs/Toptable_DOX_0.1_48.csv")
DOX_0.5_3 <- load_deg("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- load_deg("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- load_deg("data/DEGs/Toptable_DOX_0.5_48.csv")
# P53 target Entrez IDs (shortened for clarity – replace with your full list)
entrez_ids <- c(1026,50484,4193,9766,9518,7832,1643,1647,1263,57103,51065,8795,51499,64393,581,
5228,5429,8493,55959,7508,64782,282991,355,53836,4814,10769,9050,27244,9540,94241,
26154,57763,900,26999,55332,26263,23479,23612,29950,9618,10346,8824,134147,55294,
22824,4254,6560,467,27113,60492,8444,60401,1969,220965,2232,3976,55191,84284,93129,
5564,7803,83667,7779,132671,7039,51768,137695,93134,7633,10973,340485,307,27350,
23245,3732,29965,1363,1435,196513,8507,8061,2517,51278,53354,54858,23228,5366,5912,
6236,51222,26152,59,1907,50650,91012,780,9249,11072,144455,64787,116151,27165,2876,
57822,55733,57722,121457,375449,85377,4851,5875,127544,29901,84958,8797,8793,441631,
220001,54541,5889,5054,25816,25987,5111,98,317,598,604,10904,1294,80315,53944,
1606,2770,3628,3675,3985,4035,4163,84552,29085,55367,5371,5791,54884,5980,8794,
1462,50808,220,583,694,1056,9076,10978,54677,1612,55040,114907,2274,127707,4000,
8079,4646,4747,27445,5143,80055,79156,5360,5364,23654,5565,5613,5625,10076,56963,
6004,390,255488,6326,6330,23513,7869,283130,204962,83959,6548,6774,9263,10228,
22954,10475,85363,494514,10142,79714,1006,8446,9648,79828,5507,55240,63874,25841,
9289,84883,154810,51321,421,8553,655,119032,84280,10950,824,839,57828,857,8812,
8837,94027,113189,22837,132864,10898,3300,81704,1847,1849,1947,9538,24139,5168,
147965,115548,9873,23768,2632,2817,3280,3265,23308,3490,51477,182,3856,8844,144811,
9404,4043,9848,2872,23041,740,343263,4638,26509,4792,22861,57523,55214,80025,164091,
57060,64065,51090,5453,8496,333926,55671,5900,55544,23179,8601,389,6223,55800,6385,
4088,6643,122809,257397,285343,7011,54790,374618,55362,51754,7157,9537,22906,7205,
80705,219699,55245,83719,7748,25946,118738)
# Function to extract relevant data
extract_data <- function(df, name) {
df %>%
filter(Entrez_ID %in% entrez_ids) %>%
mutate(Gene = mapIds(org.Hs.eg.db, as.character(Entrez_ID),
column = "SYMBOL", keytype = "ENTREZID", multiVals = "first"),
Condition = name,
Signif = ifelse(adj.P.Val < 0.05, "*", ""))
}
# Collect all data
deg_list <- list(
"CX_0.1_3" = CX_0.1_3, "CX_0.1_24" = CX_0.1_24, "CX_0.1_48" = CX_0.1_48,
"CX_0.5_3" = CX_0.5_3, "CX_0.5_24" = CX_0.5_24, "CX_0.5_48" = CX_0.5_48,
"DOX_0.1_3" = DOX_0.1_3, "DOX_0.1_24" = DOX_0.1_24, "DOX_0.1_48" = DOX_0.1_48,
"DOX_0.5_3" = DOX_0.5_3, "DOX_0.5_24" = DOX_0.5_24, "DOX_0.5_48" = DOX_0.5_48
)
all_data <- bind_rows(mapply(extract_data, deg_list, names(deg_list), SIMPLIFY = FALSE))
# Create matrices
logFC_mat <- acast(all_data, Gene ~ Condition, value.var = "logFC")
signif_mat <- acast(all_data, Gene ~ Condition, value.var = "Signif")
# Desired column order
desired_order <- c("CX_0.1_3", "CX_0.1_24", "CX_0.1_48",
"CX_0.5_3", "CX_0.5_24", "CX_0.5_48",
"DOX_0.1_3", "DOX_0.1_24", "DOX_0.1_48",
"DOX_0.5_3", "DOX_0.5_24", "DOX_0.5_48")
logFC_mat <- logFC_mat[, desired_order]
signif_mat <- signif_mat[, desired_order]
# Column annotation
meta <- str_split_fixed(colnames(logFC_mat), "_", 3)
col_annot <- HeatmapAnnotation(
Drug = meta[, 1],
Conc = meta[, 2],
Time = meta[, 3],
col = list(
Drug = c("CX" = "blue", "DOX" = "red"),
Conc = c("0.1" = "lightgreen", "0.5" = "darkgreen"),
Time = c("3" = "yellow", "24" = "orange", "48" = "purple")
),
annotation_height = unit(c(2, 2, 2), "cm")
)
# Draw heatmap
Heatmap(logFC_mat,
name = "logFC",
top_annotation = col_annot,
cluster_columns = FALSE,
cluster_rows = TRUE,
show_row_names = TRUE,
show_column_names = FALSE,
cell_fun = function(j, i, x, y, width, height, fill) {
grid.text(signif_mat[i, j], x, y, gp = gpar(fontsize = 9))
},
column_title = "P53 Target Genes\nCX-5461 and DOX Expression",
column_title_gp = gpar(fontsize = 14, fontface = "bold")
)
# Load Required Libraries
library(dplyr)
library(ggplot2)
library(org.Hs.eg.db)
library(AnnotationDbi)
# ----------------- Load Heart-Specific Genes -----------------
heart_genes <- read.csv("data/Human_Heart_Genes.csv", stringsAsFactors = FALSE)
# Convert SYMBOL to Entrez ID
heart_genes$Entrez_ID <- mapIds(
org.Hs.eg.db,
keys = heart_genes$Gene,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"
)
heart_entrez_ids <- na.omit(heart_genes$Entrez_ID)
# ----------------- Load CorrMotif Groups for 0.1 µM -----------------
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# Combine into one dataframe
all_ids_0.1 <- unique(c(prob_1_0.1, prob_2_0.1, prob_3_0.1))
df_0.1 <- data.frame(Entrez_ID = all_ids_0.1, stringsAsFactors = FALSE)
# ----------------- Annotate Response Group -----------------
df_0.1 <- df_0.1 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response\n(0.1 µM)",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response\n(0.1 µM)",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response\n(0.1 µM)"
),
Category = ifelse(Entrez_ID %in% heart_entrez_ids, "Heart-specific Genes", "Non-Heart-specific Genes")
)
# ----------------- Proportion Calculation -----------------
proportion_0.1 <- df_0.1 %>%
group_by(Response_Group, Category) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = Count / sum(Count) * 100)
# ----------------- Chi-square Test (Optional) -----------------
ref_counts_0.1 <- proportion_0.1 %>%
dplyr::ungroup() %>%
dplyr::filter(Response_Group == "Non response\n(0.1 µM)") %>%
dplyr::select(Category, Count) %>%
{setNames(.$Count, .$Category)}
chi_0.1 <- proportion_0.1 %>%
filter(Response_Group != "Non response\n(0.1 µM)") %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[Category %in% c("Heart-specific Genes", "Non-Heart-specific Genes")]
if (length(group_counts) < 2) group_counts <- c(group_counts, 0)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
ref_counts_0.1["Heart-specific Genes"], ref_counts_0.1["Non-Heart-specific Genes"]
), nrow = 2)
print(paste("Set:", unique(Response_Group)))
print("Contingency Table:")
print(contingency_table)
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
[1] "Set: CX-DOX mid-late response\n(0.1 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 1 297
[2,] 414 12011
[1] "Set: DOX only mid-late response\n(0.1 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 54 297
[2,] 1497 12011
# Merge with proportion data
proportion_0.1 <- proportion_0.1 %>%
left_join(chi_0.1, by = "Response_Group")
# ----------------- Plot -----------------
proportion_0.1$Response_Group <- factor(
proportion_0.1$Response_Group,
levels = c(
"Non response\n(0.1 µM)",
"CX-DOX mid-late response\n(0.1 µM)",
"DOX only mid-late response\n(0.1 µM)"
)
)
ggplot(proportion_0.1, aes(x = Response_Group, y = Percentage, fill = Category)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
data = proportion_0.1 %>% distinct(Response_Group, Significance),
aes(x = Response_Group, y = 105, label = Significance),
inherit.aes = FALSE,
size = 6,
color = "black"
) +
scale_fill_manual(values = c(
"Heart-specific Genes" = "#4daf4a",
"Non-Heart-specific Genes" = "#377eb8"
)) +
labs(
title = "Heart-Specific Gene Proportions\nAcross 0.1 µM Cormotif Clusters",
x = "Response Groups",
y = "Percentage of Genes",
fill = "Gene Category"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.4), hjust = 0.5),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 12, angle = 45, hjust = 1),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2)
)
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_text()`).
Version | Author | Date |
---|---|---|
d8a2f25 | sayanpaul01 | 2025-04-14 |
# ----------------- Load CorrMotif Groups for 0.5 µM -----------------
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# Combine into one dataframe
all_ids_0.5 <- unique(c(prob_1_0.5, prob_2_0.5, prob_3_0.5, prob_4_0.5, prob_5_0.5))
df_0.5 <- data.frame(Entrez_ID = all_ids_0.5, stringsAsFactors = FALSE)
# ----------------- Annotate Response Group -----------------
df_0.5 <- df_0.5 %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 µM)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific\nresponse (0.5 µM)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late\nresponse (0.5 µM)",
Entrez_ID %in% prob_4_0.5 ~ "CX total + DOX early\nresponse (0.5 µM)",
Entrez_ID %in% prob_5_0.5 ~ "DOX early + CX-DOX mid-late\nresponse (0.5 µM)"
),
Category = ifelse(Entrez_ID %in% heart_entrez_ids, "Heart-specific Genes", "Non-Heart-specific Genes")
)
# ----------------- Proportion Calculation -----------------
proportion_0.5 <- df_0.5 %>%
group_by(Response_Group, Category) %>%
summarise(Count = n(), .groups = "drop") %>%
group_by(Response_Group) %>%
mutate(Percentage = Count / sum(Count) * 100)
# ----------------- Chi-square Test (vs Non-response) -----------------
ref_counts_0.5 <- proportion_0.5 %>%
dplyr::ungroup() %>%
dplyr::filter(Response_Group == "Non response\n(0.5 µM)") %>%
dplyr::select(Category, Count) %>%
{setNames(.$Count, .$Category)}
chi_0.5 <- proportion_0.5 %>%
filter(Response_Group != "Non response\n(0.5 µM)") %>%
group_by(Response_Group) %>%
summarise(
p_value = {
group_counts <- Count[Category %in% c("Heart-specific Genes", "Non-Heart-specific Genes")]
if (length(group_counts) < 2) group_counts <- c(group_counts, 0)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
ref_counts_0.5["Heart-specific Genes"], ref_counts_0.5["Non-Heart-specific Genes"]
), nrow = 2)
print(paste("Set:", unique(Response_Group)))
print("Contingency Table:")
print(contingency_table)
if (all(contingency_table >= 0 & is.finite(contingency_table))) {
chisq.test(contingency_table)$p.value
} else {
NA
}
},
.groups = "drop"
) %>%
mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
[1] "Set: CX total + DOX early\nresponse (0.5 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 142 123
[2,] 0 7011
[1] "Set: DOX early + CX-DOX mid-late\nresponse (0.5 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 1 123
[2,] 220 7011
[1] "Set: DOX only mid-late\nresponse (0.5 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 221 123
[2,] 6229 7011
[1] "Set: DOX-specific\nresponse (0.5 µM)"
[1] "Contingency Table:"
[,1] [,2]
[1,] 4 123
[2,] 175 7011
Warning: There were 2 warnings in `summarise()`.
The first warning was:
ℹ In argument: `p_value = { ... }`.
ℹ In group 2: `Response_Group = "DOX early + CX-DOX mid-late\nresponse (0.5
µM)"`.
Caused by warning in `chisq.test()`:
! Chi-squared approximation may be incorrect
ℹ Run `dplyr::last_dplyr_warnings()` to see the 1 remaining warning.
# Merge with proportion data
proportion_0.5 <- proportion_0.5 %>%
left_join(chi_0.5, by = "Response_Group")
# ----------------- Plot -----------------
proportion_0.5$Response_Group <- factor(
proportion_0.5$Response_Group,
levels = c(
"Non response\n(0.5 µM)",
"DOX-specific\nresponse (0.5 µM)",
"DOX only mid-late\nresponse (0.5 µM)",
"CX total + DOX early\nresponse (0.5 µM)",
"DOX early + CX-DOX mid-late\nresponse (0.5 µM)"
)
)
ggplot(proportion_0.5, aes(x = Response_Group, y = Percentage, fill = Category)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
data = proportion_0.5 %>% distinct(Response_Group, Significance),
aes(x = Response_Group, y = 105, label = Significance),
inherit.aes = FALSE,
size = 6,
color = "black"
) +
scale_fill_manual(values = c(
"Heart-specific Genes" = "#4daf4a",
"Non-Heart-specific Genes" = "#377eb8"
)) +
labs(
title = "Heart-Specific Gene Proportions\nAcross 0.5 µM Cormotif Clusters",
x = "Response Groups",
y = "Percentage of Genes",
fill = "Gene Category"
) +
theme_minimal() +
theme(
plot.title = element_text(size = rel(1.4), hjust = 0.5),
axis.title = element_text(size = 14),
axis.text.x = element_text(size = 12, angle = 45, hjust = 1),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2)
)
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_text()`).
Version | Author | Date |
---|---|---|
d8a2f25 | sayanpaul01 | 2025-04-14 |
# Load Required Libraries
library(dplyr)
library(ggplot2)
library(org.Hs.eg.db)
library(AnnotationDbi)
# ----------------- Load Heart-Specific Genes -----------------
heart_genes <- read.csv("data/Human_Heart_Genes.csv", stringsAsFactors = FALSE)
heart_genes$Entrez_ID <- mapIds(
org.Hs.eg.db,
keys = heart_genes$Gene,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first"
)
heart_entrez_ids <- na.omit(heart_genes$Entrez_ID)
# ----------------- Load CorrMotif Groups -----------------
# 0.1 µM
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# 0.5 µM
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# ----------------- Annotate CorrMotif Groups -----------------
df_0.1 <- data.frame(Entrez_ID = unique(c(prob_1_0.1, prob_2_0.1, prob_3_0.1))) %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response"
),
Category = ifelse(Entrez_ID %in% heart_entrez_ids, "Heart-specific Genes", "Non-Heart-specific Genes"),
Concentration = "0.1 µM"
)
df_0.5 <- data.frame(Entrez_ID = unique(c(prob_1_0.5, prob_2_0.5, prob_3_0.5, prob_4_0.5, prob_5_0.5))) %>%
mutate(
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific response",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late response",
Entrez_ID %in% prob_4_0.5 ~ "CX total + DOX early response",
Entrez_ID %in% prob_5_0.5 ~ "DOX early + CX-DOX mid-late response"
),
Category = ifelse(Entrez_ID %in% heart_entrez_ids, "Heart-specific Genes", "Non-Heart-specific Genes"),
Concentration = "0.5 µM"
)
# ----------------- Combine Data -----------------
df_combined <- bind_rows(df_0.1, df_0.5)
# ----------------- Calculate Proportions -----------------
proportion_data <- df_combined %>%
dplyr::group_by(Concentration, Response_Group, Category) %>%
dplyr::summarise(Count = n(), .groups = "drop") %>%
dplyr::group_by(Concentration, Response_Group) %>%
dplyr::mutate(Percentage = Count / sum(Count) * 100)
# ----------------- Chi-square or Fisher's Test -----------------
get_chi_or_fisher <- function(df, ref_group) {
ref_counts <- df %>%
dplyr::ungroup() %>%
dplyr::filter(Response_Group == ref_group) %>%
dplyr::select(Category, Count) %>%
{setNames(.$Count, .$Category)}
df %>%
dplyr::filter(Response_Group != ref_group) %>%
dplyr::group_by(Response_Group) %>%
dplyr::summarise(
p_value = {
group_counts <- Count[Category %in% c("Heart-specific Genes", "Non-Heart-specific Genes")]
if (length(group_counts) < 2) group_counts <- c(group_counts, 0)
contingency_table <- matrix(c(
group_counts[1], group_counts[2],
ref_counts["Heart-specific Genes"], ref_counts["Non-Heart-specific Genes"]
), nrow = 2)
if (any(contingency_table < 5)) {
fisher.test(contingency_table)$p.value
} else {
chisq.test(contingency_table)$p.value
}
},
.groups = "drop"
) %>%
dplyr::mutate(Significance = ifelse(!is.na(p_value) & p_value < 0.05, "*", ""))
}
# Run test for each concentration
chi_0.1 <- get_chi_or_fisher(proportion_data %>% dplyr::filter(Concentration == "0.1 µM"), "Non response")
chi_0.5 <- get_chi_or_fisher(proportion_data %>% dplyr::filter(Concentration == "0.5 µM"), "Non response")
chi_all <- dplyr::bind_rows(
chi_0.1 %>% dplyr::mutate(Concentration = "0.1 µM"),
chi_0.5 %>% dplyr::mutate(Concentration = "0.5 µM")
)
# Merge test results into proportions
proportion_data <- proportion_data %>%
dplyr::left_join(chi_all, by = c("Concentration", "Response_Group"))
# ----------------- Reorder Factor Levels -----------------
proportion_data$Concentration <- factor(proportion_data$Concentration, levels = c("0.1 µM", "0.5 µM"))
proportion_data$Response_Group <- factor(proportion_data$Response_Group, levels = c(
"Non response",
"CX-DOX mid-late response",
"DOX-specific response",
"DOX only mid-late response",
"CX total + DOX early response",
"DOX early + CX-DOX mid-late response"
))
# ----------------- Compute Y-position for Significance Labels -----------------
label_data <- proportion_data %>%
dplyr::group_by(Concentration, Response_Group) %>%
dplyr::summarise(Significance = dplyr::first(Significance),
ymax = sum(Percentage), .groups = "drop") %>%
dplyr::filter(!is.na(Significance)) %>%
dplyr::mutate(y_pos = ymax + 3)
# ----------------- Final Plot -----------------
# --- Position stars above 100
label_data <- proportion_data %>%
dplyr::group_by(Concentration, Response_Group) %>%
dplyr::summarise(Significance = dplyr::first(Significance), .groups = "drop") %>%
dplyr::filter(!is.na(Significance)) %>%
dplyr::mutate(y_pos = 105) # stars go at 105
# --- Plot
ggplot(proportion_data, aes(x = Response_Group, y = Percentage, fill = Category)) +
geom_bar(stat = "identity", position = "stack") +
geom_text(
data = label_data,
aes(x = Response_Group, y = y_pos, label = Significance),
inherit.aes = FALSE,
size = 5,
color = "black"
) +
facet_wrap(~ Concentration, scales = "free_x") +
scale_fill_manual(values = c(
"Heart-specific Genes" = "#4daf4a",
"Non-Heart-specific Genes" = "#377eb8"
)) +
scale_y_continuous(limits = c(0, 110), expand = c(0, 0)) + # allow space for stars and border
labs(
title = "Heart-Specific Gene Proportions Across\nCormotif Clusters (0.1 and 0.5)",
x = "Response Groups",
y = "Percentage of Genes",
fill = "Gene Category"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(size = 16, hjust = 0.5, face = "bold"),
axis.title.x = element_text(size = 14, face = "bold"),
axis.title.y = element_text(size = 14, face = "bold"),
axis.text.x = element_text(size = 11, angle = 45, hjust = 1),
axis.text.y = element_text(size = 12),
legend.title = element_text(size = 13),
legend.text = element_text(size = 12),
strip.text = element_text(size = 14, face = "bold"),
panel.border = element_rect(color = "black", fill = NA, linewidth = 1.2), # draws full box
panel.spacing = unit(1.2, "lines") # adds vertical spacing to avoid cramped look
)
library(tidyverse)
library(ggfortify)
library(cluster)
library(edgeR)
library(limma)
library(Homo.sapiens)
library(BiocParallel)
library(qvalue)
library(pheatmap)
library(clusterProfiler)
library(AnnotationDbi)
library(org.Hs.eg.db)
library(RColorBrewer)
library(readr)
library(TxDb.Hsapiens.UCSC.hg38.knownGene)
library(ComplexHeatmap)
library(circlize)
library(grid)
library(reshape2)
library(dplyr)
# Load UCSC transcript database
txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene
# Load DEGs Data
CX_0.1_3 <- read.csv("data/DEGs/Toptable_CX_0.1_3.csv")
CX_0.1_24 <- read.csv("data/DEGs/Toptable_CX_0.1_24.csv")
CX_0.1_48 <- read.csv("data/DEGs/Toptable_CX_0.1_48.csv")
CX_0.5_3 <- read.csv("data/DEGs/Toptable_CX_0.5_3.csv")
CX_0.5_24 <- read.csv("data/DEGs/Toptable_CX_0.5_24.csv")
CX_0.5_48 <- read.csv("data/DEGs/Toptable_CX_0.5_48.csv")
DOX_0.1_3 <- read.csv("data/DEGs/Toptable_DOX_0.1_3.csv")
DOX_0.1_24 <- read.csv("data/DEGs/Toptable_DOX_0.1_24.csv")
DOX_0.1_48 <- read.csv("data/DEGs/Toptable_DOX_0.1_48.csv")
DOX_0.5_3 <- read.csv("data/DEGs/Toptable_DOX_0.5_3.csv")
DOX_0.5_24 <- read.csv("data/DEGs/Toptable_DOX_0.5_24.csv")
DOX_0.5_48 <- read.csv("data/DEGs/Toptable_DOX_0.5_48.csv")
Entrez_IDs <- c(
3425, 53834, 9464, 79658, 55876, 3781, 9472, 11017, 64395, 23353,
57794, 79591, 2702, 51306, 857, 10418, 9644, 115509, 89797, 10728,
282996, 8497, 5695, 9026, 57666, 143384, 5883, 90102, 84909, 221037,
29119, 79933, 391, 81575, 8738, 5396, 26010, 744, 56981, 80724,
5781, 6910, 4598, 79068, 2250, 56978, 3752, 5208, 9736, 26778,
80315, 64374, 79159, 11078, 5308, 3782, 10654, 79776, 6310, 8082,
2995, 23224, 79741, 5708, 26136, 9967, 84033, 9148, 29982, 81488,
1788, 9208, 2908, 1021, 5339, 5727, 23118, 10090, 57585, 221154,
1073, 29998, 817, 858, 3486, 5747, 2104, 55105, 4194, 3570,
1607, 6586, 5570, 2070, 27145, 4646, 3159, 9748, 79991, 221035,
5033, 80212, 196385, 79600, 11046, 54014, 151636, 64778, 92597, 3983,
7090, 9267, 7273, 26018, 9948, 2131, 55870, 5523, 5318, 6239,
3480, 55777, 2066, 11165, 2028, 57619, 2690, 23414, 55818, 84700,
28965, 80204, 463, 5108, 222553, 387119, 28981, 11113, 10301, 995,
23030, 2697, 996, 339500, 54805, 9960, 91404, 145781, 100820829, 84542,
2176, 51684, 9513, 7473, 4666, 23150, 5915, 5062, 4016, 23039,
159686, 1839, 5201, 93166, 64753, 29959, 5496, 23245, 5069, 56916,
92344, 23092, 3992, 9415, 10554, 7456, 9570, 57178, 23143, 161176,
5424, 2034, 10277, 11278, 79803, 6653, 4756, 132660, 5430, 9031,
57158, 285761, 8110, 387700, 1829, 4126, 7323, 51308, 7332, 6598,
3757, 6187, 6660, 10529, 6920, 115286, 8451, 8943, 4137, 7514,
4801, 9709, 23177, 8671, 29915, 26207, 3680, 490, 493856, 58489,
54897, 4625, 22955, 84952, 10221, 2263, 84641, 4892, 1026, 84650,
8382, 221656, 2969, 144453, 117177, 2626, 8476, 161882, 51807, 4624,
9612, 55795, 51043, 144348, 51232, 8729, 3899, 11155, 23316, 79006,
146330, 6403, 6331, 4300, 427, 845, 3313, 113622, 5789, 376132,
29841, 8462, 203859, 401397, 5506, 55521, 5819, 4059, 6934, 57727,
23066, 79568, 83478, 10087, 9586, 222194, 10466, 10499, 58499, 79720,
4772, 10794, 125919, 602, 27332, 59345, 340359, 3705, 64710, 57801,
10818, 143684, 149281, 55013, 23095, 93649, 84034, 23347, 440926, 11124,
23293, 51426, 832, 7068, 57646, 152002, 7531, 1398, 100101267, 221937,
26873, 3709, 10576, 27040, 201176, 284403, 307, 6525, 5387, 1808,
114907, 1952, 4091, 5096, 23451, 51207, 142891, 4084, 3797, 1185,
5334, 217, 2042, 7781, 253461, 152404, 2992, 153478, 6695, 26249,
662, 23036, 22852, 23411, 23387, 6786, 7690, 10021, 8925, 5595,
63892, 23466, 11149, 139411, 755, 55347, 22820, 55111, 84444, 6258,
57623, 1387, 3762, 5861, 3339, 114822, 129787, 196528, 54437, 10395,
4023, 5095, 894, 3156, 1877, 283871, 2673, 23157, 10512, 2258,
79750, 84665, 26091, 5978, 8751, 79695, 2768, 155382, 84163, 7709,
4092, 1837, 2064, 4629, 55122, 8882, 150962, 23013, 8742, 489,
201134, 55114, 84264, 64428, 4089, 861, 7422
)
# Subset the toptable based on the entrez IDs and select specific columns
subset_toptable1 <- CX_0.1_3[CX_0.1_3$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable2 <- CX_0.1_24[CX_0.1_24$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable3 <- CX_0.1_48[CX_0.1_48$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable3 <- CX_0.1_48[CX_0.1_48$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable4 <- CX_0.5_3[CX_0.5_3$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable5 <- CX_0.5_24[CX_0.5_24$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable6 <- CX_0.5_48[CX_0.5_48$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable7 <- DOX_0.1_3[DOX_0.1_3$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable8 <- DOX_0.1_24[DOX_0.1_24$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable9 <- DOX_0.1_48[DOX_0.1_48$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable10 <- DOX_0.5_3[DOX_0.5_3$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable11 <- DOX_0.5_24[DOX_0.5_24$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
subset_toptable12 <- DOX_0.5_48[DOX_0.5_48$Entrez_ID %in% Entrez_IDs, c("Entrez_ID", "logFC", "adj.P.Val")]
# Function to add columns and combine data
add_metadata <- function(data, drug, conc, time) {
data %>%
mutate(Drug = drug, Conc = conc, Time = time)
}
# Add metadata and combine all subsets
combined_data <- bind_rows(
add_metadata(subset_toptable1, "CX", 0.1, 3),
add_metadata(subset_toptable2, "CX", 0.1, 24),
add_metadata(subset_toptable3, "CX", 0.1, 48),
add_metadata(subset_toptable4, "CX", 0.5, 3),
add_metadata(subset_toptable5, "CX", 0.5, 24),
add_metadata(subset_toptable6, "CX", 0.5, 48),
add_metadata(subset_toptable7, "DOX", 0.1, 3),
add_metadata(subset_toptable8, "DOX", 0.1, 24),
add_metadata(subset_toptable9, "DOX", 0.1, 48),
add_metadata(subset_toptable10, "DOX", 0.5, 3),
add_metadata(subset_toptable11, "DOX", 0.5, 24),
add_metadata(subset_toptable12, "DOX", 0.5, 48)
)
# Convert Entrez IDs to Gene symbols
combined_data <- combined_data %>%
mutate(Gene = mapIds(
org.Hs.eg.db,
keys = as.character(Entrez_ID),
column = "SYMBOL",
keytype = "ENTREZID",
multiVals = "first"
))
# Reorder columns
final_data <- dplyr::select(combined_data, Entrez_ID, Gene, logFC, adj.P.Val, Drug, Conc, Time)
# Assuming your dataframe is named data
# Add a column for significance stars
final_data <- final_data %>%
mutate(Significance = ifelse(adj.P.Val < 0.05, "*", ""))
# Create a matrix for the heatmap (logFC values)
logFC_matrix <- acast(final_data, Gene ~ paste(Drug, Conc, Time, sep = "_"), value.var = "logFC")
# Create a matrix for the significance annotations
signif_matrix <- acast(final_data, Gene ~ paste(Drug, Conc, Time, sep = "_"), value.var = "Significance")
# Split column names into Drug, Conc, and Time
colnames_split <- strsplit(colnames(logFC_matrix), "_")
drug <- sapply(colnames_split, function(x) x[1])
conc <- sapply(colnames_split, function(x) x[2])
time <- sapply(colnames_split, function(x) x[3])
# Create the desired column order: CX 0.1 3hr, CX 0.5 3hr, CX 0.1 24hr, CX 0.5 24hr, CX 0.1 48h, CX 0.5 48h,
# DOX 0.1 3hr, DOX 0.5 3hr, DOX 0.1 24hr, DOX 0.5 24hr, DOX 0.1 48h, DOX 0.5 48h
desired_order <- c("CX_0.1_3", "CX_0.5_3", "CX_0.1_24", "CX_0.5_24", "CX_0.1_48", "CX_0.5_48",
"DOX_0.1_3", "DOX_0.5_3", "DOX_0.1_24", "DOX_0.5_24", "DOX_0.1_48", "DOX_0.5_48")
# Reorder columns in the matrix based on the desired order
column_names <- paste(drug, conc, time, sep = "_")
column_order <- match(desired_order, column_names)
logFC_matrix <- logFC_matrix[, column_order]
signif_matrix <- signif_matrix[, column_order]
drug <- drug[column_order]
conc <- conc[column_order]
time <- time[column_order]
# Prepare annotations matching the column structure
ha_top <- HeatmapAnnotation(
Drug = drug,
Conc = conc,
Time = time,
col = list(Drug = c("CX" = "blue", "DOX" = "red"),
Conc = c("0.1" = "lightgreen", "0.5" = "darkgreen"),
Time = c("3" = "yellow", "24" = "orange", "48" = "purple")),
annotation_height = unit(c(2, 2, 2), "cm")
)
# Create the heatmap
heatmap <- Heatmap(logFC_matrix, name = "logFC", top_annotation = ha_top,
cell_fun = function(j, i, x, y, width, height, fill) {
grid.text(signif_matrix[i, j], x, y, gp = gpar(fontsize = 10))
},
show_row_names = TRUE, show_column_names = FALSE,
column_title = "Genes in Atrial fibrillation GWAS associated loci\nin response to CX5461 and DOX",
column_title_gp = gpar(fontsize = 16, fontface = "bold"),
cluster_columns = FALSE) # Disable column clustering
# Draw the heatmap
draw(heatmap, heatmap_legend_side = "right", annotation_legend_side = "right")
Version | Author | Date |
---|---|---|
062a73a | sayanpaul01 | 2025-04-24 |
# Load necessary libraries
library(tidyverse)
library(ComplexHeatmap)
library(circlize)
library(org.Hs.eg.db)
library(reshape2)
library(grid)
# Set 30 Entrez IDs
Entrez_IDs <- c(
9709, 8882, 4023, 29959, 5496, 3992, 9415, 5308, 1026, 54437,
79068, 10221, 9031, 1187, 1952, 3705, 84722, 7273, 23293, 155382,
9531, 602, 27258, 84163, 81846, 79933, 56911, 64753, 93210, 1021
)
# rsID mapping for row annotation
rsid_mapping <- data.frame(
Entrez_ID = Entrez_IDs,
rsID = c("rs247617", "rs964184", "rs765547", "rs1728918", "rs1728918", "rs174547",
"rs174547", "rs59788391", "rs3176326", "rs7632505", "rs11642015", "rs2980853",
"rs2074755", "rs28579893", "rs602633", "rs4905014", "rs602633", "rs2562845",
"rs216193", "rs799165", "rs17617337", "rs4803750", "rs11710541", "rs202209188",
"rs2957657", "rs34163229", "rs56968346", "rs3807132", "rs12150603", "rs2282979"
)
)
# Load DEGs
load_deg <- function(name) {
read.csv(paste0("data/DEGs/Toptable_", name, ".csv"))
}
samples <- c("CX_0.1_3", "CX_0.1_24", "CX_0.1_48", "CX_0.5_3", "CX_0.5_24", "CX_0.5_48",
"DOX_0.1_3", "DOX_0.1_24", "DOX_0.1_48", "DOX_0.5_3", "DOX_0.5_24", "DOX_0.5_48")
deg_list <- lapply(samples, load_deg)
names(deg_list) <- samples
# Subset and annotate
# Subset and annotate
get_subset <- function(df, name) {
parts <- strsplit(name, "_")[[1]]
df %>%
filter(Entrez_ID %in% Entrez_IDs) %>%
dplyr::select(Entrez_ID, logFC, adj.P.Val) %>%
mutate(Drug = parts[1], Conc = parts[2], Time = parts[3])
}
combined_data <- bind_rows(mapply(get_subset, deg_list, names(deg_list), SIMPLIFY = FALSE))
# Add gene symbol and significance
combined_data <- combined_data %>%
mutate(Gene = mapIds(org.Hs.eg.db, keys = as.character(Entrez_ID),
column = "SYMBOL", keytype = "ENTREZID", multiVals = "first"),
Significance = ifelse(adj.P.Val < 0.05, "*", ""))
# Join rsID mapping
combined_data <- left_join(combined_data, rsid_mapping, by = "Entrez_ID")
# Preserve gene order
ordered_genes <- combined_data %>%
distinct(Entrez_ID, Gene) %>%
arrange(factor(Entrez_ID, levels = Entrez_IDs)) %>%
pull(Gene)
# Create logFC and significance matrices
logFC_matrix <- acast(combined_data, Gene ~ paste(Drug, Conc, Time, sep = "_"), value.var = "logFC")
signif_matrix <- acast(combined_data, Gene ~ paste(Drug, Conc, Time, sep = "_"), value.var = "Significance")
logFC_matrix <- logFC_matrix[ordered_genes, ]
signif_matrix <- signif_matrix[ordered_genes, ]
# Desired order: group 0.1 first, then 0.5 for both drugs
desired_order <- c("CX_0.1_3", "CX_0.1_24", "CX_0.1_48", "CX_0.5_3", "CX_0.5_24", "CX_0.5_48",
"DOX_0.1_3", "DOX_0.1_24", "DOX_0.1_48", "DOX_0.5_3", "DOX_0.5_24", "DOX_0.5_48")
logFC_matrix <- logFC_matrix[, desired_order]
signif_matrix <- signif_matrix[, desired_order]
# Split column info
split_cols <- strsplit(colnames(logFC_matrix), "_")
drug <- sapply(split_cols, `[`, 1)
conc <- sapply(split_cols, `[`, 2)
time <- sapply(split_cols, `[`, 3)
# Annotations
ha_top <- HeatmapAnnotation(
Drug = drug,
Conc = conc,
Time = time,
col = list(
Drug = c("CX" = "blue", "DOX" = "red"),
Conc = c("0.1" = "lightgreen", "0.5" = "darkgreen"),
Time = c("3" = "yellow", "24" = "orange", "48" = "purple")
),
annotation_height = unit(c(2, 2, 2), "cm")
)
# rsID annotation
rsid_vector <- combined_data %>%
distinct(Gene, rsID) %>%
filter(Gene %in% ordered_genes) %>%
arrange(match(Gene, ordered_genes)) %>%
pull(rsID)
ha_left <- rowAnnotation(
rsID = anno_text(rsid_vector, location = 0, just = "left", gp = gpar(fontsize = 9)),
annotation_name_side = "top",
width = unit(5, "cm")
)
# Heatmap
Heatmap(logFC_matrix,
name = "logFC",
top_annotation = ha_top,
left_annotation = ha_left,
show_row_names = TRUE,
show_column_names = FALSE,
cluster_columns = FALSE,
cluster_rows = FALSE,
cell_fun = function(j, i, x, y, width, height, fill) {
grid.text(signif_matrix[i, j], x, y, gp = gpar(fontsize = 10))
},
column_title = "Heart Failure GWAS Genes: Response to CX-5461 and DOX",
column_title_gp = gpar(fontsize = 16, fontface = "bold")
)
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group files
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the non-response group
target_entrez <- 92342 # Ensure this is from prob_1_0.1
# Stop if the gene is not in the non-response group
if (!(target_entrez %in% prob_1_0.1)) {
stop("Selected gene is not in the non-response group for 0.1 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTIREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.1 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.1")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.1")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) + # Only facets by Time now
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("Non response (0.1 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group files
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_2_0.1
[1] "1870" "79000" "3925" "83667" "63967" "55143"
[7] "991" "11004" "4678" "8438" "6491" "1031"
[13] "4998" "55706" "51668" "7398" "55635" "8317"
[19] "343099" "163786" "29899" "57535" "84722" "64858"
[25] "653820" "554282" "728833" "8370" "23632" "54964"
[31] "1163" "128239" "3068" "83540" "55732" "91687"
[37] "259266" "9928" "29089" "729533" "4751" "51514"
[43] "1063" "3930" "9156" "10276" "55388" "79723"
[49] "414149" "84930" "11130" "983" "219790" "1763"
[55] "79933" "9585" "3832" "55165" "3070" "84986"
[61] "10613" "4288" "6240" "10346" "113174" "258010"
[67] "81930" "1643" "374393" "2237" "3619" "113130"
[73] "23649" "283131" "9633" "10714" "220042" "143888"
[79] "3014" "53340" "1111" "23310" "2305" "10635"
[85] "9918" "83461" "440081" "441631" "79022" "10376"
[91] "84790" "10024" "29127" "9700" "23468" "1017"
[97] "8914" "5557" "23306" "57122" "4193" "8089"
[103] "6636" "100128191" "7112" "283431" "55010" "7374"
[109] "5985" "11113" "9735" "387893" "140707" "102659353"
[115] "5426" "221150" "55835" "3146" "675" "5983"
[121] "11340" "10301" "440145" "79866" "10426" "7027"
[127] "650669" "55632" "55320" "5427" "64841" "1033"
[133] "11169" "9787" "4522" "161145" "122953" "145508"
[139] "90141" "7443" "89839" "100288637" "9824" "701"
[145] "90417" "57082" "5888" "11339" "51203" "79968"
[151] "1854" "22995" "55329" "9133" "9768" "80119"
[157] "54962" "55055" "9493" "64782" "55215" "90381"
[163] "641" "9055" "1106" "63922" "899" "124222"
[169] "9088" "23589" "116028" "54820" "23204" "5347"
[175] "3835" "8479" "79801" "23594" "64785" "6560"
[181] "55159" "55839" "51659" "81620" "2175" "359845"
[187] "727910" "83903" "54478" "116840" "9212" "6470"
[193] "27346" "10615" "79915" "990" "7153" "29893"
[199] "672" "78995" "146909" "10951" "146956" "348235"
[205] "55771" "83990" "3838" "9382" "2232" "7083"
[211] "332" "10403" "162655" "6632" "220134" "162681"
[217] "148229" "84823" "10036" "126282" "29128" "162993"
[223] "1786" "147841" "10535" "55723" "93323" "54858"
[229] "81931" "284403" "8193" "7733" "27113" "3978"
[235] "5424" "84798" "27338" "6241" "348654" "79172"
[241] "1058" "4436" "6637" "23397" "699" "150468"
[247] "4175" "57405" "83879" "129401" "284992" "151246"
[253] "79411" "55355" "23178" "1841" "994" "5111"
[259] "84515" "140733" "9837" "22974" "1869" "79980"
[265] "5933" "81610" "4605" "11065" "6790" "54069"
[271] "8208" "54058" "8318" "421" "5902" "11200"
[277] "4174" "8398" "5905" "79019" "51512" "2177"
[283] "27258" "151648" "56992" "993" "10293" "11186"
[289] "25886" "57650" "10721" "4171" "8930" "11073"
[295] "10051" "286827" "1894" "254827" "5984" "116832"
[301] "7884" "10460" "7468" "64151" "132671" "9662"
[307] "1633" "3015" "1062" "55345" "4085" "890"
[313] "10733" "132320" "84057" "201725" "3148" "55247"
[319] "79682" "55722" "9319" "375444" "55789" "64105"
[325] "891" "64946" "100129716" "100996485" "10112" "995"
[331] "9232" "134492" "3161" "54908" "375484" "83463"
[337] "7913" "51053" "8339" "7738" "11270" "9656"
[343] "203068" "6941" "3833" "1026" "55166" "4172"
[349] "5558" "7272" "9994" "253714" "387103" "2037"
[355] "113115" "26271" "4521" "29887" "23658" "54443"
[361] "7378" "10793" "5982" "55972" "10926" "4176"
[367] "23165" "2146" "7516" "54892" "389610" "8795"
[373] "8794" "157313" "1808" "157570" "55872" "84296"
[379] "4173" "8836" "4603" "1875" "25788" "9134"
[385] "50484" "79075" "27085" "29028" "9401" "347240"
[391] "2189" "84904" "9833" "100289137" "80010" "1164"
[397] "2176" "195828" "10541" "10592" "26147" "11064"
[403] "7633" "29941" "89958" "10383" "441478" "6839"
[409] "60401" "24137" "54821" "79366" "2491" "11013"
[415] "3149"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the CX-DOX mid-late response group
target_entrez <- 4521 # Replace with your desired Entrez ID from prob_2_0.1
# Stop if the gene is not in the CX-DOX mid-late response group
if (!(target_entrez %in% prob_2_0.1)) {
stop("Selected gene is not in the CX-DOX mid-late response group for 0.1 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.1 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.1")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.1")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) + # Only facets by Time
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("CX-DOX mid-late\nresponse (0.1 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group files
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# Print gene list if needed
prob_3_0.1
[1] "643837" "5192" "63976" "83715" "8863" "50651"
[7] "80045" "5293" "64802" "10277" "26232" "729614"
[13] "1188" "1969" "11240" "100861548" "57576" "400745"
[19] "84224" "5909" "10236" "3399" "11313" "2582"
[25] "3155" "57822" "57185" "164091" "149420" "64793"
[31] "6195" "55650" "84065" "84958" "9064" "2537"
[37] "6118" "8420" "9672" "9410" "79140" "339483"
[43] "3065" "81493" "8565" "252995" "127544" "6421"
[49] "5453" "353500" "10465" "149465" "55929" "1263"
[55] "343521" "149478" "8643" "10327" "51249" "10103"
[61] "55624" "22996" "5865" "9372" "200014" "1376"
[67] "606495" "23648" "100507634" "163782" "23421" "84455"
[73] "1647" "100526835" "8790" "10026" "55283" "126820"
[79] "105378828" "7049" "253152" "11146" "50999" "100131564"
[85] "178" "7412" "2135" "101928370" "1435" "10390"
[91] "100129269" "11218" "389" "333926" "4803" "84852"
[97] "9398" "54855" "26227" "5565" "440689" "2209"
[103] "105371405" "8337" "337873" "723790" "554313" "8349"
[109] "9900" "1893" "56882" "117145" "148327" "3782"
[115] "55974" "23623" "7818" "4000" "64218" "79957"
[121] "63827" "51093" "57549" "23385" "50848" "400793"
[127] "5087" "92241" "92346" "100302401" "26092" "148756"
[133] "10228" "51278" "23127" "779" "23612" "6051"
[139] "4660" "59349" "7832" "6635" "55224" "9911"
[145] "81788" "5129" "85414" "1604" "27042" "574036"
[151] "55733" "25896" "5525" "467" "56950" "7042"
[157] "54996" "11221" "10637" "7044" "286826" "142"
[163] "339500" "7483" "126731" "57568" "80003" "359948"
[169] "7107" "6262" "55083" "84838" "79754" "80760"
[175] "254427" "11164" "83643" "22929" "338596" "387640"
[181] "643236" "9721" "143162" "259230" "8030" "9886"
[187] "1959" "84989" "29119" "219743" "27143" "5092"
[193] "5532" "58529" "8509" "5328" "219654" "9060"
[199] "100144748" "355" "3434" "51196" "953" "10023"
[205] "80019" "6425" "55118" "84171" "282991" "81621"
[211] "27343" "9221" "84108" "9446" "120" "9126"
[217] "9937" "259217" "196051" "54780" "80007" "9679"
[223] "399818" "642938" "80313" "196743" "60626" "3265"
[229] "64787" "55367" "402778" "3481" "3784" "4928"
[235] "6786" "10612" "6881" "1200" "143425" "56672"
[241] "56675" "23258" "81846" "406" "84280" "84188"
[247] "8048" "100126784" "10553" "55366" "196294" "966"
[253] "6506" "9537" "56981" "9409" "85456" "6749"
[259] "219539" "25921" "9404" "79073" "220001" "9066"
[265] "6094" "374395" "283248" "79829" "83707" "7536"
[271] "55561" "29901" "7108" "741" "823" "83786"
[277] "101927789" "91056" "11007" "8061" "83638" "55690"
[283] "64837" "9973" "57804" "57571" "5790" "80194"
[289] "9600" "10263" "2950" "55191" "3636" "10809"
[295] "58473" "100287896" "100507050" "408" "5612" "100506127"
[301] "25987" "60492" "10873" "11098" "1075" "85459"
[307] "4361" "53942" "114908" "2977" "1662" "23235"
[313] "54970" "57646" "25996" "51092" "100652768" "23621"
[319] "22897" "53826" "6330" "55823" "64137" "79671"
[325] "4162" "9638" "9538" "219844" "50937" "283174"
[331] "196513" "57103" "1108" "9746" "374443" "4973"
[337] "8531" "55766" "51768" "65981" "1663" "84920"
[343] "55605" "283463" "196528" "54407" "100288798" "41"
[349] "81566" "23371" "84926" "7786" "57658" "25946"
[355] "5502" "29095" "1606" "64375" "2065" "10193"
[361] "27165" "9880" "79837" "10956" "1019" "9194"
[367] "29110" "1368" "144453" "27345" "5787" "8549"
[373] "22822" "79738" "144455" "160335" "25834" "4254"
[379] "1848" "694" "51134" "121457" "121601" "55332"
[385] "51559" "121053" "121551" "23479" "121642" "89910"
[391] "4598" "51228" "84260" "400073" "28981" "5501"
[397] "113675" "160777" "5564" "51499" "5025" "144404"
[403] "144406" "10198" "5901" "283383" "100996573" "5827"
[409] "7637" "51761" "387496" "432369" "23281" "9201"
[415] "5994" "55068" "81617" "79621" "220108" "100507398"
[421] "341676" "55901" "26586" "5100" "688" "79596"
[427] "10082" "160897" "100861541" "100289373" "8660" "283487"
[433] "23250" "3916" "113622" "2621" "10038" "7011"
[439] "63874" "26020" "54930" "4625" "161247" "5720"
[445] "51292" "5875" "4857" "11154" "9472" "64067"
[451] "8487" "122525" "57697" "122769" "79944" "5836"
[457] "114088" "6815" "9786" "6252" "23224" "7597"
[463] "57452" "2079" "6547" "26037" "53349" "91748"
[469] "23093" "7043" "2954" "85439" "55812" "11099"
[475] "79882" "400236" "78990" "122509" "5891" "7517"
[481] "388021" "283638" "647310" "283643" "7082" "342184"
[487] "254531" "23015" "440270" "5330" "729082" "80237"
[493] "50506" "80031" "399694" "23312" "145788" "64864"
[499] "54629" "83660" "51065" "83464" "53944" "54956"
[505] "51495" "22801" "8125" "7090" "60677" "3073"
[511] "5371" "440288" "1464" "26263" "10099" "55466"
[517] "11173" "5923" "283687" "57214" "53346" "6457"
[523] "9154" "5151" "11214" "3669" "145864" "4240"
[529] "342132" "64784" "26276" "28232" "56963" "23336"
[535] "170691" "22856" "6627" "51728" "79622" "64285"
[541] "4833" "84572" "283871" "80178" "83886" "84256"
[547] "54985" "84464" "10131" "79585" "29965" "23295"
[553] "79641" "2013" "8651" "9516" "729993" "89927"
[559] "368" "64131" "653190" "79905" "51760" "123879"
[565] "57149" "3566" "728734" "100507607" "6693" "4150"
[571] "253980" "83719" "79077" "283932" "93129" "2521"
[577] "440359" "23090" "23322" "4502" "4493" "9688"
[583] "23568" "1006" "51192" "8883" "8824" "23491"
[589] "283849" "29800" "1506" "3931" "146198" "3038"
[595] "16" "23450" "794" "55565" "79583" "100130958"
[601] "51741" "4094" "123775" "9100" "23199" "2300"
[607] "333929" "124045" "4157" "79007" "51763" "23293"
[613] "23108" "162514" "7442" "23729" "3682" "101928000"
[619] "708" "728392" "432" "57659" "5430" "968"
[625] "6462" "482" "55135" "1949" "92162" "5198"
[631] "388335" "201164" "201163" "91647" "7156" "5636"
[637] "125206" "644815" "4239" "26118" "8844" "7126"
[643] "147007" "116238" "284086" "9618" "147015" "116236"
[649] "84940" "374786" "105371730" "5892" "31" "57636"
[655] "2064" "84299" "7067" "125111" "3880" "9001"
[661] "535" "79990" "84313" "339201" "2896" "284071"
[667] "124790" "9842" "4137" "996" "3837" "80279"
[673] "10241" "65264" "10642" "81558" "11143" "284080"
[679] "3675" "4831" "8165" "6426" "54894" "56155"
[685] "5889" "81671" "8493" "388407" "64750" "146880"
[691] "440456" "201283" "201134" "23461" "5608" "400617"
[697] "6662" "94015" "9121" "100287042" "3021" "8811"
[703] "23265" "114804" "8877" "100507246" "6427" "2548"
[709] "79092" "284129" "440465" "284184" "25794" "1468"
[715] "4097" "92659" "255275" "201254" "201255" "23347"
[721] "103910" "649446" "84777" "84617" "10939" "55125"
[727] "753" "26256" "25925" "284252" "51444" "80206"
[733] "57536" "9050" "201501" "4645" "80323" "5366"
[739] "8710" "5271" "92126" "25914" "101927989" "440498"
[745] "84552" "610" "22904" "4946" "7064" "4782"
[751] "729359" "4902" "6813" "388499" "4701" "256949"
[757] "4670" "374879" "93134" "93145" "3383" "3386"
[763] "5141" "3609" "126075" "57139" "147837" "4125"
[769] "199699" "9592" "65249" "9524" "84449" "376497"
[775] "5296" "5143" "9518" "51477" "10715" "729991"
[781] "284440" "7639" "171392" "79156" "898" "5348"
[787] "100128682" "115703" "333" "84911" "374899" "101927720"
[793] "22835" "57828" "399473" "147965" "126432" "115290"
[799] "57622" "4294" "126526" "29950" "645" "57731"
[805] "80271" "6626" "7040" "641649" "6223" "10567"
[811] "478" "5452" "3991" "653583" "56006" "7596"
[817] "56971" "79090" "8189" "808" "147906" "100506068"
[823] "29888" "10055" "22900" "9266" "770" "23645"
[829] "581" "10856" "8463" "83596" "23636" "25888"
[835] "94030" "79986" "126017" "55422" "147807" "284307"
[841] "348327" "284309" "10782" "100131691" "7593" "9687"
[847] "6382" "64342" "9540" "391356" "10890" "60509"
[853] "3795" "7349" "4358" "9913" "2355" "253558"
[859] "440854" "130589" "728730" "6546" "79823" "2956"
[865] "129285" "98" "100129434" "53335" "23301" "119"
[871] "94097" "150726" "7840" "51002" "116540" "84695"
[877] "10618" "54884" "112597" "150572" "30818" "56910"
[883] "55654" "10865" "10120" "2274" "165055" "96626"
[889] "64682" "10461" "84910" "79134" "91409" "90557"
[895] "116372" "4249" "100129961" "84083" "23518" "11249"
[901] "390" "55183" "114793" "11227" "22925" "55137"
[907] "22837" "6326" "2571" "9874" "8520" "29789"
[913] "1123" "51661" "64172" "5378" "3628" "54842"
[919] "4430" "64859" "91526" "3329" "3336" "23314"
[925] "60491" "7855" "3417" "4133" "33" "1373"
[931] "2066" "580" "26154" "55825" "64114" "64320"
[937] "10058" "1674" "79586" "130367" "130340" "57590"
[943] "5270" "80309" "80210" "10123" "64284" "51665"
[949] "2859" "140809" "64773" "3704" "83959" "146"
[955] "149840" "63926" "6616" "182" "55304" "1471"
[961] "26152" "11264" "2937" "25939" "10904" "9935"
[967] "128486" "11142" "10953" "27296" "51604" "8202"
[973] "55959" "23394" "8675" "2778" "1522" "81928"
[979] "55738" "102723996" "10950" "54149" "29104" "30811"
[985] "2618" "29980" "1827" "861" "9980" "6450"
[991] "54020" "5316" "23308" "54082" "728039" "5116"
[997] "83733" "529" "5625" "25786" "439931" "23331"
[1003] "25807" "3976" "6948" "23762" "3985" "6523"
[1009] "10042" "23780" "80020" "7263" "29775" "85377"
[1015] "84645" "23764" "102800317" "11144" "27350" "5155"
[1021] "79640" "10762" "5465" "55020" "5600" "23654"
[1027] "410" "284942" "11158" "859" "9901" "55209"
[1033] "80746" "55287" "9922" "7476" "7508" "6533"
[1039] "80852" "7155" "10217" "5333" "9942" "9941"
[1045] "6331" "199223" "64651" "25907" "79442" "4634"
[1051] "5745" "54859" "11277" "54681" "2876" "1605"
[1057] "8927" "7318" "10991" "7866" "1795" "57060"
[1063] "5580" "7086" "8309" "56999" "9223" "84541"
[1069] "27086" "1371" "84319" "344595" "90102" "79691"
[1075] "116064" "3836" "64770" "84303" "57501" "339942"
[1081] "100507032" "729375" "339855" "10274" "92369" "9435"
[1087] "6596" "53836" "5912" "79674" "51319" "79740"
[1093] "5274" "5584" "200916" "23043" "5337" "64393"
[1099] "51193" "59345" "5437" "6434" "2119" "9076"
[1105] "2257" "401106" "93109" "131583" "152687" "54872"
[1111] "4636" "84179" "317648" "285489" "4043" "5522"
[1117] "23324" "768239" "56606" "5860" "23231" "5981"
[1123] "23244" "386617" "10699" "3815" "5471" "10606"
[1129] "23284" "1060" "8671" "374" "3184" "22872"
[1135] "51191" "10144" "285513" "23173" "100507053" "285556"
[1141] "115265" "90024" "79807" "79071" "92610" "287"
[1147] "8492" "79625" "5393" "166378" "22824" "25819"
[1153] "84709" "166785" "1909" "987" "4886" "1363"
[1159] "23022" "57630" "116966" "201973" "256309" "27295"
[1165] "10016" "11076" "85409" "134147" "1767" "643401"
[1171] "23037" "81792" "51151" "79925" "2668" "345557"
[1177] "6414" "23530" "53918" "4338" "112574" "493869"
[1183] "345651" "10769" "285671" "11174" "64087" "84327"
[1189] "345778" "100505994" "84250" "83890" "22836" "90355"
[1195] "64839" "9315" "28966" "57507" "501" "115123"
[1201] "84466" "2201" "51015" "3094" "51735" "6583"
[1207] "23176" "134549" "51780" "51308" "202051" "202052"
[1213] "340061" "51523" "404734" "10011" "285613" "10007"
[1219] "81848" "2246" "10915" "389336" "79628" "78991"
[1225] "22993" "6949" "26112" "206358" "2890" "134353"
[1231] "6586" "64901" "100268168" "4488" "3274" "2870"
[1237] "11285" "85007" "8878" "94234" "2296" "648791"
[1243] "2651" "51522" "221687" "6310" "401236" "10486"
[1249] "57380" "81688" "3006" "8347" "8334" "3017"
[1255] "8367" "3012" "8365" "493812" "8970" "85236"
[1261] "64288" "114821" "3133" "8870" "780" "1460"
[1267] "57819" "4758" "221527" "6890" "1616" "578"
[1273] "221491" "5603" "27154" "6428" "105375039" "5292"
[1279] "221468" "9025" "55809" "441150" "116138" "65989"
[1285] "57510" "5429" "55362" "2030" "4794" "202500"
[1291] "10231" "51302" "27242" "442213" "85315" "90523"
[1297] "51557" "7803" "26503" "135228" "27145" "4646"
[1303] "55023" "9324" "7162" "22832" "2570" "58528"
[1309] "79694" "10973" "64208" "57673" "55084" "11231"
[1315] "27244" "285753" "9896" "101927768" "222537" "23493"
[1321] "81847" "5796" "116843" "4217" "57224" "441172"
[1327] "51390" "348995" "80329" "9590" "26034" "8871"
[1333] "39" "5071" "9444" "2852" "79778" "114796"
[1339] "29886" "23288" "55698" "80028" "221955" "54753"
[1345] "6119" "9678" "55536" "10457" "1687" "26031"
[1351] "3181" "11335" "221895" "79017" "5137" "51251"
[1357] "57057" "9844" "349114" "136647" "79783" "285954"
[1363] "9263" "58498" "94239" "1956" "81552" "51427"
[1369] "168374" "154881" "378108" "100101148" "9031" "541473"
[1375] "375593" "3092" "222183" "5218" "1595" "64921"
[1381] "55971" "10898" "255374" "55262" "79690" "402682"
[1387] "43" "1174" "8985" "222236" "55973" "4897"
[1393] "858" "93653" "7982" "401399" "4899" "51200"
[1399] "91584" "29062" "100507421" "9715" "285966" "84626"
[1405] "155066" "9311" "10049" "55112" "101927595" "2055"
[1411] "157285" "640" "101929490" "10395" "51201" "23362"
[1417] "55790" "55806" "80346" "9796" "23516" "8793"
[1423] "8797" "4741" "23087" "51435" "79618" "1846"
[1429] "7486" "3084" "286" "5327" "137695" "55636"
[1435] "5150" "79776" "5828" "619279" "85444" "4683"
[1441] "862" "137392" "54704" "94241" "51001" "9791"
[1447] "83988" "23414" "137735" "114788" "5885" "90390"
[1453] "4982" "4856" "114907" "5820" "114" "286077"
[1459] "100128338" "83481" "84875" "8733" "81704" "5991"
[1465] "403313" "4781" "203238" "6456" "54801" "340485"
[1471] "4300" "360" "441459" "9853" "51754" "64425"
[1477] "219" "347252" "687" "7091" "7088" "80318"
[1483] "2619" "79048" "54769" "4920" "4814" "445577"
[1489] "23196" "55357" "54566" "114299" "445815" "158399"
[1495] "9991" "158405" "169834" "85301" "25861" "23245"
[1501] "55755" "286204" "169611" "1759" "4957" "389792"
[1507] "100506119" "100506190" "140459" "83543" "11092" "6834"
[1513] "6256" "138162" "4851" "101928483" "29085" "158056"
[1519] "7186" "100289341" "55344" "283981" "3563" "25878"
[1525] "5613" "5277" "22866" "5422" "11141" "6990"
[1531] "80258" "55593" "5355" "89801" "2245" "55906"
[1537] "367" "27112" "1896" "54413" "340526" "9452"
[1543] "695" "105373311" "90293" "286467" "347475" "55559"
[1549] "5365" "1736" "4354"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the DOX-only mid-late response group
target_entrez <- 1674 # Replace with your desired Entrez ID from prob_3_0.1
# Stop if the gene is not in the DOX-only mid-late response group
if (!(target_entrez %in% prob_3_0.1)) {
stop("Selected gene is not in the DOX-only mid-late response group for 0.1 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- reshape2::melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.1 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.1")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.1")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("DOX-only mid-late\nresponse (0.1 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group: Non response (0.5 µM)
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
# Print genes (optional)
prob_1_0.5
[1] "653635" "102723897" "102465432" "339451" "57801" "54973"
[7] "1855" "54998" "148413" "55052" "64856" "219293"
[13] "83858" "29101" "643988" "984" "8511" "728642"
[19] "9906" "65220" "2782" "100506504" "199990" "5192"
[25] "55229" "440556" "27237" "1953" "127262" "49856"
[31] "57212" "148870" "57470" "1677" "261734" "6146"
[37] "23463" "8718" "79707" "3104" "9903" "148479"
[43] "90326" "55735" "23261" "9341" "11315" "50651"
[49] "473" "2023" "80045" "84275" "199953" "22883"
[55] "84328" "64802" "23095" "378708" "1676" "5195"
[61] "54897" "148345" "23435" "6723" "2475" "29914"
[67] "26270" "10459" "4524" "1185" "4878" "55187"
[73] "126755" "7799" "79180" "842" "23341" "84301"
[79] "6248" "23207" "284723" "440567" "23013" "7709"
[85] "348487" "128272" "54455" "55707" "114819" "55672"
[91] "84809" "11209" "4237" "23400" "6390" "127707"
[97] "8659" "23352" "23065" "100506730" "832" "440574"
[103] "644068" "255104" "79594" "50809" "1889" "5909"
[109] "401944" "3339" "29092" "998" "9923" "23028"
[115] "7798" "3352" "80818" "6920" "55616" "6135"
[121] "55629" "57185" "100506985" "10250" "23585" "55219"
[127] "56181" "3925" "5051" "84676" "149420" "79927"
[133] "51042" "10256" "83442" "79947" "8289" "63906"
[139] "10726" "388610" "23038" "644961" "2827" "10163"
[145] "5511" "6118" "27293" "55113" "22826" "93974"
[151] "65979" "6080" "54952" "677838" "10691" "51441"
[157] "2035" "6429" "51102" "9698" "64129" "90853"
[163] "8073" "56063" "65108" "339487" "5928" "81493"
[169] "57648" "64766" "204" "149076" "1912" "7579"
[175] "114784" "113444" "653160" "79932" "23154" "5690"
[181] "127703" "27095" "55700" "9967" "79729" "55194"
[187] "64960" "728431" "64769" "54955" "3633" "10946"
[193] "51118" "4725" "643314" "728448" "8761" "84879"
[199] "10487" "6018" "10269" "127396" "100130557" "4802"
[205] "163732" "1503" "100507178" "100132074" "1907" "22887"
[211] "79717" "728621" "10465" "114625" "6513" "10969"
[217] "64834" "112950" "23334" "9682" "9670" "1802"
[223] "149473" "55929" "79033" "79639" "339541" "6202"
[229] "7389" "57643" "84842" "10327" "4678" "3652"
[235] "8503" "55624" "541468" "7388" "8569" "148932"
[241] "64756" "9813" "51727" "388630" "54558" "22996"
[247] "4898" "51060" "91408" "200014" "84950" "2882"
[253] "79699" "55268" "6342" "127435" "54987" "4116"
[259] "7804" "54432" "51668" "115353" "127428" "606495"
[265] "51253" "23648" "619518" "7268" "25973" "1718"
[271] "23358" "5563" "1600" "114803" "3725" "4774"
[277] "83941" "10207" "163782" "7398" "85440" "29929"
[283] "23421" "55225" "205" "9829" "54741" "3953"
[289] "84251" "57708" "26135" "55970" "100289178" "79971"
[295] "57554" "55631" "9295" "81573" "1491" "5733"
[301] "9406" "257194" "127253" "204962" "34" "1744"
[307] "81849" "23032" "374986" "79739" "5567" "1486"
[313] "23566" "84144" "57489" "51100" "9653" "8543"
[319] "56267" "23507" "400761" "84146" "7049" "646817"
[325] "79871" "7813" "6125" "22823" "50999" "100131564"
[331] "9411" "199857" "148534" "100527978" "58155" "51375"
[337] "391059" "23443" "64645" "1629" "100506007" "8634"
[343] "2135" "1301" "55599" "280" "55119" "6301"
[349] "343263" "127002" "284613" "83873" "2773" "271"
[355] "2948" "2946" "2944" "2947" "85369" "388662"
[361] "9122" "55791" "10390" "128344" "128346" "5906"
[367] "3752" "55917" "54879" "829" "9860" "260425"
[373] "10717" "56944" "51592" "10286" "7812" "80143"
[379] "10100" "81839" "845" "55356" "476" "84852"
[385] "3321" "9398" "8458" "80263" "10885" "10352"
[391] "101929147" "90874" "4853" "728841" "101929796" "101060684"
[397] "728855" "103091866" "100288142" "101929780" "653519" "11126"
[403] "10623" "200035" "10401" "8515" "10628" "100132406"
[409] "388677" "149013" "171423" "607" "200030" "25832"
[415] "100996763" "400818" "101060226" "57234" "51027" "10262"
[421] "10903" "51177" "81611" "23632" "51107" "79630"
[427] "54460" "9129" "54507" "2029" "1513" "29956"
[433] "56882" "10500" "388695" "79005" "8394" "5710"
[439] "7286" "81609" "65005" "11022" "6281" "6282"
[445] "6277" "6275" "23557" "11000" "9909" "27173"
[451] "148327" "10899" "5872" "6232" "7170" "25912"
[457] "9898" "103" "10654" "57326" "90780" "6464"
[463] "1945" "1942" "54344" "7059" "4580" "2630"
[469] "2629" "1196" "2224" "55870" "55249" "23208"
[475] "6746" "92312" "23381" "84283" "112770" "128240"
[481] "54865" "63827" "81875" "5546" "375033" "9826"
[487] "3428" "54935" "8407" "93185" "8682" "50717"
[493] "5824" "1314" "474338" "23385" "55600" "50848"
[499] "100131187" "5202" "4817" "9191" "8703" "4720"
[505] "6391" "257177" "11266" "25903" "9722" "400793"
[511] "223" "54499" "117143" "387597" "9019" "25874"
[517] "55827" "261726" "2153" "6403" "92342" "57147"
[523] "22920" "23215" "92346" "5279" "7292" "27252"
[529] "55157" "100506046" "26802" "84614" "27101" "63931"
[535] "64326" "60676" "460" "9462" "55103" "9917"
[541] "27" "6646" "163590" "26092" "9857" "5768"
[547] "200058" "100527964" "84320" "9213" "6041" "1660"
[553] "3915" "3918" "23057" "9887" "23179" "23127"
[559] "81563" "6045" "81627" "83872" "54953" "100616345"
[565] "51377" "6738" "343450" "163486" "140609" "23046"
[571] "252839" "3898" "7135" "23612" "10440" "51094"
[577] "9877" "100381270" "6635" "3814" "84919" "4194"
[583] "10446" "23114" "5929" "64710" "254428" "284581"
[589] "103021295" "9641" "83593" "1939" "8444" "9261"
[595] "5362" "50486" "3664" "27042" "56256" "55758"
[601] "7188" "84791" "100131205" "5525" "25936" "642946"
[607] "28982" "79805" "90806" "100505832" "5629" "5784"
[613] "51133" "2104" "7042" "127018" "55699" "25782"
[619] "6791" "4139" "79762" "9015" "375056" "64853"
[625] "148362" "84976" "55061" "824" "105369195" "4931"
[631] "3930" "55740" "6726" "9725" "10637" "7044"
[637] "64746" "83881" "286826" "5664" "65094" "116841"
[643] "79169" "128308" "81559" "149603" "5867" "126731"
[649] "55746" "23456" "27097" "9816" "2590" "79605"
[655] "183" "84886" "64801" "128061" "8443" "54583"
[661] "7257" "84284" "3775" "101927765" "388753" "9453"
[667] "4811" "128178" "3964" "55127" "1131" "2271"
[673] "23596" "1122" "200150" "731275" "10806" "10000"
[679] "159" "51029" "116228" "3192" "101928068" "163882"
[685] "100130097" "25909" "93474" "79862" "388759" "84838"
[691] "25893" "343171" "80851" "79894" "267002" "10771"
[697] "91734" "3422" "22884" "5214" "1316" "1645"
[703] "10276" "54906" "2665" "54522" "84893" "84991"
[709] "5209" "22944" "10659" "9712" "79746" "254427"
[715] "55526" "55176" "11164" "8872" "57118" "22929"
[721] "55691" "51182" "64421" "221060" "10557" "221061"
[727] "8516" "8029" "7431" "8027" "221079" "84898"
[733] "399726" "387640" "64215" "23412" "648" "100499489"
[739] "22921" "56243" "56952" "57512" "23590" "10006"
[745] "91452" "22931" "143098" "220906" "51322" "102724316"
[751] "220929" "6935" "94134" "3799" "80314" "79741"
[757] "3688" "8829" "56288" "8453" "219771" "219749"
[763] "399744" "441666" "100129482" "221002" "8187" "220992"
[769] "414208" "6387" "11067" "220979" "93550" "253725"
[775] "119016" "728407" "100287932" "653268" "728113" "643650"
[781] "5540" "83849" "414241" "399761" "653145" "642517"
[787] "642826" "439965" "102724488" "100996758" "414224" "143162"
[793] "2074" "8505" "100652748" "414189" "387680" "56624"
[799] "259230" "653308" "5592" "23283" "22943" "7019"
[805] "8030" "288" "84159" "221035" "347731" "26091"
[811] "84665" "3189" "55680" "8034" "80312" "55749"
[817] "79009" "9188" "6832" "80201" "3098" "6865"
[823] "55506" "84883" "56681" "5464" "140766" "219699"
[829] "728978" "55315" "64115" "9469" "9806" "51008"
[835] "119504" "54541" "54788" "10367" "90550" "5033"
[841] "25961" "11319" "317662" "23234" "414245" "51021"
[847] "118491" "310" "5532" "159195" "58529" "729092"
[853] "729096" "9632" "118487" "8509" "818" "7414"
[859] "26985" "23522" "51207" "7417" "118881" "84858"
[865] "100131213" "3778" "9231" "11128" "57178" "10105"
[871] "219654" "143244" "650623" "101060691" "311" "84293"
[877] "10718" "92211" "2894" "23063" "79812" "6623"
[883] "728118" "728190" "9562" "84896" "57559" "59"
[889] "3988" "84333" "22849" "3416" "54536" "26509"
[895] "118924" "266971" "64318" "9124" "10580" "26123"
[901] "54619" "9849" "118788" "728658" "26148" "84986"
[907] "644215" "5223" "51013" "84287" "64210" "26287"
[913] "112817" "83742" "27291" "84795" "26507" "81894"
[919] "1355" "23268" "1147" "282991" "6319" "25956"
[925] "4714" "55662" "57715" "84545" "81855" "81621"
[931] "8945" "27343" "25911" "10360" "10724" "79803"
[937] "23082" "9221" "8729" "5662" "79176" "79004"
[943] "79847" "10121" "51684" "403" "118980" "54838"
[949] "729020" "84833" "51063" "79991" "9748" "119392"
[955] "9446" "159686" "114815" "7511" "120" "10285"
[961] "9126" "143187" "6934" "840" "374354" "153"
[967] "55088" "3983" "57700" "142940" "57698" "63877"
[973] "8661" "10935" "2869" "6001" "22876" "79892"
[979] "55717" "11101" "5654" "118672" "36" "9184"
[985] "119587" "9679" "23172" "54764" "26098" "7390"
[991] "56647" "55760" "8038" "5791" "4255" "387723"
[997] "119437" "10539" "55844" "664" "282974" "170394"
[1003] "3632" "85442" "10844" "118472" "282969" "1892"
[1009] "196743" "92170" "503542" "51272" "80162" "10581"
[1015] "8519" "10410" "81490" "3265" "8045" "57661"
[1021] "10522" "283232" "64787" "347862" "105369190" "79751"
[1027] "6181" "283229" "977" "66005" "161" "9024"
[1033] "81532" "1850" "338651" "1509" "6150" "283120"
[1039] "3481" "51214" "975" "10984" "833" "7748"
[1045] "650368" "116969" "391" "6737" "85363" "84067"
[1051] "112464" "6609" "322" "23647" "26515" "23378"
[1057] "1200" "8495" "51700" "8665" "9866" "6157"
[1063] "6764" "56674" "493900" "283102" "10527" "644656"
[1069] "7465" "440028" "133" "100463486" "50862" "10335"
[1075] "58486" "729013" "55031" "9645" "84953" "55742"
[1081] "7003" "10418" "22800" "5140" "55553" "10944"
[1087] "6207" "4925" "11234" "2965" "3939" "7251"
[1093] "55293" "8048" "79733" "89797" "100874014" "10196"
[1099] "203859" "2188" "258010" "159963" "627" "120534"
[1105] "120526" "5954" "79832" "55346" "283267" "25758"
[1111] "4005" "55226" "847" "8050" "960" "6506"
[1117] "24147" "54765" "143458" "29099" "7189" "5896"
[1123] "8539" "55761" "51144" "84680" "2132" "90139"
[1129] "56981" "57586" "8534" "55343" "1408" "9479"
[1135] "51317" "55626" "283254" "392" "4038" "84364"
[1141] "29763" "53" "10062" "91252" "5702" "55709"
[1147] "4722" "114900" "23360" "5795" "2346" "29015"
[1153] "8501" "26519" "9246" "710" "25921" "280636"
[1159] "63901" "5007" "219988" "27339" "54972" "55048"
[1165] "26007" "79869" "54949" "9066" "746" "3992"
[1171] "3995" "5866" "7439" "80150" "79026" "1937"
[1177] "256364" "23193" "102288414" "790955" "51035" "26580"
[1183] "221092" "283237" "79842" "5436" "374395" "9303"
[1189] "11145" "25923" "144097" "1351" "28992" "10963"
[1195] "83707" "3338" "7423" "2286" "26472" "5331"
[1201] "56834" "572" "2101" "25824" "283234" "8986"
[1207] "4221" "402" "7542" "7108" "728975" "283131"
[1213] "101927789" "378938" "57410" "4054" "254102" "4296"
[1219] "399909" "5970" "84153" "9158" "83638" "8815"
[1225] "10992" "55690" "81876" "9610" "65003" "10072"
[1231] "254359" "89" "8722" "55231" "10432" "5936"
[1237] "83759" "79703" "9986" "29984" "57804" "5883"
[1243] "2950" "4723" "390213" "347853" "221" "1119"
[1249] "51111" "55291" "219927" "3508" "8500" "55199"
[1255] "55298" "4926" "55004" "25906" "2348" "116985"
[1261] "9873" "9828" "23201" "58473" "5870" "51642"
[1267] "80227" "7351" "283209" "387787" "143570" "10825"
[1273] "6188" "283212" "871" "84649" "7481" "5612"
[1279] "56946" "2615" "726" "5058" "1207" "28971"
[1285] "92105" "79053" "57558" "9846" "5547" "27314"
[1291] "100506233" "51585" "338699" "1740" "55863" "58487"
[1297] "54843" "8301" "8322" "1075" "50507" "10003"
[1303] "26973" "684959" "692063" "654320" "677805" "677822"
[1309] "79101" "9440" "24145" "4361" "2526" "51503"
[1315] "9702" "8898" "8690" "143872" "5241" "329"
[1321] "114908" "4319" "100288077" "4312" "84259" "79659"
[1327] "837" "143879" "60496" "55531" "8065" "38"
[1333] "4863" "5962" "143903" "23235" "5519" "79796"
[1339] "91893" "64776" "1410" "3316" "85458" "6392"
[1345] "5805" "54970" "1813" "54494" "10179" "335"
[1351] "5049" "100652768" "9159" "53826" "196264" "9354"
[1357] "10632" "4297" "372" "23187" "1656" "283149"
[1363] "338657" "6230" "51399" "10525" "1798" "25988"
[1369] "79102" "5818" "23365" "7007" "6309" "399959"
[1375] "3312" "57476" "84897" "53340" "219844" "50937"
[1381] "84881" "79607" "114609" "2313" "100507392" "9743"
[1387] "8538" "4798" "29068" "103611081" "399979" "50863"
[1393] "4978" "22997" "83700" "27034" "100288778" "6540"
[1399] "5927" "84318" "4815" "65125" "5893" "81029"
[1405] "79602" "55846" "83714" "83695" "7289" "7004"
[1411] "57097" "894" "57102" "10566" "4908" "7132"
[1417] "678655" "51258" "2597" "25900" "4839" "51147"
[1423] "171017" "196500" "50813" "5763" "10536" "2784"
[1429] "8078" "7167" "84727" "171220" "10233" "2026"
[1435] "1822" "113246" "5777" "11331" "677777" "10436"
[1441] "716" "715" "51279" "5830" "144195" "6515"
[1447] "55810" "440078" "8076" "57494" "1911" "144571"
[1453] "2" "100499405" "29121" "23710" "10748" "100129361"
[1459] "100506248" "503693" "1389" "1027" "81575" "51202"
[1465] "9052" "693199" "50865" "57613" "83445" "55729"
[1471] "79887" "144608" "51729" "11171" "51071" "4257"
[1477] "121536" "5139" "79912" "5965" "51026" "80763"
[1483] "2998" "3945" "3764" "10060" "55907" "9847"
[1489] "144363" "3845" "8082" "51768" "9412" "23012"
[1495] "56938" "8496" "387849" "55297" "100506606" "83857"
[1501] "55196" "51067" "144245" "114134" "1272" "283464"
[1507] "5756" "400027" "196528" "81539" "54407" "100288798"
[1513] "347902" "79657" "10411" "55652" "1280" "140461"
[1519] "121274" "784" "9416" "85478" "51303" "7480"
[1525] "5571" "8085" "55716" "79962" "65244" "84070"
[1531] "25766" "91010" "7009" "57701" "6602" "2819"
[1537] "84987" "51474" "113251" "25840" "7024" "6334"
[1543] "401720" "105369971" "91" "160622" "60673" "144501"
[1549] "3856" "1975" "283335" "84926" "3489" "84975"
[1555] "5204" "5094" "7786" "6895" "23583" "22818"
[1561] "3679" "2647" "967" "10220" "84324" "4327"
[1567] "84305" "102724112" "1606" "6490" "5869" "6171"
[1573] "23344" "140465" "4637" "6601" "79035" "93058"
[1579] "10330" "9924" "283377" "11176" "506" "10728"
[1585] "4666" "4665" "6778" "4035" "246329" "22864"
[1591] "114785" "10540" "3798" "10956" "4234" "121227"
[1597] "338811" "23041" "57460" "283417" "29110" "23592"
[1603] "8091" "84298" "11213" "23426" "55832" "8445"
[1609] "56890" "57122" "55508" "11052" "10576" "144453"
[1615] "196446" "101928062" "196441" "64786" "552889" "11010"
[1621] "4673" "79738" "1466" "89795" "6857" "4659"
[1627] "283310" "8825" "79611" "84190" "160335" "400058"
[1633] "91298" "160418" "4060" "1634" "440107" "8411"
[1639] "7334" "8835" "8738" "10154" "57458" "7181"
[1645] "10988" "59277" "121441" "121456" "55592" "55681"
[1651] "27340" "400" "79158" "51019" "79023" "7184"
[1657] "728568" "50515" "160428" "23325" "55198" "9891"
[1663] "10970" "90488" "80298" "11137" "11153" "6404"
[1669] "54434" "84749" "121642" "9815" "400073" "10094"
[1675] "29902" "144715" "160760" "79600" "160762" "4633"
[1681] "23316" "6311" "217" "51275" "8550" "89894"
[1687] "8759" "10961" "283450" "6128" "5781" "53373"
[1693] "80024" "196463" "113675" "54997" "23014" "54621"
[1699] "5037" "64426" "26353" "10985" "6175" "5829"
[1705] "23409" "51499" "8683" "100506668" "84274" "9921"
[1711] "51367" "35" "121665" "5025" "10645" "80196"
[1717] "23067" "5715" "144406" "605" "56616" "65082"
[1723] "55596" "65117" "8562" "79720" "23457" "51329"
[1729] "57605" "10198" "91574" "196383" "353116" "10959"
[1735] "57696" "23545" "144348" "7316" "114795" "121260"
[1741] "2054" "5901" "283383" "6433" "317781" "79050"
[1747] "100996573" "23141" "55743" "7574" "7637" "7699"
[1753] "101060200" "7556" "10795" "55269" "7750" "2700"
[1759] "51084" "8100" "53342" "253832" "221154" "2254"
[1765] "6445" "26278" "4285" "5042" "9818" "10810"
[1771] "6144" "2971" "219402" "255967" "2321" "51371"
[1777] "3146" "23111" "29880" "55578" "122011" "10631"
[1783] "341640" "80209" "89890" "9617" "11215" "94240"
[1789] "29103" "26747" "55425" "2963" "7178" "100190939"
[1795] "253512" "83548" "23091" "8803" "55270" "29079"
[1801] "22862" "81602" "83852" "3839" "26512" "79758"
[1807] "440138" "9724" "55901" "10910" "81550" "64881"
[1813] "9882" "170622" "1203" "23077" "122060" "1910"
[1819] "64062" "54602" "26050" "407975" "23483" "10257"
[1825] "5611" "55757" "5911" "23348" "9375" "171425"
[1831] "84899" "79070" "54841" "3981" "84945" "1282"
[1837] "55647" "79587" "8874" "2159" "102724474" "8451"
[1843] "55208" "55002" "7027" "2621" "8881" "65110"
[1849] "283489" "57820" "85495" "6038" "6035" "101929718"
[1855] "57447" "55701" "51222" "11198" "57680" "9878"
[1861] "56339" "6297" "5018" "9056" "122704" "4323"
[1867] "55147" "10419" "84962" "22985" "90673" "105378176"
[1873] "8106" "51310" "10278" "79178" "8906" "10901"
[1879] "317749" "728635" "4901" "80344" "5720" "51016"
[1885] "55072" "10379" "10548" "283629" "145553" "51292"
[1891] "7051" "161424" "57523" "23351" "643866" "29091"
[1897] "4857" "5587" "23256" "1690" "29966" "25938"
[1903] "112487" "80224" "394" "101954278" "112399" "171546"
[1909] "55837" "1073" "6729" "283635" "5687" "4792"
[1915] "51562" "10484" "122553" "5411" "4253" "23116"
[1921] "2287" "57697" "6235" "6029" "122769" "6166"
[1927] "4247" "55172" "122773" "378706" "382" "6655"
[1933] "27109" "11183" "51062" "51199" "114088" "81542"
[1939] "51637" "30001" "5706" "6815" "80821" "23034"
[1945] "93487" "100129075" "54916" "10640" "122830" "145407"
[1951] "55860" "5926" "51339" "112849" "51528" "6252"
[1957] "51635" "57570" "145389" "3091" "81537" "23224"
[1963] "9495" "22890" "3306" "91612" "376267" "2530"
[1969] "10243" "64398" "1965" "26499" "57475" "384"
[1975] "10490" "23503" "677" "87" "8816" "57452"
[1981] "2079" "55334" "51241" "10001" "23508" "4293"
[1987] "22990" "26094" "58517" "89932" "79697" "641371"
[1993] "10965" "83544" "9240" "91748" "100506476" "145482"
[1999] "57862" "145483" "51004" "4329" "91750" "10577"
[2005] "9870" "1743" "97" "79696" "91754" "10972"
[2011] "55640" "7043" "112752" "2103" "23357" "85457"
[2017] "57156" "63894" "81892" "57143" "6400" "23768"
[2023] "2581" "55812" "79882" "161436" "1112" "55775"
[2029] "56659" "5700" "801" "9321" "4287" "4707"
[2035] "53981" "79890" "5641" "26175" "84520" "55148"
[2041] "55727" "78990" "122509" "5265" "23405" "79789"
[2047] "51218" "56967" "55102" "51527" "64919" "84193"
[2053] "317762" "84439" "2009" "51466" "123096" "7453"
[2059] "79446" "8788" "55384" "1778" "3320" "91833"
[2065] "122416" "7187" "9578" "4140" "1152" "84334"
[2071] "3831" "23368" "9556" "374569" "26153" "10572"
[2077] "113146" "3714" "256281" "2972" "90135" "647310"
[2083] "100507437" "283755" "646243" "100132101" "339005" "81614"
[2089] "23191" "114791" "4692" "347746" "8123" "100033416"
[2095] "100033432" "3653" "7337" "440248" "440253" "646278"
[2101] "321" "56160" "653075" "101059918" "728498" "54893"
[2107] "51621" "653125" "728047" "100288615" "100996255" "643699"
[2113] "342184" "6263" "57099" "56851" "161779" "51234"
[2119] "55505" "254531" "101928174" "9716" "54989" "283742"
[2125] "10125" "440275" "6727" "100131244" "100505573" "85455"
[2131] "3712" "90416" "27079" "100505648" "643338" "84936"
[2137] "54617" "11261" "51103" "4058" "23269" "23005"
[2143] "51332" "825" "255252" "55142" "57519" "146059"
[2149] "197131" "23582" "9836" "161823" "146050" "27229"
[2155] "9677" "1159" "117155" "548596" "2923" "10169"
[2161] "4236" "84978" "728758" "113201" "51496" "645212"
[2167] "8669" "80208" "100419583" "6652" "2628" "7782"
[2173] "26258" "58472" "80031" "1854" "2200" "23741"
[2179] "9318" "2585" "2252" "2553" "9101" "54822"
[2185] "84888" "23431" "123169" "10681" "55930" "51187"
[2191] "5873" "145788" "4734" "55329" "6938" "81488"
[2197] "102" "79811" "54778" "145773" "2958" "663"
[2203] "302" "6095" "54832" "83464" "9960" "23604"
[2209] "84191" "6642" "79856" "5479" "23060" "4947"
[2215] "348093" "51324" "123263" "390594" "10845" "54956"
[2221] "9543" "54878" "51495" "10260" "8766" "115752"
[2227] "5604" "10302" "6124" "79719" "64799" "100506686"
[2233] "145853" "5607" "8554" "91860" "10116" "22801"
[2239] "26035" "54852" "6176" "55075" "55323" "79875"
[2245] "4649" "123228" "56965" "25820" "83440" "4756"
[2251] "10021" "27020" "4016" "64220" "1583" "8482"
[2257] "84993" "440288" "80153" "1543" "1445" "25989"
[2263] "10066" "4351" "60490" "56905" "54939" "79661"
[2269] "4123" "25942" "10073" "257364" "2108" "5955"
[2275] "10099" "79834" "10363" "23102" "10518" "55466"
[2281] "80349" "3658" "1138" "1136" "10933" "1512"
[2287] "23423" "23251" "2184" "9915" "57214" "79631"
[2293] "647042" "100134869" "440295" "80154" "642402" "6218"
[2299] "100505616" "9455" "123207" "53339" "53346" "57188"
[2305] "440300" "388152" "643707" "374650" "388165" "54993"
[2311] "54581" "84942" "23478" "9640" "57538" "642423"
[2317] "101929479" "100133220" "4916" "26589" "64963" "55070"
[2323] "8800" "290" "348110" "374655" "3418" "10509"
[2329] "390637" "8826" "2242" "4122" "55898" "26276"
[2335] "8128" "100507217" "440311" "7026" "91947" "23336"
[2341] "123355" "7190" "4205" "145748" "441733" "55180"
[2347] "55829" "80213" "123283" "100128108" "55692" "83986"
[2353] "398" "64714" "9727" "6650" "9091" "84326"
[2359] "84331" "197335" "9028" "10273" "339123" "84219"
[2365] "146330" "124093" "64428" "8912" "8938" "64718"
[2371] "283951" "9894" "9742" "90861" "23162" "197342"
[2377] "90864" "3029" "6187" "10607" "2671" "9143"
[2383] "90850" "7249" "5310" "25837" "100507303" "84231"
[2389] "57524" "283870" "1775" "4917" "57465" "51005"
[2395] "752014" "83886" "23524" "6923" "9074" "64386"
[2401] "100507419" "9235" "7752" "91151" "7727" "146434"
[2407] "197358" "1387" "115" "7023" "84662" "79585"
[2413] "9093" "57407" "3163" "342346" "23295" "84309"
[2419] "124401" "26048" "29855" "5493" "54715" "79091"
[2425] "25880" "23589" "7874" "2903" "80063" "780776"
[2431] "23274" "29066" "2935" "729993" "2072" "57496"
[2437] "51283" "642778" "23420" "100288162" "23042" "54700"
[2443] "353511" "105369154" "100288332" "89927" "4629" "4363"
[2449] "408050" "102465683" "102723728" "283820" "6210" "23049"
[2455] "10229" "162073" "51573" "57020" "124152" "51704"
[2461] "55623" "57146" "23117" "100190986" "440345" "7385"
[2467] "255762" "730094" "29904" "55718" "1039" "100131998"
[2473] "641298" "100132247" "91949" "23062" "124454" "4706"
[2479] "79728" "5930" "27327" "55114" "102723510" "51451"
[2485] "342357" "79831" "197370" "2975" "23247" "728689"
[2491] "112869" "8663" "11273" "25970" "100289092" "84901"
[2497] "83985" "27040" "552900" "440354" "4150" "112476"
[2503] "9961" "283899" "8448" "226" "5531" "83719"
[2509] "654483" "548593" "100526830" "613037" "595101" "105371169"
[2515] "1731" "197407" "51333" "79724" "65988" "115509"
[2521] "730183" "9810" "9274" "1489" "93129" "112755"
[2527] "6810" "339105" "79001" "84148" "5652" "2521"
[2533] "283933" "64755" "124411" "606551" "84706" "10294"
[2539] "81533" "83752" "100507577" "6477" "9683" "869"
[2545] "255919" "113" "29117" "80205" "5934" "64400"
[2551] "643911" "4313" "54947" "1066" "2775" "267"
[2557] "11051" "583" "9688" "84166" "221184" "89970"
[2563] "51090" "6376" "57019" "57017" "5432" "55715"
[2569] "10300" "3801" "29105" "65009" "23019" "55238"
[2575] "644649" "123920" "1783" "57546" "51647" "283848"
[2581] "80262" "84752" "8717" "55336" "3299" "1874"
[2587] "79767" "29109" "25894" "79567" "146206" "50855"
[2593] "388284" "81577" "57215" "10204" "5681" "3931"
[2599] "6560" "9057" "84138" "79613" "84916" "84342"
[2605] "64146" "7014" "80777" "283970" "55066" "100506060"
[2611] "118460" "11269" "100506083" "55308" "6483" "25839"
[2617] "92154" "55697" "55783" "794" "164" "463"
[2623] "5713" "283922" "440348" "2734" "55159" "79726"
[2629] "9564" "124491" "4166" "3735" "170692" "283927"
[2635] "57687" "123775" "2653" "114780" "5336" "1012"
[2641] "105371371" "29948" "146167" "23406" "79786" "55625"
[2647] "23199" "404550" "64779" "2303" "100506581" "79791"
[2653] "57338" "54758" "105371397" "8140" "54971" "84627"
[2659] "161882" "197187" "348180" "353" "2588" "863"
[2665] "283860" "197320" "29123" "6687" "6137" "5119"
[2671] "8558" "124044" "9605" "100128881" "92822" "22980"
[2677] "92806" "172" "2622" "9501" "400566" "51031"
[2683] "55178" "64359" "29928" "29" "7531" "100306951"
[2689] "8578" "83547" "10594" "84981" "5176" "114826"
[2695] "124641" "63826" "55720" "9905" "79066" "5048"
[2701] "23277" "23108" "1497" "55421" "84254" "23140"
[2707] "124936" "7326" "342527" "246" "27043" "409"
[2713] "400569" "5694" "5338" "50488" "2811" "26001"
[2719] "5216" "9552" "23125" "10749" "124961" "7775"
[2725] "84622" "9135" "84268" "56919" "51009" "22861"
[2731] "23302" "83394" "84817" "51003" "388327" "201232"
[2737] "432" "1856" "79142" "23399" "23587" "1984"
[2743] "9744" "8711" "8742" "26168" "26781" "102724164"
[2749] "9526" "9513" "55135" "84316" "1107" "9196"
[2755] "116840" "6844" "84314" "6154" "4628" "8522"
[2761] "4621" "100128006" "60528" "1352" "201158" "54902"
[2767] "9611" "125144" "26800" "388341" "57336" "56953"
[2773] "10743" "6720" "146691" "2314" "125170" "7156"
[2779] "2310" "51030" "27077" "5598" "4239" "9706"
[2785] "11216" "440416" "105369205" "3768" "339263" "100462977"
[2791] "26118" "7448" "113235" "9094" "94005" "124923"
[2797] "6388" "147011" "83871" "55731" "26284" "2319"
[2803] "147015" "57649" "124925" "51268" "57532" "57551"
[2809] "84940" "642" "1362" "9527" "147172" "440423"
[2815] "79736" "55813" "23512" "7756" "5717" "4642"
[2821] "26022" "10693" "91603" "117584" "55106" "163"
[2827] "8148" "414062" "102724862" "101060321" "9326" "80179"
[2833] "31" "6871" "11072" "11056" "101060376" "101060389"
[2839] "414060" "101929950" "102723859" "729873" "440434" "84311"
[2845] "80725" "4302" "9349" "3927" "100505576" "6143"
[2851] "5469" "84152" "10948" "5409" "93210" "84299"
[2857] "2886" "94103" "339287" "22794" "51195" "147179"
[2863] "6605" "3858" "147184" "3880" "10209" "55175"
[2869] "83538" "28511" "2648" "5878" "6777" "6776"
[2875] "284119" "535" "4669" "80347" "7283" "79990"
[2881] "2826" "84313" "65266" "10197" "146923" "6155"
[2887] "3430" "10493" "8153" "10230" "101929767" "4077"
[2893] "379" "1845" "4355" "84336" "124801" "92579"
[2899] "10014" "92591" "56970" "101926996" "10900" "284069"
[2905] "23131" "124808" "80174" "4185" "79877" "79777"
[2911] "9020" "9842" "55073" "401884" "147081" "4137"
[2917] "284058" "9884" "100506084" "51326" "474170" "9570"
[2923] "653479" "9755" "124995" "102724532" "51226" "4779"
[2929] "10951" "29916" "3213" "3214" "11267" "10642"
[2935] "22834" "5245" "4804" "10237" "3675" "201191"
[2941] "1277" "51264" "55379" "64847" "8913" "91369"
[2947] "10140" "9043" "4830" "54799" "1353" "252983"
[2953] "8161" "59342" "124540" "51649" "101929185" "140735"
[2959] "9110" "5414" "55181" "388403" "79665" "51651"
[2965] "81671" "6198" "101927755" "653645" "63897" "653653"
[2971] "342538" "57508" "9902" "51204" "92335" "57003"
[2977] "11325" "117246" "5705" "2081" "692227" "64750"
[2983] "5578" "27092" "5718" "25926" "284018" "51321"
[2989] "22901" "5573" "54757" "201266" "6169" "94015"
[2995] "26151" "54868" "3396" "6613" "51081" "57409"
[3001] "100287042" "60386" "2885" "9772" "283989" "3993"
[3007] "80022" "9400" "643008" "3691" "2584" "23558"
[3013] "91107" "64978" "85302" "51" "6730" "114804"
[3019] "5635" "63893" "100507246" "439921" "23210" "79157"
[3025] "6397" "10801" "100131096" "11322" "9144" "9489"
[3031] "7077" "124583" "114897" "64772" "84733" "57332"
[3037] "8535" "125058" "55036" "6448" "284131" "100129503"
[3043] "284184" "124565" "57597" "25794" "80233" "55666"
[3049] "83882" "339231" "348262" "5034" "396" "51529"
[3055] "5833" "79058" "201254" "2873" "64118" "9123"
[3061] "284004" "79415" "3607" "56270" "10966" "6904"
[3067] "284207" "727758" "81035" "84034" "727896" "10627"
[3073] "339290" "7541" "23136" "645369" "79822" "5797"
[3079] "57045" "10928" "9989" "9218" "147495" "63895"
[3085] "65258" "84617" "10650" "56907" "56984" "79959"
[3091] "5771" "81929" "8731" "440482" "6093" "80000"
[3097] "114799" "100128893" "64693" "5932" "85019" "147463"
[3103] "3909" "6875" "1829" "9331" "22878" "54941"
[3109] "51444" "64762" "441818" "10982" "7572" "2589"
[3115] "83608" "25800" "55250" "55034" "57724" "115106"
[3121] "494470" "29906" "9063" "83473" "84064" "51124"
[3127] "4087" "9811" "54808" "497661" "6139" "10449"
[3133] "4152" "5596" "4200" "55520" "4089" "8932"
[3139] "5874" "80323" "6925" "9352" "2235" "100505549"
[3145] "5205" "23327" "10892" "55205" "90701" "3998"
[3151] "147372" "23556" "57614" "8792" "596" "5055"
[3157] "54495" "220164" "25914" "81832" "400657" "284273"
[3163] "10194" "7776" "4772" "80148" "440498" "10907"
[3169] "22850" "375690" "54531" "91978" "997" "682"
[3175] "55658" "5064" "79948" "10025" "91300" "1820"
[3181] "116444" "91304" "103625684" "10347" "5434" "2879"
[3187] "22904" "255057" "90007" "148046" "2593" "148223"
[3193] "54760" "399664" "10975" "6929" "100288123" "81926"
[3199] "113178" "84444" "8175" "4946" "51690" "56928"
[3205] "26517" "6449" "115196" "58492" "56926" "51343"
[3211] "10362" "9546" "116541" "23217" "693222" "1938"
[3217] "51588" "5605" "51548" "170961" "55702" "79187"
[3223] "55620" "84954" "6455" "80700" "84717" "56005"
[3229] "91039" "100131094" "10226" "23030" "9667" "6294"
[3235] "374875" "25873" "9361" "163154" "56931" "126328"
[3241] "400673" "828" "8498" "5990" "4298" "2962"
[3247] "8570" "79085" "56927" "9322" "140467" "57662"
[3253] "126003" "115704" "404217" "79603" "51293" "4701"
[3259] "6234" "51129" "100507567" "9230" "4670" "148156"
[3265] "57693" "10781" "79088" "101928238" "54811" "162993"
[3271] "5300" "55337" "56342" "5032" "8666" "9294"
[3277] "125950" "3385" "7297" "9817" "84971" "65095"
[3283] "3609" "1785" "25959" "57572" "126075" "2057"
[3289] "5589" "199692" "55552" "126068" "126069" "90594"
[3295] "90592" "388507" "7695" "51710" "10224" "163051"
[3301] "163049" "84292" "1725" "30000" "29911" "7001"
[3307] "22983" "1777" "2639" "256126" "2193" "90480"
[3313] "4784" "55621" "81576" "84245" "28974" "284454"
[3319] "54862" "90379" "113230" "90378" "100507373" "22859"
[3325] "10212" "3337" "4713" "4854" "26993" "8907"
[3331] "10365" "58513" "10523" "79939" "79041" "2063"
[3337] "29086" "64981" "79016" "57719" "25796" "79709"
[3343] "55201" "6142" "115098" "3780" "23031" "84769"
[3349] "5864" "3727" "25804" "54858" "170463" "23770"
[3355] "79036" "25789" "5976" "9454" "10147" "93436"
[3361] "284439" "729991" "126382" "57794" "23383" "51079"
[3367] "148113" "9170" "51291" "7561" "284440" "56242"
[3373] "91120" "90649" "100129842" "199777" "7639" "80264"
[3379] "148206" "170959" "7562" "148203" "353088" "163227"
[3385] "7757" "7644" "148213" "388524" "101929206" "148189"
[3391] "101927151" "7386" "10775" "83636" "898" "8725"
[3397] "22847" "147991" "84079" "85415" "126248" "4037"
[3403] "1054" "5184" "79047" "10054" "126374" "55900"
[3409] "339318" "148103" "90075" "126375" "57655" "3249"
[3415] "163175" "5348" "53827" "100128682" "93099" "100506469"
[3421] "1340" "55957" "126393" "84807" "644096" "199745"
[3427] "1155" "826" "84924" "101927599" "92283" "284408"
[3433] "388536" "25850" "147923" "199704" "92285" "163087"
[3439] "284459" "148266" "148268" "101927720" "100507433" "163255"
[3445] "51276" "22835" "84775" "23094" "94274" "10653"
[3451] "9424" "27335" "81" "147968" "1891" "6183"
[3457] "342897" "55095" "54623" "6217" "6829" "92609"
[3463] "10683" "126272" "163126" "9149" "2091" "5704"
[3469] "339327" "163131" "284323" "208" "23646" "147746"
[3475] "29946" "8425" "9253" "79934" "284325" "6626"
[3481] "112398" "558" "11100" "90324" "641649" "593"
[3487] "55101" "64763" "116115" "2077" "23152" "100996307"
[3493] "3991" "23474" "126298" "79177" "199731" "5329"
[3499] "284349" "7711" "7773" "7673" "7766" "342909"
[3505] "7767" "100379224" "7768" "10780" "7769" "7772"
[3511] "7733" "5817" "56971" "602" "4059" "10452"
[3517] "348" "11129" "79760" "57787" "147700" "10848"
[3523] "10849" "7408" "24139" "6633" "54814" "23403"
[3529] "147912" "1760" "339344" "808" "147906" "100506068"
[3535] "25865" "1175" "2909" "54958" "10055" "26093"
[3541] "11133" "29998" "29997" "6415" "8605" "100505812"
[3547] "10945" "2906" "6141" "770" "587" "51171"
[3553] "4924" "581" "2512" "2997" "10856" "6625"
[3559] "3270" "28968" "951" "55011" "126133" "23521"
[3565] "6205" "2217" "57333" "6237" "58506" "126129"
[3571] "160" "80199" "53635" "101928378" "11284" "84335"
[3577] "79735" "22809" "51231" "79784" "3748" "7376"
[3583] "112703" "284361" "126119" "6320" "84798" "90353"
[3589] "147645" "7728" "147650" "84765" "65251" "59348"
[3595] "80110" "9668" "284371" "5518" "162963" "102724105"
[3601] "84436" "147660" "55762" "7696" "55769" "81856"
[3607] "90338" "342926" "91661" "388561" "55422" "59283"
[3613] "4696" "29844" "26121" "4849" "79042" "6203"
[3619] "104355426" "114823" "94059" "55655" "54869" "54776"
[3625] "7138" "352909" "5794" "23640" "3589" "6158"
[3631] "89887" "100507290" "51157" "29924" "126208" "147948"
[3637] "386758" "63934" "388566" "9422" "390980" "10794"
[3643] "125919" "57343" "284306" "10597" "7565" "388567"
[3649] "400720" "79744" "374928" "256051" "55659" "284307"
[3655] "348327" "7693" "10520" "7710" "54807" "730051"
[3661] "147687" "10172" "147685" "80095" "100128398" "65982"
[3667] "79673" "27300" "7554" "105372483" "6193" "7691"
[3673] "10998" "10155" "27243" "9040" "65996" "642273"
[3679] "52" "7173" "7260" "51112" "55256" "100506054"
[3685] "6201" "78989" "57498" "129642" "8853" "9270"
[3691] "6868" "10971" "9014" "79954" "10130" "130814"
[3697] "9475" "1876" "9687" "23175" "28951" "4613"
[3703] "7447" "79677" "57665" "130502" "57539" "9741"
[3709] "23369" "388" "64342" "54454" "165324" "80304"
[3715] "51639" "375190" "391356" "51277" "1788" "1838"
[3721] "3797" "3030" "85465" "54978" "22924" "54867"
[3727] "11117" "10669" "10113" "8884" "51374" "285126"
[3733] "2976" "8890" "9784" "130557" "29959" "84226"
[3739] "84450" "11321" "9913" "22950" "105374378" "64080"
[3745] "9577" "5500" "55006" "81606" "253558" "30845"
[3751] "51072" "6683" "58484" "84272" "25780" "51232"
[3757] "6801" "54497" "5610" "100505876" "10153" "55471"
[3763] "23683" "25797" "10602" "64225" "92906" "90957"
[3769] "729967" "8491" "63892" "79823" "5581" "23433"
[3775] "9419" "9655" "805" "618" "4072" "2956"
[3781] "80204" "129285" "9378" "51130" "494143" "27248"
[3787] "10936" "23198" "6711" "130162" "6233" "4528"
[3793] "344405" "55704" "112942" "57223" "87178" "2202"
[3799] "7444" "55120" "53335" "64895" "5966" "150962"
[3805] "5194" "84542" "130872" "7514" "84140" "10575"
[3811] "150684" "51057" "7360" "6509" "5861" "10097"
[3817] "4211" "54465" "10438" "56902" "5534" "25927"
[3823] "554251" "27302" "84168" "2673" "27247" "22848"
[3829] "5093" "51449" "6637" "84908" "7039" "119"
[3835] "113419" "55577" "84693" "400961" "23233" "6697"
[3841] "84279" "10574" "8446" "1716" "200424" "10797"
[3847] "57835" "1639" "84058" "6242" "84865" "84695"
[3853] "1796" "3099" "56655" "6936" "80059" "9168"
[3859] "56888" "83439" "84173" "822" "2677" "10791"
[3865] "129303" "10713" "388969" "84913" "8869" "90784"
[3871] "25885" "51652" "7844" "400966" "5343" "285074"
[3877] "102724642" "5342" "729857" "55258" "654342" "64969"
[3883] "7549" "51011" "285033" "9391" "23020" "55683"
[3889] "90342" "51239" "54910" "1329" "23505" "3631"
[3895] "493753" "25972" "51601" "129531" "10190" "9669"
[3901] "51455" "3899" "4862" "6160" "11138" "100506286"
[3907] "9448" "84804" "130827" "79074" "8440" "653489"
[3913] "84620" "285190" "27233" "5903" "165055" "100287216"
[3919] "151011" "84220" "96626" "440894" "7851" "205251"
[3925] "151009" "729540" "84524" "727851" "6574" "150472"
[3931] "729468" "84771" "118433" "80255" "10096" "8886"
[3937] "55240" "140738" "200373" "2736" "7247" "2995"
[3943] "274" "2071" "55677" "4648" "84826" "83607"
[3949] "56886" "84084" "440905" "728378" "285103" "80097"
[3955] "84317" "92856" "26469" "50649" "130074" "150786"
[3961] "653784" "90557" "29798" "2863" "344148" "81615"
[3967] "905" "22930" "84083" "23190" "1615" "3176"
[3973] "339745" "9839" "26122" "130576" "130574" "27249"
[3979] "55183" "4703" "10254" "55660" "151188" "3760"
[3985] "2820" "728066" "90" "29994" "22925" "5937"
[3991] "10010" "100996579" "285116" "25801" "2888" "6326"
[3997] "79809" "6335" "253782" "10324" "9360" "493911"
[4003] "6741" "130507" "79901" "1781" "8520" "3655"
[4009] "5163" "11069" "51776" "79634" "151556" "7456"
[4015] "1134" "1386" "10651" "220988" "8540" "65977"
[4021] "91404" "151126" "10477" "6744" "151242" "2487"
[4027] "142679" "55854" "3685" "165215" "7035" "1281"
[4033] "1290" "84128" "30061" "150709" "94101" "84281"
[4039] "100131211" "4664" "8436" "57181" "80055" "91526"
[4045] "23451" "80219" "3329" "3336" "25843" "5334"
[4051] "129450" "285172" "4709" "8837" "841" "130540"
[4057] "66008" "55437" "65062" "57679" "7341" "51602"
[4063] "659" "150864" "130026" "57404" "10152" "65059"
[4069] "117583" "54891" "1933" "57683" "8745" "8609"
[4075] "3417" "200576" "4133" "6120" "151050" "10314"
[4081] "79582" "471" "2335" "7520" "50485" "6168"
[4087] "3485" "3488" "10109" "58190" "57695" "84812"
[4093] "64320" "27148" "1593" "27013" "130617" "79065"
[4099] "8576" "3300" "5798" "23549" "130612" "3623"
[4105] "2043" "2181" "7857" "130340" "57590" "8452"
[4111] "84236" "1286" "1285" "56947" "3267" "164781"
[4117] "92737" "6672" "81618" "5707" "80210" "5147"
[4123] "64708" "9470" "26058" "3635" "8527" "55230"
[4129] "23677" "116987" "79781" "10920" "1293" "64284"
[4135] "10267" "140739" "339768" "80895" "643387" "26146"
[4141] "4705" "2817" "57140" "50636" "3069" "9855"
[4147] "666" "51078" "23192" "84289" "728294" "80023"
[4153] "1457" "140809" "9491" "55321" "55968" "10326"
[4159] "140885" "6628" "79175" "3420" "56265" "64601"
[4165] "5786" "64949" "60493" "9762" "8455" "80332"
[4171] "54976" "1059" "57506" "11237" "9962" "29058"
[4177] "149837" "149840" "1114" "55612" "650" "23236"
[4183] "128710" "182" "55617" "51575" "11034" "6238"
[4189] "27131" "7692" "10621" "10483" "92675" "100270804"
[4195] "51126" "22803" "7056" "29107" "64412" "79953"
[4201] "57136" "101926889" "5834" "22981" "26152" "100134868"
[4207] "100289097" "284802" "81502" "598" "128853" "81572"
[4213] "9777" "5326" "9371" "171023" "149951" "1789"
[4219] "51654" "63941" "84905" "22913" "8894" "191"
[4225] "83737" "83658" "23054" "2937" "26133" "55741"
[4231] "10893" "101410538" "11190" "51614" "80307" "6676"
[4237] "8904" "10137" "9054" "140823" "9584" "51230"
[4243] "51282" "647979" "22839" "10398" "60436" "55969"
[4249] "140710" "140711" "10904" "4826" "56259" "128434"
[4255] "9675" "58490" "57148" "7150" "5335" "26013"
[4261] "10955" "7529" "80336" "90196" "116092" "10005"
[4267] "140831" "90204" "128497" "140825" "5360" "63935"
[4273] "57468" "51006" "112858" "23613" "57580" "10564"
[4279] "1434" "6780" "55661" "441951" "9334" "55905"
[4285] "7335" "101927559" "140876" "84612" "55653" "101927631"
[4291] "3755" "4773" "10079" "5203" "55816" "1477"
[4297] "55370" "9217" "164284" "100534593" "79716" "1522"
[4303] "81027" "514" "51012" "116154" "6874" "149986"
[4309] "26039" "9885" "6227" "1299" "11083" "54915"
[4315] "85441" "26205" "50861" "10139" "56731" "140685"
[4321] "140701" "80331" "100113386" "24148" "6919" "4987"
[4327] "102724023" "102724159" "102724219" "102724441" "102724594" "102724843"
[4333] "102724951" "102723360" "100500862" "100500815" "103504731" "6782"
[4339] "8204" "1525" "4685" "54148" "58494" "522"
[4345] "351" "116159" "9510" "26046" "10600" "56911"
[4351] "2897" "7074" "30811" "9875" "140290" "56683"
[4357] "94104" "3588" "3454" "3460" "757" "54943"
[4363] "2618" "6651" "6453" "1827" "54093" "873"
[4369] "100506428" "6493" "51227" "7267" "1859" "2114"
[4375] "8624" "54014" "150082" "25825" "25966" "10785"
[4381] "4731" "7307" "8566" "1476" "8568" "5822"
[4387] "8209" "5211" "755" "7327" "754" "104"
[4393] "23275" "642852" "80781" "54039" "1292" "8888"
[4399] "54059" "5116" "51816" "27443" "23786" "55670"
[4405] "11274" "8214" "9993" "100652736" "6576" "8218"
[4411] "7290" "7353" "5413" "100526833" "10587" "1312"
[4417] "27037" "29801" "65078" "85359" "91179" "84861"
[4423] "51586" "5297" "9342" "8216" "80764" "9127"
[4429] "728441" "7332" "29799" "5594" "9647" "8940"
[4435] "96610" "91227" "9609" "613" "26226" "91316"
[4441] "266747" "7621" "4320" "6598" "66035" "653689"
[4447] "100037417" "1652" "2953" "56241" "23384" "6634"
[4453] "2678" "388886" "85379" "91355" "157" "89781"
[4459] "8459" "4330" "23760" "284900" "150274" "129080"
[4465] "2130" "10634" "162" "8563" "29796" "84164"
[4471] "8897" "652968" "83874" "10291" "85371" "200312"
[4477] "51537" "23481" "339665" "150290" "22880" "55000"
[4483] "6525" "113791" "54944" "56478" "51493" "25793"
[4489] "9215" "10043" "23551" "4151" "23543" "4627"
[4495] "25828" "8664" "114904" "5880" "11135" "26088"
[4501] "57026" "11078" "3005" "23464" "129138" "51386"
[4507] "5435" "9463" "23539" "25829" "1454" "3761"
[4513] "11144" "646851" "25776" "56993" "25777" "10126"
[4519] "23467" "23466" "9582" "200316" "60489" "6122"
[4525] "4248" "54471" "91582" "23112" "158" "27352"
[4531] "57591" "63929" "9978" "83746" "5905" "23264"
[4537] "7008" "10766" "50" "171568" "5372" "4809"
[4543] "79879" "91689" "1565" "1564" "6942" "94009"
[4549] "253190" "91695" "1727" "27349" "25830" "25813"
[4555] "29780" "64098" "85352" "100506714" "10762" "2192"
[4561] "25814" "5465" "64781" "25771" "23774" "79174"
[4567] "415116" "56666" "85378" "83933" "23654" "414918"
[4573] "9701" "9997" "1375" "23542" "284942" "27255"
[4579] "152330" "51095" "51185" "285362" "6419" "8553"
[4585] "55207" "29995" "5021" "440944" "10474" "10093"
[4591] "84522" "132014" "78987" "55831" "442075" "401052"
[4597] "152302" "55845" "7428" "3656" "9797" "491"
[4603] "10533" "9686" "5894" "55287" "6161" "79885"
[4609] "2199" "131474" "79188" "6533" "51244" "84077"
[4615] "100505641" "7182" "23473" "100505696" "9467" "131965"
[4621] "26061" "23180" "6304" "79750" "7324" "28512"
[4627] "55768" "54995" "152110" "9497" "152100" "152098"
[4633] "100873979" "7048" "152189" "51143" "25904" "2720"
[4639] "643853" "10491" "25827" "23122" "10015" "9881"
[4645] "9852" "9209" "2803" "3680" "101928153" "10217"
[4651] "30" "4615" "93" "64689" "3921" "9045"
[4657] "253639" "1499" "54986" "22906" "7433" "51188"
[4663] "4820" "25994" "84892" "55129" "285343" "353274"
[4669] "10168" "7584" "101928592" "91392" "57456" "131616"
[4675] "23016" "64866" "23395" "8994" "22908" "54585"
[4681] "79443" "6997" "259173" "29122" "4634" "5745"
[4687] "151903" "23218" "23276" "6599" "22907" "4134"
[4693] "51385" "51246" "5210" "1294" "7384" "65010"
[4699] "1951" "51447" "5576" "788" "11180" "55152"
[4705] "25915" "3615" "54870" "5859" "64925" "200942"
[4711] "387" "6988" "84276" "327" "4485" "63891"
[4717] "29925" "9807" "10180" "10181" "100775107" "101928931"
[4723] "7869" "24142" "3373" "8692" "11068" "11070"
[4729] "9254" "51409" "1154" "7867" "84836" "25864"
[4735] "6159" "11344" "132160" "80335" "132158" "25981"
[4741] "8314" "11188" "440957" "26354" "28972" "6787"
[4747] "3699" "3700" "51460" "55802" "776" "55349"
[4753] "23272" "54756" "201626" "2317" "5162" "200845"
[4759] "5793" "80145" "9861" "115286" "26018" "8801"
[4765] "285203" "7110" "9039" "10550" "4286" "2850"
[4771] "727936" "151987" "55096" "23024" "101927249" "401074"
[4777] "100131827" "285237" "2042" "5627" "200894" "131544"
[4783] "56650" "1371" "100874207" "10402" "131566" "55773"
[4789] "56954" "9868" "348801" "55076" "10342" "54931"
[4795] "57092" "100009676" "6152" "105374013" "285359" "79598"
[4801] "91775" "214" "344595" "55081" "9666" "25945"
[4807] "79669" "257144" "4345" "64422" "55032" "100506621"
[4813] "151887" "29083" "91653" "55779" "152185" "205717"
[4819] "254887" "57577" "26137" "152404" "7348" "8702"
[4825] "57514" "55254" "51300" "141" "10063" "2932"
[4831] "11167" "285282" "2960" "2804" "9657" "6565"
[4837] "26355" "54554" "3836" "83666" "10954" "26984"
[4843] "64770" "8997" "3693" "57493" "84561" "7707"
[4849] "8723" "114885" "54946" "166012" "131601" "50512"
[4855] "11343" "29927" "8607" "60678" "6184" "28976"
[4861] "7555" "22820" "8971" "339942" "55764" "23129"
[4867] "7200" "646300" "30849" "28990" "84129" "79876"
[4873] "27031" "7018" "51560" "6259" "51421" "339855"
[4879] "5523" "5096" "4690" "199221" "51163" "22808"
[4885] "55179" "56945" "9276" "100507291" "64084" "55186"
[4891] "92369" "92370" "253461" "9616" "483" "5357"
[4897] "7220" "23350" "205428" "5352" "2992" "25937"
[4903] "9819" "27230" "51714" "6478" "26084" "170506"
[4909] "4311" "8833" "7881" "25976" "730091" "339894"
[4915] "85476" "56925" "64747" "57560" "3840" "151742"
[4921] "51068" "79740" "11235" "93556" "2122" "84517"
[4927] "100128164" "7095" "80012" "6498" "56648" "64778"
[4933] "5290" "55669" "86" "57129" "4711" "339829"
[4939] "8087" "23200" "54165" "23101" "84002" "54800"
[4945] "55689" "55486" "10057" "8893" "1857" "1173"
[4951] "1981" "23355" "285382" "1962" "200879" "59343"
[4957] "6434" "51726" "5648" "101929130" "339929" "55214"
[4963] "152137" "151963" "57110" "84789" "4976" "93109"
[4969] "131583" "152002" "23527" "5504" "727956" "440993"
[4975] "255812" "200931" "5130" "255758" "165918" "348793"
[4981] "200933" "54965" "220729" "84248" "84223" "6165"
[4987] "152687" "7700" "170960" "521" "100129917" "10815"
[4993] "2580" "84286" "1609" "10861" "3425" "285463"
[4999] "1487" "10296" "101928621" "57654" "285464" "152877"
[5005] "92305" "3954" "7469" "401115" "339983" "79441"
[5011] "57732" "6047" "79155" "6452" "118" "10227"
[5017] "8602" "2868" "3064" "6002" "3083" "85013"
[5023] "55646" "166793" "53407" "100507266" "1400" "7466"
[5029] "93621" "93622" "9778" "93624" "57537" "768239"
[5035] "94031" "152992" "8532" "56606" "9948" "85460"
[5041] "9364" "26234" "285550" "683" "8842" "254251"
[5047] "9353" "133015" "80333" "6649" "51091" "55300"
[5053] "29945" "10568" "389203" "768211" "55276" "23216"
[5059] "51088" "57728" "11019" "7358" "100885776" "23244"
[5065] "55728" "79730" "323" "7345" "22998" "55161"
[5071] "10463" "10396" "60558" "132789" "57205" "152518"
[5077] "7006" "285527" "54940" "132299" "23142" "6443"
[5083] "57291" "81608" "3791" "55858" "9575" "57482"
[5089] "5471" "10606" "5978" "3490" "2044" "55236"
[5095] "550112" "91746" "6783" "10117" "2926" "9508"
[5101] "285521" "174" "3576" "441024" "374" "25849"
[5107] "25898" "152815" "8999" "8615" "27163" "419"
[5113] "53371" "57619" "10983" "306" "152559" "118429"
[5119] "441027" "22872" "79725" "51138" "27235" "51023"
[5125] "84142" "84803" "23001" "5602" "5783" "100506746"
[5131] "57563" "6696" "5311" "9429" "55008" "8916"
[5137] "285512" "166815" "6622" "401145" "8633" "1977"
[5143] "285556" "79982" "5530" "4790" "4126" "7323"
[5149] "133308" "56898" "80319" "54790" "57117" "79807"
[5155] "255743" "9255" "9061" "113612" "6164" "84570"
[5161] "100533182" "10427" "55013" "81579" "3426" "1950"
[5167] "79071" "2028" "132720" "55435" "7368" "100093630"
[5173] "57721" "54532" "401152" "645513" "8654" "11107"
[5179] "79625" "7222" "11162" "166378" "10252" "79960"
[5185] "54510" "4717" "4258" "55534" "57484" "64399"
[5191] "10393" "152485" "11157" "84068" "55751" "90826"
[5197] "79658" "4306" "152503" "729830" "54553" "23321"
[5203] "303" "23240" "5356" "2983" "1519" "56034"
[5209] "2110" "56884" "55319" "55016" "152756" "11275"
[5215] "7092" "55601" "84869" "51809" "8819" "79804"
[5221] "80817" "2823" "60559" "7424" "175" "55714"
[5227] "1635" "152641" "80014" "55602" "201965" "56977"
[5233] "201973" "57587" "353322" "27295" "285440" "2195"
[5239] "2483" "6389" "57491" "11336" "11076" "653082"
[5245] "79844" "65980" "85409" "79888" "728609" "728613"
[5251] "64979" "4726" "50805" "153572" "153571" "79192"
[5257] "84246" "108" "79072" "100505738" "22948" "10299"
[5263] "1611" "56172" "90441" "728411" "1008" "643401"
[5269] "1004" "64083" "54545" "51663" "4883" "81792"
[5275] "55299" "167127" "6502" "646719" "65250" "9631"
[5281] "3977" "9180" "253260" "5562" "100506548" "6167"
[5287] "730" "5019" "285636" "100132356" "100506639" "64417"
[5293] "100652772" "100506674" "10884" "348980" "79668" "3670"
[5299] "53918" "3672" "3673" "257396" "54622" "112574"
[5305] "23517" "8611" "379013" "153129" "133396" "3572"
[5311] "4214" "133383" "166968" "65056" "5144" "91942"
[5317] "643155" "3796" "27292" "51194" "401190" "285672"
[5323] "373" "80006" "57486" "55914" "375449" "5295"
[5329] "1022" "202243" "102157402" "6880" "100506658" "6607"
[5335] "11039" "11042" "6606" "4671" "55814" "64087"
[5341] "4131" "689" "84135" "8507" "84340" "26049"
[5347] "3156" "10087" "2151" "2149" "1393" "55109"
[5353] "6902" "8546" "9522" "10184" "9456" "167153"
[5359] "345778" "7060" "441089" "9765" "340120" "100462981"
[5365] "100131067" "23635" "6228" "7518" "10085" "1350"
[5371] "5921" "902" "4208" "1070" "153364" "10622"
[5377] "116068" "57561" "83989" "285600" "22836" "2745"
[5383] "831" "64167" "4012" "285704" "1105" "100289230"
[5389] "345757" "5066" "23262" "90355" "1946" "64839"
[5395] "9867" "4124" "642987" "91137" "114915" "6728"
[5401] "7905" "4163" "3781" "5229" "51014" "51397"
[5407] "100422885" "1657" "51334" "153443" "4015" "9627"
[5413] "6643" "5480" "93166" "1456" "501" "115123"
[5419] "644873" "337876" "3094" "56990" "51735" "96459"
[5425] "8974" "8572" "553103" "6584" "11127" "23176"
[5431] "27089" "27125" "56951" "7416" "5515" "7320"
[5437] "91368" "10802" "819" "9879" "79770" "84105"
[5443] "100616209" "9547" "7045" "6695" "10949" "9499"
[5449] "51306" "10902" "8697" "51308" "1495" "64374"
[5455] "724102" "9782" "51247" "389333" "202051" "202052"
[5461] "340061" "7322" "51523" "492311" "84418" "5201"
[5467] "1839" "54882" "10011" "3550" "373863" "3035"
[5473] "56143" "56141" "9752" "56135" "56134" "56131"
[5479] "26167" "57717" "56127" "56126" "56125" "56124"
[5485] "56121" "8641" "9708" "56106" "56099" "56105"
[5491] "5098" "56098" "8841" "89848" "9604" "81848"
[5497] "23092" "81555" "153768" "153769" "54439" "5521"
[5503] "1809" "389336" "81545" "154" "22885" "134266"
[5509] "1452" "133522" "644762" "1836" "5159" "815"
[5515] "340075" "6208" "11346" "85027" "6678" "10146"
[5521] "2890" "4238" "55568" "79685" "10826" "25929"
[5527] "153743" "134353" "9685" "7265" "114825" "2561"
[5533] "900" "5917" "345630" "4869" "6793" "92181"
[5539] "54492" "57222" "51121" "8992" "8614" "91272"
[5545] "80315" "1812" "94081" "84321" "51491" "192286"
[5551] "1212" "23197" "22838" "114787" "51720" "23567"
[5557] "64324" "27166" "10636" "9260" "79930" "51428"
[5563] "54540" "54732" "11285" "202181" "728554" "23138"
[5569] "64777" "85007" "57396" "117608" "80108" "80230"
[5575] "821" "9794" "51149" "23061" "55819" "5601"
[5581] "100859930" "729678" "101928649" "84851" "100507602" "100132062"
[5587] "340156" "5269" "401232" "4835" "670" "7280"
[5593] "347733" "389362" "57128" "10667" "6239" "83732"
[5599] "1832" "654" "81567" "55003" "51522" "81853"
[5605] "54898" "221710" "4739" "100113407" "100130357" "51256"
[5611] "54438" "23408" "51406" "63933" "3720" "84062"
[5617] "2766" "221662" "9972" "7172" "221656" "154141"
[5623] "2822" "7915" "9856" "51567" "55604" "10475"
[5629] "3077" "8353" "54718" "11120" "29777" "100129195"
[5635] "80345" "7745" "651302" "64288" "5987" "3135"
[5641] "3136" "3105" "100507399" "30834" "6992" "3139"
[5647] "414777" "23" "5514" "79969" "8449" "10211"
[5653] "2968" "57176" "54535" "100507436" "4277" "692199"
[5659] "7917" "7918" "58496" "80737" "7407" "57819"
[5665] "3305" "3303" "50854" "26797" "7936" "6499"
[5671] "8859" "720" "1590" "7146" "721" "7148"
[5677] "1388" "10554" "6048" "177" "63940" "1302"
[5683] "6257" "7923" "6015" "6293" "6222" "8705"
[5689] "6892" "1616" "5252" "51596" "221504" "578"
[5695] "221496" "6631" "222663" "7629" "5467" "4736"
[5701] "7005" "57699" "221477" "221476" "9025" "23070"
[5707] "154467" "60685" "2739" "2740" "101929555" "10930"
[5713] "221442" "4188" "7942" "10817" "9477" "55173"
[5719] "55809" "23304" "401261" "285855" "10695" "4201"
[5725] "5528" "9820" "51069" "89953" "5754" "6722"
[5731] "23113" "24149" "89845" "221424" "57510" "9587"
[5737] "55168" "7422" "101929705" "64928" "3326" "988"
[5743] "8464" "53405" "51302" "9481" "442213" "135398"
[5749] "85315" "114327" "9697" "125050" "22858" "26268"
[5755] "60481" "55227" "221336" "57691" "9532" "375513"
[5761] "100463487" "23469" "441155" "1310" "1297" "57579"
[5767] "135154" "60682" "79940" "80759" "25821" "1915"
[5773] "26503" "1303" "1347" "55754" "26054" "3351"
[5779] "83699" "594" "5238" "112611" "4199" "9892"
[5785] "51167" "22832" "9096" "4907" "10492" "387066"
[5791] "57038" "55122" "8732" "10957" "135295" "2570"
[5797] "23195" "60468" "81491" "29078" "26235" "51805"
[5803] "25957" "85015" "892" "10973" "57531" "389421"
[5809] "9474" "100133941" "57673" "57107" "55084" "8724"
[5815] "246269" "84071" "285755" "6610" "64780" "9841"
[5821] "221264" "9896" "84154" "442245" "91749" "10758"
[5827] "2534" "3910" "221294" "23270" "7259" "29940"
[5833] "51389" "345895" "221302" "3841" "285761" "57120"
[5839] "116150" "254394" "25842" "3298" "57515" "10924"
[5845] "7164" "135112" "135114" "84870" "55862" "5796"
[5851] "3908" "93663" "9465" "9439" "26002" "8417"
[5857] "2070" "154091" "10767" "54806" "9774" "9053"
[5863] "340146" "53832" "3459" "7128" "23593" "25901"
[5869] "57211" "153910" "84946" "5325" "83443" "8676"
[5875] "7957" "84085" "10090" "23118" "85313" "116254"
[5881] "645958" "11104" "9113" "348995" "5110" "84918"
[5887] "79465" "81706" "57480" "25902" "55005" "23345"
[5893] "22828" "57492" "79683" "51429" "84947" "56995"
[5899] "6993" "94120" "83861" "6648" "39" "6950"
[5905] "6581" "4216" "79992" "113402" "6196" "8635"
[5911] "4301" "7058" "6991" "55780" "84498" "5134"
[5917] "56975" "5154" "54919" "51608" "90639" "84310"
[5923] "26173" "7975" "114796" "8379" "4521" "29886"
[5929] "55501" "101927181" "221927" "23288" "80727" "2768"
[5935] "57786" "222962" "84629" "51622" "5395" "7965"
[5941] "27102" "5879" "79034" "7559" "441194" "56913"
[5947] "101927391" "54468" "729852" "113263" "4697" "221806"
[5953] "2115" "729920" "28969" "27075" "222901" "6671"
[5959] "8701" "54543" "84668" "55975" "115416" "256355"
[5965] "29896" "1197" "90693" "51678" "54205" "136895"
[5971] "9603" "11335" "8935" "11112" "9586" "54504"
[5977] "1124" "646762" "9805" "55033" "222166" "223082"
[5983] "222161" "23658" "23080" "100129460" "441208" "102724668"
[5989] "25948" "11328" "51251" "989" "23366" "54749"
[5995] "273" "57002" "349114" "8621" "285954" "2737"
[6001] "79020" "64983" "644" "64951" "51619" "84820"
[6007] "285955" "401331" "28988" "10652" "816" "23386"
[6013] "54606" "4967" "83637" "94239" "5814" "285958"
[6019] "9238" "64759" "168507" "168448" "375567" "2887"
[6025] "23480" "1956" "360132" "2631" "5723" "51142"
[6031] "728927" "649395" "340252" "7697" "10793" "51351"
[6037] "2086" "168374" "441242" "2990" "27297" "285908"
[6043] "100289098" "493754" "154881" "644794" "55069" "64940"
[6049] "441250" "260294" "442578" "55695" "9275" "84277"
[6055] "6804" "83451" "1365" "1364" "3984" "7458"
[6061] "84163" "5383" "389524" "5380" "54441" "155400"
[6067] "5387" "83862" "51657" "4191" "3315" "7532"
[6073] "113878" "105375355" "441263" "57639" "54103" "5782"
[6079] "57157" "9863" "10512" "781" "9723" "223117"
[6085] "222223" "9988" "11257" "5244" "53616" "442523"
[6091] "261729" "79846" "85865" "8321" "889" "54467"
[6097] "257415" "1021" "10282" "1278" "64921" "23089"
[6103] "5445" "10165" "7979" "57001" "389538" "22853"
[6109] "25851" "25798" "8295" "101927550" "10552" "11333"
[6115] "8896" "9551" "285989" "79027" "221785" "89122"
[6121] "7586" "7589" "7551" "10980" "9179" "6878"
[6127] "245812" "389541" "221914" "79037" "441272" "5379"
[6133] "101752399" "55063" "56257" "221908" "81628" "222950"
[6139] "3268" "100316904" "5118" "2783" "64599" "10248"
[6145] "2050" "56996" "7205" "81844" "5054" "7425"
[6151] "51024" "1523" "729597" "79706" "80228" "5439"
[6157] "100271927" "548644" "441273" "10156" "246721" "100134938"
[6163] "100310812" "100129424" "27000" "5701" "5649" "54517"
[6169] "168451" "4189" "83943" "9732" "11179" "401397"
[6175] "26136" "858" "857" "830" "93653" "51691"
[6181] "23554" "54556" "79974" "93664" "4698" "8976"
[6187] "168850" "401399" "3614" "402483" "346653" "813"
[6193] "2318" "23534" "286016" "407835" "340348" "6608"
[6199] "57464" "105375620" "7328" "51530" "51200" "4232"
[6205] "26958" "5420" "100500804" "231" "800" "340351"
[6211] "78996" "4850" "647087" "26266" "5764" "9162"
[6217] "64764" "8805" "57670" "92092" "51631" "154791"
[6223] "28996" "64761" "84255" "27147" "90956" "4708"
[6229] "673" "51650" "57189" "6742" "100463482" "3792"
[6235] "7791" "728377" "7984" "26047" "8454" "9601"
[6241] "57541" "8427" "155060" "155061" "79970" "23145"
[6247] "155066" "65999" "113763" "5919" "29803" "285971"
[6253] "728743" "28959" "55365" "285973" "11194" "83590"
[6259] "54480" "51667" "349136" "63917" "58508" "100128822"
[6265] "202781" "3638" "100506302" "129790" "140545" "9690"
[6271] "10049" "7434" "644128" "101927595" "157695" "157697"
[6277] "2055" "9639" "9920" "9172" "79648" "55326"
[6283] "90459" "8658" "4482" "54984" "286046" "66036"
[6289] "100506990" "7991" "29883" "5157" "57509" "5108"
[6295] "427" "101929066" "63898" "55174" "11178" "80346"
[6301] "649" "9796" "661" "5533" "541565" "23221"
[6307] "9583" "51312" "6781" "80005" "54793" "665"
[6313] "10687" "1808" "51435" "55246" "55140" "7976"
[6319] "2137" "55756" "51669" "10671" "2961" "29942"
[6325] "79845" "100507420" "11160" "728024" "11212" "25960"
[6331] "55290" "80223" "9070" "27257" "9530" "84513"
[6337] "54904" "2260" "286140" "59339" "83877" "8754"
[6343] "79698" "51125" "10947" "5423" "7419" "81790"
[6349] "2339" "84197" "138050" "5591" "7336" "6591"
[6355] "10434" "64321" "96764" "4067" "5324" "54928"
[6361] "90362" "137886" "8439" "9760" "5862" "55636"
[6367] "444" "9420" "55156" "9650" "84675" "137872"
[6373] "56260" "641638" "79848" "10565" "23213" "10499"
[6379] "157869" "6129" "27067" "55284" "54968" "56704"
[6385] "54332" "83690" "101805492" "79776" "5569" "51101"
[6391] "11075" "23462" "28957" "619279" "3612" "92421"
[6397] "401466" "11059" "51115" "8895" "8767" "1666"
[6403] "55529" "286144" "137392" "55472" "2669" "25962"
[6409] "286148" "55656" "7381" "6383" "10404" "55353"
[6415] "4147" "6156" "10247" "10940" "6788" "1345"
[6421] "25897" "26986" "83955" "528" "8323" "115908"
[6427] "81034" "29967" "55074" "137735" "3646" "7227"
[6433] "5885" "441376" "90390" "6873" "7373" "28998"
[6439] "22882" "93594" "11244" "55093" "157378" "55039"
[6445] "101927612" "11236" "83940" "4715" "137209" "9897"
[6451] "286053" "157638" "101867536" "4609" "51571" "23167"
[6457] "23639" "51105" "6482" "57623" "169044" "54108"
[6463] "27161" "5747" "22898" "11156" "389690" "203062"
[6469] "4061" "286128" "2738" "100507316" "116447" "114822"
[6475] "23144" "79792" "93100" "84948" "286075" "100128338"
[6481] "22827" "83481" "2907" "81858" "51236" "727957"
[6487] "23246" "642658" "3297" "340393" "26233" "79581"
[6493] "29894" "55630" "84988" "2875" "113655" "9684"
[6499] "80728" "90987" "6132" "7553" "28991" "58500"
[6505] "7564" "286101" "286102" "100287171" "55871" "9933"
[6511] "169792" "10171" "3717" "55848" "29126" "79956"
[6517] "26953" "115426" "23081" "90871" "7306" "286343"
[6523] "8777" "4781" "6619" "54801" "55667" "6194"
[6529] "1029" "1030" "1993" "286319" "79886" "9373"
[6535] "80173" "203228" "48" "23586" "10210" "4712"
[6541] "138474" "54840" "3301" "4799" "65083" "441459"
[6547] "304" "54926" "25853" "51271" "57462" "84688"
[6553] "138716" "11258" "10280" "3590" "23349" "25822"
[6559] "7415" "30968" "7169" "9827" "4882" "26206"
[6565] "1211" "10020" "152006" "84186" "9380" "9925"
[6571] "64425" "51010" "79269" "92014" "100289137" "253650"
[6577] "79937" "401509" "389741" "105376047" "100132352" "595135"
[6583] "644019" "105376066" "728577" "728673" "220869" "26149"
[6589] "643827" "100131997" "445571" "116224" "320" "256691"
[6595] "23137" "687" "7763" "301" "138199" "54981"
[6601] "26578" "653162" "2650" "158471" "23230" "29968"
[6607] "414328" "29979" "80318" "55582" "3190" "80010"
[6613] "23287" "60560" "51280" "81689" "79670" "440173"
[6619] "1612" "23552" "286223" "1903" "53358" "10507"
[6625] "10912" "549" "3376" "55035" "65268" "158293"
[6631] "5253" "138639" "54754" "84641" "84909" "5727"
[6637] "100128782" "195827" "22869" "158431" "441457" "84278"
[6643] "23424" "158427" "4686" "7507" "51531" "10541"
[6649] "54187" "203286" "79695" "7046" "85365" "10952"
[6655] "55014" "27130" "91283" "8577" "54534" "7743"
[6661] "84302" "56254" "116443" "25934" "55335" "83856"
[6667] "55151" "58499" "5887" "23731" "11217" "79987"
[6673] "23392" "158399" "22949" "7357" "64420" "158405"
[6679] "1318" "23307" "1317" "246184" "9128" "114987"
[6685] "54836" "5998" "114991" "80709" "203197" "3371"
[6691] "5069" "22954" "1955" "26190" "5711" "253039"
[6697] "7185" "727" "51552" "57000" "153090" "158135"
[6703] "92400" "5082" "54542" "10773" "57684" "23637"
[6709] "81571" "55342" "57706" "10783" "5695" "2649"
[6715] "100379345" "11224" "2800" "5537" "10244" "26130"
[6721] "79109" "5090" "89853" "84253" "64855" "286207"
[6727] "138428" "27433" "2356" "203" "30815" "8818"
[6733] "100289019" "25792" "1759" "375757" "51117" "10999"
[6739] "81605" "51148" "89891" "6418" "2021" "51490"
[6745] "883" "56262" "22845" "23511" "57171" "9536"
[6751] "51759" "23048" "57720" "25" "10319" "83543"
[6757] "8021" "84726" "83549" "2889" "9442" "64794"
[6763] "11092" "7248" "1056" "6838" "6130" "26815"
[6769] "6835" "6836" "57109" "11093" "11094" "1757"
[6775] "7410" "8019" "11091" "10439" "9858" "138162"
[6781] "57582" "157922" "10422" "90120" "728489" "6621"
[6787] "56623" "9919" "51162" "10555" "84973" "100131193"
[6793] "55684" "389813" "158056" "8721" "286256" "5730"
[6799] "20" "56654" "91373" "11253" "29952" "29882"
[6805] "286262" "94107" "727800" "375791" "25920" "54863"
[6811] "54932" "10811" "375775" "116225" "85026" "774"
[6817] "8225" "3563" "293" "105373102" "751580" "80161"
[6823] "8623" "9189" "401577" "4267" "414" "415"
[6829] "57502" "8226" "8228" "3730" "357" "1183"
[6835] "3052" "395" "10943" "7114" "9367" "6399"
[6841] "8481" "2824" "54960" "286480" "158747" "59272"
[6847] "340591" "11238" "8233" "8905" "55787" "5931"
[6853] "9185" "10389" "6792" "5256" "5160" "389840"
[6859] "30011" "256643" "256714" "1964" "6197" "404281"
[6865] "6611" "139411" "10549" "1968" "7543" "5165"
[6871] "5422" "2710" "5638" "7504" "94122" "8406"
[6877] "7102" "58526" "54880" "159013" "9282" "8239"
[6883] "1654" "4128" "4129" "139341" "7403" "101927574"
[6889] "55634" "641339" "401588" "84679" "7317" "8552"
[6895] "5127" "203414" "6853" "7076" "2002" "8409"
[6901] "347344" "7569" "57232" "24140" "64840" "5935"
[6907] "10013" "27344" "7355" "3750" "56850" "11230"
[6913] "11152" "27238" "4007" "28952" "1184" "9500"
[6919] "8242" "23096" "8243" "3028" "10075" "2245"
[6925] "54552" "10916" "90736" "158880" "11279" "550643"
[6931] "442454" "474343" "54466" "158586" "7789" "55613"
[6937] "340554" "81887" "9843" "286451" "9754" "64219"
[6943] "27112" "51248" "1741" "4303" "54413" "6872"
[6949] "8473" "93953" "340527" "441502" "392490" "5303"
[6955] "6191" "5255" "4674" "7503" "554203" "100302692"
[6961] "51132" "51260" "57692" "546" "84061" "1349"
[6967] "441531" "5230" "51616" "254065" "79366" "6451"
[6973] "139324" "139322" "7552" "1121" "56062" "4675"
[6979] "286499" "1730" "64102" "7105" "27286" "402415"
[6985] "59353" "695" "3188" "51566" "84460" "11013"
[6991] "9737" "100287765" "55859" "90843" "56849" "51186"
[6997] "27018" "79921" "85012" "9338" "286527" "100101478"
[7003] "401612" "644353" "139231" "203447" "79589" "55285"
[7009] "5631" "1831" "11043" "5716" "1288" "1287"
[7015] "2182" "84187" "91851" "401613" "79868" "154796"
[7021] "57631" "101927352" "5358" "54521" "139818" "100303728"
[7027] "292" "63932" "55922" "23157" "6170" "65109"
[7033] "7737" "4694" "79576" "10009" "55026" "23439"
[7039] "3920" "8450" "28985" "29071" "331" "10735"
[7045] "10178" "6594" "4952" "10813" "63035" "9363"
[7051] "55609" "10495" "3547" "51765" "57826" "101928578"
[7057] "90161" "2719" "3251" "84848" "441518" "8933"
[7063] "26071" "644596" "7626" "203522" "93380" "10479"
[7069] "79649" "27336" "9459" "158696" "2258" "286410"
[7075] "23641" "139065" "2334" "100131434" "91966" "100272228"
[7081] "83692" "3149" "203547" "79057" "1069" "29944"
[7087] "92002" "139728" "215" "5365" "3421" "3897"
[7093] "393" "8260" "3054" "8269" "3654" "4204"
[7099] "2316" "2010" "6134" "26778" "1774" "158960"
[7105] "537" "2664" "9130" "55558" "8270" "60343"
[7111] "139716" "8263" "65991" "100272147" "4515" "79184"
[7117] "7411" "116442" "474383" "474384" "10251" "6845"
[7123] "105379416" "6192" "7544" "5616" "64595" "8287"
[7129] "8653" "7404" "22829" "246126" "8284" "9086"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the non-response group (0.5 µM)
target_entrez <- 9446 # Replace with your desired Entrez ID from prob_1_0.5
# Check if it's in the group
if (!(target_entrez %in% prob_1_0.5)) {
stop("Selected gene is not in the Non response group for 0.5 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.5 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.5")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.5")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("Non response (0.5 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group: DOX-specific response (0.5 µM)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
# View gene list (optional)
prob_2_0.5
[1] "55160" "27245" "9202" "5453" "4610" "25974"
[7] "65260" "26009" "2959" "100506343" "105371405" "23248"
[13] "9869" "51043" "55154" "27005" "10560" "92344"
[19] "6004" "338382" "26750" "51742" "27063" "9937"
[25] "51259" "10482" "23642" "9304" "9298" "254225"
[31] "282679" "283219" "84441" "91801" "257160" "3741"
[37] "6843" "254013" "29843" "85406" "84872" "10193"
[43] "23389" "387496" "5994" "84078" "10253" "3621"
[49] "283624" "85446" "2643" "112840" "2957" "283596"
[55] "64784" "84464" "5373" "92595" "10847" "57659"
[61] "284023" "100128288" "124751" "100874058" "57547" "90313"
[67] "5193" "284098" "5914" "3759" "79637" "8811"
[73] "8877" "57521" "84307" "4092" "5609" "84167"
[79] "339324" "7596" "7770" "353355" "7771" "26974"
[85] "83987" "57479" "23636" "25888" "90317" "147657"
[91] "84787" "147949" "284309" "84914" "29841" "4953"
[97] "8648" "4084" "3554" "55777" "57703" "1385"
[103] "55502" "55317" "9935" "23394" "6526" "23076"
[109] "402055" "84133" "23598" "100506472" "150383" "3269"
[115] "29072" "8927" "9730" "23132" "200895" "79691"
[121] "23023" "57018" "1181" "5437" "2049" "10644"
[127] "55171" "3280" "10336" "348926" "114932" "4299"
[133] "9464" "133957" "54491" "25836" "2668" "2966"
[139] "54826" "324" "9542" "79616" "6310" "378884"
[145] "79692" "114821" "170954" "117283" "23294" "114781"
[151] "129685" "8871" "100128653" "221937" "729438" "5001"
[157] "55904" "222255" "4899" "135932" "835" "2626"
[163] "606553" "5520" "79145" "1875" "862" "23414"
[169] "340359" "10221" "8629" "2619" "286336" "6256"
[175] "170082" "11040" "90060" "286495" "101928747"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the DOX-specific response group (0.5 µM)
target_entrez <- 114821 # Replace with your desired Entrez ID from prob_2_0.5
# Check membership
if (!(target_entrez %in% prob_2_0.5)) {
stop("Selected gene is not in the DOX-specific response group for 0.5 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.5 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.5")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.5")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("DOX-specific\nresponse (0.5 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group: DOX only mid-late response (0.5 µM)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
# View gene list (optional)
prob_3_0.5
[1] "729737" "100132287" "100133331" "100288069" "79854" "643837"
[7] "100130417" "148398" "26155" "9636" "375790" "54991"
[13] "51150" "126792" "388581" "118424" "6339" "116983"
[19] "126789" "80772" "83756" "54587" "81669" "55210"
[25] "339453" "142678" "8510" "728661" "105378949" "5590"
[31] "6497" "79906" "100129534" "11079" "127281" "63976"
[37] "388588" "9731" "339448" "8514" "102724450" "388591"
[43] "387509" "11332" "83715" "57449" "8863" "3604"
[49] "54206" "9563" "80176" "5293" "56998" "10277"
[55] "5226" "10747" "5394" "26232" "93611" "57085"
[61] "4879" "90231" "5351" "9927" "60672" "9249"
[67] "10630" "23254" "55092" "54751" "729614" "27129"
[73] "1187" "1188" "1969" "79363" "26099" "11223"
[79] "9696" "11240" "55920" "126917" "51154" "8574"
[85] "54896" "23252" "55450" "163933" "65018" "100861548"
[91] "1650" "57576" "400745" "8672" "84224" "249"
[97] "84196" "54361" "2048" "100996511" "10236" "148898"
[103] "3399" "6924" "57095" "11313" "2582" "3155"
[109] "2517" "163702" "57822" "90529" "11123" "25949"
[115] "57035" "26119" "57134" "57190" "646471" "164091"
[121] "2134" "7780" "64793" "91544" "6195" "101928728"
[127] "55650" "84243" "54707" "115572" "6548" "84065"
[133] "84958" "9064" "2537" "199870" "23673" "2140"
[139] "54797" "1104" "8420" "85028" "6883" "399474"
[145] "10076" "9672" "79570" "9410" "51538" "2170"
[151] "347735" "553115" "1307" "576" "10657" "23633"
[157] "200081" "79140" "55721" "8668" "339483" "3065"
[163] "100128071" "81629" "55108" "728116" "653121" "8565"
[169] "252995" "113452" "127544" "113451" "55223" "100506144"
[175] "9204" "79830" "6421" "192670" "26523" "192669"
[181] "54936" "83931" "84967" "127700" "80149" "79753"
[187] "7802" "29889" "79693" "127687" "4520" "2275"
[193] "64121" "79647" "23499" "353500" "26508" "10450"
[199] "54802" "5538" "1298" "64744" "64789" "9783"
[205] "9132" "22955" "59269" "284716" "4904" "64175"
[211] "79078" "374969" "51058" "149465" "128218" "7075"
[217] "5792" "6487" "533" "8704" "6536" "55182"
[223] "1263" "343521" "149478" "8643" "8891" "79654"
[229] "4595" "114034" "10420" "5052" "149483" "60313"
[235] "51249" "23139" "10103" "10489" "387338" "2166"
[241] "79656" "11124" "26994" "2060" "5865" "9372"
[247] "23318" "1376" "9528" "26027" "338094" "374977"
[253] "100527960" "100507634" "8613" "115209" "55277" "51361"
[259] "1573" "84938" "84455" "5236" "4919" "57685"
[265] "3716" "5142" "79819" "23169" "1647" "9077"
[271] "11147" "100132618" "100526835" "8790" "51086" "1429"
[277] "5876" "256435" "374987" "91624" "8880" "11080"
[283] "54810" "64123" "23266" "80135" "2787" "100505741"
[289] "117178" "55283" "148423" "8915" "23576" "3491"
[295] "54680" "105378828" "9403" "5586" "494115" "2635"
[301] "2634" "84230" "55144" "284695" "164045" "253152"
[307] "23285" "11146" "388650" "1810" "54874" "8412"
[313] "30836" "2730" "5825" "2152" "126969" "1266"
[319] "105378862" "729970" "25950" "1806" "178" "54482"
[325] "127495" "8556" "7412" "148867" "51611" "102606465"
[331] "101928370" "1901" "55170" "29957" "284611" "113802"
[337] "6814" "23155" "22911" "6884" "56900" "1952"
[343] "6272" "5686" "284612" "57463" "2780" "1435"
[349] "10768" "3749" "64783" "10542" "128338" "5016"
[355] "79084" "515" "100129269" "55924" "11218" "7482"
[361] "4343" "389" "333926" "6566" "100506392" "10745"
[367] "204851" "163259" "4803" "126868" "965" "5738"
[373] "10905" "54855" "54834" "9554" "100996724" "653464"
[379] "100996712" "284565" "647135" "101060254" "27246" "8799"
[385] "9939" "128077" "84265" "284615" "148738" "170688"
[391] "728989" "5565" "2330" "51205" "2702" "51463"
[397] "100132057" "388685" "644591" "440672" "9659" "653513"
[403] "100996761" "440689" "2209" "8370" "8337" "337873"
[409] "723790" "554313" "8349" "9900" "56957" "11311"
[415] "148523" "80222" "1893" "4170" "55204" "405"
[421] "8416" "55793" "58497" "10962" "126626" "6944"
[427] "57592" "5298" "5993" "8991" "5692" "23126"
[433] "57530" "117145" "140576" "6284" "26097" "3608"
[439] "65123" "200186" "10456" "89872" "57198" "3570"
[445] "55585" "3782" "101928120" "8751" "1944" "55974"
[451] "200185" "80128" "4582" "10712" "10067" "57657"
[457] "23623" "645676" "7818" "100129405" "54856" "6016"
[463] "22889" "9181" "56893" "28956" "4000" "64218"
[469] "9673" "11243" "79957" "7203" "4209" "60484"
[475] "10763" "1382" "51093" "79590" "3068" "2117"
[481] "55243" "912" "57549" "93183" "477" "844"
[487] "57216" "7391" "126823" "51506" "5498" "84134"
[493] "3310" "22926" "127933" "6675" "4921" "51478"
[499] "5999" "8490" "5087" "6258" "400794" "4259"
[505] "7371" "57645" "92235" "5451" "8804" "92241"
[511] "23432" "375035" "84832" "101928596" "481" "29922"
[517] "8548" "57821" "149281" "5396" "2329" "8674"
[523] "51603" "26052" "51430" "9588" "339416" "60674"
[529] "26774" "149041" "9910" "9674" "100302401" "400798"
[535] "64222" "148756" "57710" "10228" "2752" "80896"
[541] "10092" "116461" "80267" "116496" "54823" "10625"
[547] "7175" "339479" "101929120" "5997" "51022" "79577"
[553] "8707" "360023" "388722" "23528" "83479" "23271"
[559] "779" "7139" "1465" "89796" "55705" "149345"
[565] "25802" "6051" "1999" "127829" "4660" "127833"
[571] "10765" "100506696" "5877" "59349" "51706" "92703"
[577] "8497" "134" "493" "84719" "9580" "55224"
[583] "22874" "5287" "388730" "25778" "9911" "81788"
[589] "55220" "5129" "2005" "85414" "8934" "115019"
[595] "23380" "5208" "55432" "1604" "4179" "3914"
[601] "148304" "574036" "55733" "7779" "9926" "25896"
[607] "55248" "29937" "467" "128387" "56950" "55105"
[613] "51018" "2058" "10380" "54996" "64757" "3142"
[619] "11221" "7159" "23219" "8560" "29097" "80232"
[625] "149111" "127602" "2052" "29920" "163859" "3020"
[631] "142" "375057" "3707" "56997" "8476" "339500"
[637] "100130093" "7483" "375" "2987" "200205" "84033"
[643] "101927401" "51127" "92815" "58480" "58" "22796"
[649] "101927604" "79573" "375061" "149371" "83932" "27184"
[655] "57568" "54627" "80003" "84451" "6894" "359948"
[661] "9804" "23029" "6905" "148789" "1130" "7107"
[667] "56605" "88" "4548" "6262" "56776" "9859"
[673] "10472" "284702" "84288" "55083" "64754" "64216"
[679] "51097" "7678" "55657" "22982" "23185" "23560"
[685] "101927824" "10531" "100507034" "79754" "5588" "439949"
[691] "57713" "80760" "509" "83860" "414196" "26019"
[697] "83643" "10133" "5264" "222389" "8559" "83641"
[703] "9397" "80013" "9317" "389941" "6251" "1787"
[709] "100507347" "338596" "9200" "102723166" "783" "221078"
[715] "10529" "8028" "5305" "256815" "220213" "57584"
[721] "79896" "22852" "10730" "25805" "6840" "57608"
[727] "55149" "1326" "645954" "220930" "1390" "8325"
[733] "7581" "7587" "7582" "3185" "7580" "643236"
[739] "83937" "7570" "220972" "8031" "9721" "2658"
[745] "118738" "5599" "58504" "196740" "118461" "55753"
[751] "100421577" "104355295" "253430" "55847" "7321" "80114"
[757] "220965" "220963" "9886" "84890" "1959" "29982"
[763] "84989" "29119" "23411" "64081" "219736" "26128"
[769] "9559" "23555" "219738" "1305" "219743" "55222"
[775] "1979" "27143" "8879" "5092" "5660" "118490"
[781] "2749" "170384" "23053" "100507331" "5328" "132"
[787] "142891" "100128292" "6229" "729262" "642361" "80195"
[793] "81619" "27069" "54462" "11155" "657" "2746"
[799] "54537" "439994" "728130" "9060" "142913" "5728"
[805] "355" "3434" "24138" "387700" "53354" "3363"
[811] "10556" "119369" "143279" "5507" "80351" "143282"
[817] "9044" "54708" "159371" "51196" "23232" "5832"
[823] "953" "7093" "56889" "102723665" "84458" "10023"
[829] "23401" "23223" "80019" "118812" "55361" "60370"
[835] "118813" "6425" "55118" "84171" "3257" "2805"
[841] "57089" "51076" "55280" "90271" "55719" "56652"
[847] "84445" "6468" "30819" "8861" "4791" "100505761"
[853] "81603" "119032" "57412" "54805" "22978" "9118"
[859] "84108" "6877" "22984" "9148" "9644" "119391"
[865] "85450" "22986" "4601" "1847" "282996" "282997"
[871] "27250" "92482" "8036" "150" "57678" "64429"
[877] "4892" "84632" "26033" "2674" "259217" "6571"
[883] "118987" "22841" "143384" "340719" "404636" "119559"
[889] "7073" "9531" "11196" "196051" "2263" "10579"
[895] "59338" "80007" "64376" "51363" "4942" "64077"
[901] "399818" "1488" "92565" "1793" "642938" "282973"
[907] "10570" "80313" "54777" "101" "100133161" "60626"
[913] "23410" "5719" "338707" "59307" "6050" "115399"
[919] "256329" "100506211" "3665" "6888" "171391" "51286"
[925] "101927423" "55367" "57104" "5441" "7106" "54472"
[931] "402778" "29125" "10077" "10078" "3784" "1028"
[937] "5002" "7262" "4676" "114879" "4928" "27315"
[943] "6786" "55128" "117854" "10612" "144132" "3611"
[949] "6881" "8642" "63875" "7761" "143425" "7275"
[955] "79608" "65975" "56672" "56675" "57758" "23258"
[961] "440026" "7702" "23075" "81846" "272" "9646"
[967] "1982" "374378" "283106" "27122" "406" "84280"
[973] "84188" "1315" "5682" "120227" "144100" "5286"
[979] "374383" "3767" "10083" "26297" "113174" "144108"
[985] "144110" "54503" "100126784" "10553" "2620" "387758"
[991] "91057" "55366" "55327" "497258" "196074" "3739"
[997] "744" "196294" "26610" "10480" "91614" "1479"
[1003] "10114" "966" "26273" "4076" "25841" "51074"
[1009] "79899" "119710" "387763" "3732" "9537" "9409"
[1015] "90993" "8525" "4192" "1132" "9776" "79797"
[1021] "9793" "79096" "1643" "8567" "4607" "10658"
[1027] "114971" "23788" "23279" "85456" "6749" "219539"
[1033] "10978" "219541" "51075" "1500" "9404" "80829"
[1039] "23220" "6809" "54948" "79080" "220001" "1642"
[1045] "220002" "51524" "113157" "747" "745" "9415"
[1051] "2495" "64852" "9219" "6094" "26229" "80789"
[1057] "79081" "751071" "10629" "79064" "6811" "54663"
[1063] "6520" "10313" "65998" "283248" "79829" "55611"
[1069] "83706" "84304" "51504" "10235" "5837" "7536"
[1075] "5871" "55561" "10938" "23130" "5526" "29901"
[1081] "738" "741" "2197" "740" "84447" "823"
[1087] "10435" "5977" "283130" "83786" "254100" "10534"
[1093] "23625" "6494" "91056" "254122" "1072" "80198"
[1099] "30008" "8061" "10589" "9092" "84285" "89792"
[1105] "64837" "254263" "10897" "256472" "57124" "25855"
[1111] "11041" "3177" "246330" "582" "9973" "6712"
[1117] "5091" "78999" "91683" "22992" "156" "338692"
[1123] "54961" "23529" "5499" "374403" "57571" "6199"
[1129] "5790" "57175" "80194" "9049" "9600" "10263"
[1135] "254552" "81622" "4728" "10312" "53838" "4041"
[1141] "51083" "1374" "219931" "595" "220064" "8772"
[1147] "2017" "1717" "55191" "10068" "220074" "3636"
[1153] "81570" "10809" "89849" "5029" "84957" "51287"
[1159] "26005" "51400" "283208" "100287896" "9789" "100507050"
[1165] "408" "81544" "4135" "7405" "100506127" "25987"
[1171] "55331" "51773" "4718" "79731" "26011" "60492"
[1177] "84233" "8726" "51501" "10873" "11098" "65084"
[1183] "120114" "120103" "56935" "85459" "28970" "54851"
[1189] "143689" "154810" "10929" "23052" "143686" "143684"
[1195] "79780" "53942" "83935" "57562" "10413" "330"
[1201] "80310" "84437" "2977" "143884" "54733" "472"
[1207] "23086" "1662" "85463" "2230" "1737" "120379"
[1213] "55216" "26521" "83875" "101928847" "4684" "100288346"
[1219] "9183" "57646" "4837" "25996" "23705" "84811"
[1225] "8882" "23387" "51092" "6876" "23621" "100379571"
[1231] "22897" "6330" "6327" "84866" "56912" "2542"
[1237] "55823" "3145" "9854" "64137" "79671" "867"
[1243] "4162" "9099" "7070" "220323" "219902" "219899"
[1249] "6653" "84959" "79864" "55800" "7753" "4013"
[1255] "54414" "79684" "100507283" "219854" "9638" "9538"
[1261] "3703" "83480" "6734" "55572" "28960" "399972"
[1267] "6484" "2113" "3762" "219833" "56980" "334"
[1273] "6768" "11095" "170689" "283174" "112936" "29087"
[1279] "89944" "27087" "283358" "100049716" "23085" "144699"
[1285] "196513" "775" "2288" "10867" "103752584" "57103"
[1291] "8798" "4704" "3742" "928" "4055" "55080"
[1297] "1108" "8079" "27239" "10162" "9746" "25977"
[1303] "4074" "10219" "642846" "440081" "374443" "4973"
[1309] "55110" "8531" "2120" "4040" "54682" "118426"
[1315] "80824" "387841" "93164" "2012" "105369669" "55766"
[1321] "397" "85004" "2059" "55885" "728622" "55500"
[1327] "6660" "586" "100506451" "11228" "79365" "3709"
[1333] "55726" "26127" "60488" "57542" "5744" "55711"
[1339] "51290" "10526" "65981" "1663" "58516" "160518"
[1345] "100874249" "196394" "440093" "121512" "10059" "5318"
[1351] "84920" "144402" "55605" "283463" "10138" "85437"
[1357] "51535" "144165" "83448" "51135" "84216" "4753"
[1363] "51054" "196527" "9169" "55089" "51564" "5213"
[1369] "54934" "904" "112" "27289" "377" "23109"
[1375] "7846" "10445" "100286844" "144233" "41" "91012"
[1381] "57609" "466" "4891" "25875" "81566" "5463"
[1387] "9802" "11226" "9498" "3164" "3855" "3875"
[1393] "23371" "51380" "283337" "5916" "60314" "8086"
[1399] "6667" "269" "54458" "517" "57658" "3178"
[1405] "25946" "3678" "5502" "29095" "440104" "6821"
[1411] "64375" "6231" "2065" "5036" "283373" "1431"
[1417] "6773" "27165" "5939" "9880" "11247" "6472"
[1423] "83729" "4141" "1649" "79837" "196403" "115557"
[1429] "6302" "1019" "92979" "25895" "10102" "10677"
[1435] "10106" "100506844" "91419" "9194" "9958" "10329"
[1441] "144577" "11260" "283349" "2799" "253827" "100129940"
[1447] "51643" "92797" "5908" "1368" "8089" "10818"
[1453] "376132" "117177" "4848" "27345" "5787" "7103"
[1459] "8549" "83591" "55266" "23011" "29953" "84698"
[1465] "11103" "114882" "23390" "144455" "5074" "29080"
[1471] "55117" "9182" "25834" "80184" "4254" "1848"
[1477] "105369889" "282809" "490" "338758" "694" "11163"
[1483] "51134" "55967" "55785" "55591" "6636" "4048"
[1489] "2004" "5128" "5250" "121457" "317" "23074"
[1495] "64431" "121601" "56994" "55332" "51559" "6996"
[1501] "83468" "29915" "4801" "7296" "84102" "121053"
[1507] "387882" "255394" "55703" "55188" "1407" "121551"
[1513] "11108" "9671" "1240" "9733" "23479" "23603"
[1519] "32" "89910" "326625" "4598" "84915" "59341"
[1525] "51228" "84260" "88455" "28981" "488" "51184"
[1531] "51699" "5501" "100131138" "144717" "10019" "8315"
[1537] "80724" "10906" "79039" "84934" "9904" "6910"
[1543] "255480" "6926" "643246" "79794" "84900" "8739"
[1549] "26259" "55884" "160777" "5564" "92558" "11021"
[1555] "100506649" "1337" "283459" "8655" "9761" "84747"
[1561] "51433" "84678" "84876" "144404" "54509" "338799"
[1567] "22877" "6249" "9026" "79676" "8099" "55206"
[1573] "100293704" "387893" "11066" "1967" "79867" "196385"
[1579] "80212" "9612" "949" "57647" "65985" "8408"
[1585] "80324" "57634" "347918" "57666" "5827" "192111"
[1591] "2802" "100289635" "284232" "54737" "9205" "2706"
[1597] "221143" "64328" "26524" "10284" "650794" "55504"
[1603] "221178" "143" "9107" "51761" "387914" "6049"
[1609] "1024" "219333" "222484" "51082" "432369" "283537"
[1615] "23281" "6541" "5412" "84056" "10208" "10808"
[1621] "145173" "10129" "90634" "10443" "23047" "90627"
[1627] "26960" "9201" "8900" "400120" "4093" "7223"
[1633] "51569" "387921" "10186" "2308" "10240" "10166"
[1639] "1997" "11193" "79612" "28984" "23078" "160851"
[1645] "55068" "160857" "144811" "8848" "641467" "23143"
[1651] "2098" "9445" "5925" "1102" "81617" "51131"
[1657] "55213" "84650" "57213" "10206" "10301" "145165"
[1663] "79621" "220108" "100507398" "115825" "540" "341676"
[1669] "4752" "100887750" "51028" "26586" "144983" "5100"
[1675] "27253" "81624" "5101" "1602" "22894" "10464"
[1681] "688" "11278" "7347" "4008" "115207" "26224"
[1687] "5457" "79596" "100505538" "693207" "10082" "160897"
[1693] "22873" "266722" "10150" "3843" "10160" "8428"
[1699] "100861541" "100289373" "337867" "1880" "5095" "87769"
[1705] "7174" "93081" "2073" "1948" "55082" "728215"
[1711] "8660" "1284" "55739" "105376684" "283487" "55608"
[1717] "23250" "23263" "100289410" "55795" "3916" "79774"
[1723] "101928841" "113622" "100506394" "22821" "91875" "10038"
[1729] "7011" "55644" "328" "90809" "4860" "64745"
[1735] "3183" "84932" "1603" "63874" "26020" "54930"
[1741] "60686" "5693" "64403" "55017" "23428" "57594"
[1747] "599" "116173" "4624" "4625" "25983" "102724814"
[1753] "55449" "5106" "161247" "5721" "9985" "79711"
[1759] "4738" "26277" "5875" "115817" "1241" "4776"
[1765] "56948" "11154" "25831" "84837" "9472" "64067"
[1771] "58533" "11177" "55012" "9692" "253959" "84312"
[1777] "89874" "100129794" "145282" "8487" "254170" "122525"
[1783] "54813" "55015" "161357" "100506433" "23588" "9147"
[1789] "79609" "79944" "8814" "60485" "5836" "122786"
[1795] "145438" "54331" "22795" "57544" "283554" "10979"
[1801] "652" "10175" "2764" "10668" "122809" "3958"
[1807] "55030" "22863" "3895" "57161" "55745" "5684"
[1813] "379025" "26520" "9786" "23002" "64582" "64430"
[1819] "5494" "51804" "4331" "5583" "6617" "5529"
[1825] "7597" "26030" "6710" "2342" "4149" "51382"
[1831] "161145" "5283" "51109" "5890" "55218" "9766"
[1837] "6430" "6547" "55333" "26037" "9628" "8110"
[1843] "53349" "5663" "8650" "957" "80127" "5826"
[1849] "122961" "4053" "51077" "56252" "83694" "5228"
[1855] "8892" "27030" "2353" "101928377" "122953" "11161"
[1861] "23093" "55668" "22846" "100506603" "64207" "29954"
[1867] "2954" "283578" "161394" "10598" "9517" "8846"
[1873] "22938" "9369" "85439" "11099" "123016" "400236"
[1879] "90141" "55051" "145567" "9252" "80017" "440193"
[1885] "55671" "10516" "9950" "3705" "64112" "57578"
[1891] "51676" "57062" "83982" "12" "400242" "161176"
[1897] "624" "730202" "10914" "8812" "10858" "7528"
[1903] "5527" "5891" "55778" "51550" "9895" "23186"
[1909] "7127" "1983" "115708" "9529" "79038" "400258"
[1915] "388021" "64423" "122622" "207" "100128927" "283638"
[1921] "122616" "23241" "9112" "1397" "1396" "283643"
[1927] "80757" "646214" "123606" "54551" "6638" "2562"
[1933] "8924" "23359" "7082" "22909" "102725022" "6447"
[1939] "26585" "79768" "9990" "23015" "440270" "57369"
[1945] "70" "723972" "89978" "84529" "4212" "161742"
[1951] "7057" "11245" "100131089" "90427" "56924" "5330"
[1957] "388115" "22893" "113189" "55177" "2644" "55192"
[1963] "6692" "57617" "79094" "729082" "23168" "26015"
[1969] "7301" "100137047" "30844" "23339" "25963" "2595"
[1975] "64397" "8773" "146057" "80021" "7158" "4130"
[1981] "80237" "619189" "567" "140691" "50506" "90525"
[1987] "79029" "50804" "399694" "9728" "196951" "56986"
[1993] "55056" "100129387" "388121" "23312" "256586" "29767"
[1999] "29766" "5597" "4644" "10776" "56204" "9488"
[2005] "9236" "26108" "283659" "64864" "374618" "54816"
[2011] "145783" "84952" "145781" "100820829" "54629" "4643"
[2017] "79664" "83660" "7168" "114294" "51065" "51762"
[2023] "283807" "8925" "53944" "9325" "80301" "348094"
[2029] "51285" "10081" "8483" "57722" "81556" "9187"
[2035] "4088" "10391" "8125" "7090" "54839" "56906"
[2041] "5315" "60677" "3073" "585" "101241892" "80381"
[2047] "388135" "100287616" "9399" "5371" "10620" "1198"
[2053] "102723750" "57184" "9377" "54913" "192683" "5780"
[2059] "55272" "1464" "92912" "145957" "49855" "84894"
[2065] "3419" "5685" "11173" "5923" "10588" "400410"
[2071] "283687" "54469" "58489" "23184" "59274" "84206"
[2077] "390660" "64506" "123722" "123720" "83640" "50810"
[2083] "646" "6457" "4828" "9154" "5151" "11214"
[2089] "64410" "3669" "145864" "4240" "11057" "5428"
[2095] "374654" "10239" "10519" "51335" "342132" "5045"
[2101] "374659" "91433" "28232" "400451" "56963" "104472848"
[2107] "3480" "64927" "170691" "140460" "220" "22856"
[2113] "6627" "5046" "105376734" "101927628" "374666" "51728"
[2119] "79622" "64285" "4350" "8131" "8786" "8312"
[2125] "10573" "58986" "4833" "26063" "57799" "89941"
[2131] "79006" "65990" "84264" "113000" "64788" "7329"
[2137] "115939" "84572" "645811" "1186" "57585" "4832"
[2143] "65993" "10101" "81889" "51734" "4716" "735301"
[2149] "124056" "283869" "9351" "4913" "64223" "283871"
[2155] "1877" "1632" "10921" "21" "80178" "527"
[2161] "5170" "652276" "645644" "100507321" "54442" "114984"
[2167] "84256" "79412" "9080" "51330" "54985" "79228"
[2173] "7755" "100507458" "7760" "10127" "7627" "79903"
[2179] "23059" "1773" "10131" "6345" "100507501" "51025"
[2185] "114990" "29965" "124402" "79641" "84656" "9717"
[2191] "51172" "56052" "196483" "18" "29035" "2013"
[2197] "4682" "28955" "8651" "9516" "8303" "51061"
[2203] "26156" "92017" "55313" "5073" "642799" "9284"
[2209] "123803" "9665" "123811" "368" "339044" "101059938"
[2215] "64131" "101059953" "105376752" "653190" "79905" "51760"
[2221] "9738" "400506" "112479" "123879" "57149" "1428"
[2227] "100271836" "387254" "51108" "730092" "57478" "56061"
[2233] "84516" "5579" "3566" "23214" "388228" "728741"
[2239] "1201" "6799" "6817" "728734" "100507607" "7284"
[2245] "487" "79874" "653390" "728888" "6693" "23475"
[2251] "79447" "10423" "26470" "253982" "253980" "124446"
[2257] "9344" "5595" "10421" "26000" "79077" "22928"
[2263] "146540" "78994" "64319" "100862671" "5261" "90835"
[2269] "23361" "101928736" "283932" "54620" "9739" "80270"
[2275] "79759" "9726" "10295" "1339" "79798" "7041"
[2281] "6524" "440359" "100132341" "10308" "55737" "91807"
[2287] "388272" "81831" "5257" "23090" "55027" "64282"
[2293] "85407" "1540" "6299" "23322" "79068" "79191"
[2299] "10265" "6530" "55239" "4502" "4493" "4501"
[2305] "9709" "80011" "23568" "92922" "9289" "57567"
[2311] "79650" "4324" "1459" "29070" "79918" "2806"
[2317] "1006" "1009" "146227" "7084" "51192" "146223"
[2323] "8883" "6236" "8824" "23491" "865" "8996"
[2329] "653319" "283849" "29100" "6553" "29800" "9114"
[2335] "100505942" "10664" "84080" "57610" "55815" "80152"
[2341] "1506" "5699" "55794" "54920" "4775" "80004"
[2347] "23659" "54496" "55512" "146198" "1001" "999"
[2353] "3038" "54921" "6645" "27183" "51388" "10725"
[2359] "1728" "11060" "16" "197258" "23450" "7571"
[2365] "7567" "91862" "23035" "342371" "55565" "9798"
[2371] "1723" "54957" "9785" "197259" "84937" "197257"
[2377] "162239" "10428" "79583" "11345" "23536" "22879"
[2383] "100130958" "51741" "4094" "124359" "56942" "23300"
[2389] "8139" "80790" "10200" "3281" "23417" "54550"
[2395] "8720" "83693" "9013" "57707" "9100" "83716"
[2401] "9764" "10328" "1327" "2300" "81631" "23174"
[2407] "124245" "1535" "4597" "333929" "115992" "9780"
[2413] "51693" "197322" "105371414" "27132" "124045" "4157"
[2419] "10381" "54849" "79007" "359845" "55275" "79850"
[2425] "50628" "1398" "4641" "51763" "5306" "124935"
[2431] "727910" "124997" "6117" "146760" "1801" "3090"
[2437] "23293" "4335" "105371592" "162514" "7442" "23729"
[2443] "30851" "83460" "5026" "3682" "5023" "489"
[2449] "51479" "124976" "10514" "58191" "388323" "8402"
[2455] "2027" "388324" "101928000" "9098" "4927" "708"
[2461] "79003" "728392" "9851" "100506713" "239" "440400"
[2467] "1742" "37" "442898" "11337" "6517" "51087"
[2473] "2874" "84461" "147040" "254863" "57555" "284114"
[2479] "2256" "1140" "5430" "968" "6462" "112483"
[2485] "482" "7157" "1949" "23135" "92162" "124637"
[2491] "58485" "84667" "5187" "54785" "284029" "80169"
[2497] "5198" "399512" "29098" "22899" "81565" "9423"
[2503] "9482" "124739" "6341" "56985" "388335" "6416"
[2509] "93649" "9912" "9955" "9953" "84815" "5376"
[2515] "10626" "57335" "4213" "136" "125150" "9487"
[2521] "201161" "7314" "51393" "23164" "201164" "201163"
[2527] "8533" "55090" "51655" "10400" "100507131" "83450"
[2533] "91647" "79018" "1819" "54890" "3996" "140775"
[2539] "6470" "729288" "147166" "5636" "125206" "644815"
[2545] "22905" "55244" "224" "92521" "339184" "23326"
[2551] "25979" "256302" "5606" "8844" "201229" "51701"
[2557] "90410" "7126" "26073" "147007" "23098" "230"
[2563] "9703" "6830" "6147" "116238" "284086" "9618"
[2569] "399687" "9220" "105371931" "116236" "28964" "124930"
[2575] "85464" "374786" "6532" "51379" "4763" "84440"
[2581] "55352" "114659" "105371730" "55288" "64149" "8851"
[2587] "40" "6347" "3980" "5892" "54475" "146862"
[2593] "105371932" "162394" "91608" "79893" "79154" "79922"
[2599] "3975" "26574" "11276" "101060351" "30837" "57636"
[2605] "100170841" "284106" "7703" "100287808" "5691" "8396"
[2611] "54883" "782" "84961" "8557" "2064" "55876"
[2617] "5709" "9862" "7067" "9572" "125111" "3487"
[2623] "9001" "3728" "10609" "60681" "115024" "47"
[2629] "1267" "7266" "201181" "84514" "6774" "3292"
[2635] "162427" "27175" "8506" "2145" "100190938" "10266"
[2641] "28958" "8678" "314" "100885850" "100885848" "113277"
[2647] "1659" "2118" "4356" "162417" "105371789" "339201"
[2653] "79089" "7343" "51629" "2896" "2535" "284071"
[2659] "10052" "9343" "388389" "2670" "10882" "4836"
[2665] "113026" "10614" "124790" "752" "201176" "728806"
[2671] "4905" "7473" "996" "4635" "3690" "102724508"
[2677] "124989" "9520" "3837" "114881" "90507" "80320"
[2683] "6668" "55163" "80279" "100874362" "10241" "516"
[2689] "65264" "11248" "8405" "81558" "11143" "284080"
[2695] "5164" "84687" "6442" "64132" "80221" "55316"
[2701] "55040" "8714" "51747" "400604" "4831" "51096"
[2707] "10040" "23531" "58488" "9241" "339210" "8526"
[2713] "7706" "8165" "404093" "6426" "54903" "9256"
[2719] "100506779" "6827" "54894" "56155" "22843" "4591"
[2725] "348235" "284161" "1213" "51174" "84669" "10513"
[2731] "8493" "54828" "103689912" "6909" "388407" "9969"
[2737] "339175" "11011" "26115" "1534" "1636" "10238"
[2743] "4215" "80774" "729683" "6603" "55852" "11232"
[2749] "1655" "100616387" "100616408" "90799" "146880" "440456"
[2755] "374819" "201283" "10672" "8787" "8313" "201134"
[2761] "9931" "26207" "100499466" "9120" "55062" "693220"
[2767] "10351" "23461" "5608" "400617" "6662" "9382"
[2773] "84923" "55028" "23580" "54549" "55890" "9368"
[2779] "283987" "30850" "23510" "10476" "9121" "30833"
[2785] "51155" "79902" "23163" "57513" "29115" "3021"
[2791] "85451" "201294" "201292" "23265" "283991" "84074"
[2797] "79651" "114757" "768206" "10610" "105274304" "105376847"
[2803] "124512" "6427" "654434" "57690" "147138" "125061"
[2809] "9021" "8632" "9267" "57602" "3959" "100507410"
[2815] "2548" "9775" "79092" "284129" "57674" "79643"
[2821] "440465" "10458" "9625" "22994" "146705" "71"
[2827] "339229" "339230" "9146" "6182" "1468" "10189"
[2833] "256933" "51547" "4097" "92659" "5831" "255275"
[2839] "5881" "51181" "5986" "2194" "284001" "1453"
[2845] "79701" "26502" "79672" "64122" "146712" "9097"
[2851] "9984" "27098" "494514" "55556" "7525" "64863"
[2857] "23347" "9663" "8736" "103910" "7050" "9229"
[2863] "649446" "84777" "147525" "91133" "284217" "201475"
[2869] "23255" "4729" "101927275" "23253" "11031" "8774"
[2875] "2774" "57132" "10939" "55125" "753" "125228"
[2881] "6632" "171586" "57534" "102723167" "91768" "8780"
[2887] "29919" "4864" "125488" "26256" "114876" "55364"
[2893] "25925" "6760" "284252" "1000" "1825" "1824"
[2899] "80816" "1837" "100101467" "10778" "252884" "125476"
[2905] "55197" "80206" "25941" "57536" "56853" "641516"
[2911] "5289" "9050" "498" "147339" "201501" "9388"
[2917] "4645" "220136" "30827" "51320" "11201" "23335"
[2923] "4677" "115701" "5366" "220441" "54877" "23239"
[2929] "2531" "9525" "8710" "5271" "92126" "10666"
[2935] "9306" "147381" "29090" "1528" "9658" "101927989"
[2941] "4155" "374868" "9150" "79863" "84552" "399844"
[2947] "126567" "25759" "610" "5442" "10272" "5725"
[2953] "1675" "57418" "1265" "23526" "6794" "513"
[2959] "1153" "55009" "1943" "84939" "374291" "26528"
[2965] "6209" "10297" "92840" "339366" "53615" "57455"
[2971] "83855" "113179" "1455" "55643" "2872" "126308"
[2977] "113177" "8943" "55111" "268" "4616" "2788"
[2983] "148252" "29985" "7064" "148254" "126295" "79816"
[2989] "7089" "166" "2767" "60680" "4782" "83475"
[2995] "126321" "100128569" "126326" "6915" "58509" "23396"
[3001] "27231" "1613" "51341" "56961" "729359" "440503"
[3007] "10501" "55527" "148022" "5802" "257000" "125988"
[3013] "4902" "8192" "84266" "10382" "10045" "79230"
[3019] "3643" "23370" "92960" "57192" "10908" "56949"
[3025] "100131801" "6813" "80164" "388499" "80131" "100507588"
[3031] "6618" "10469" "1994" "256949" "51257" "84330"
[3037] "81794" "374879" "84527" "7675" "93134" "284385"
[3043] "54850" "59286" "93145" "51073" "3383" "3386"
[3049] "7087" "100125288" "112812" "11140" "5141" "1032"
[3055] "57153" "147727" "81890" "11018" "10498" "78992"
[3061] "90580" "6597" "3949" "9545" "374882" "64748"
[3067] "126074" "57139" "115950" "51295" "1264" "84337"
[3073] "664709" "126070" "7620" "284390" "163059" "284391"
[3079] "90589" "147837" "79973" "90576" "163050" "57474"
[3085] "4125" "51398" "84261" "79002" "439" "3726"
[3091] "811" "5886" "199699" "4066" "112939" "8677"
[3097] "9592" "65249" "5989" "9466" "5566" "976"
[3103] "5585" "10755" "9524" "84449" "85360" "10994"
[3109] "10270" "58525" "7171" "4218" "26017" "9441"
[3115] "79086" "23309" "9002" "27151" "4650" "55850"
[3121] "79629" "79575" "84705" "93343" "376497" "3718"
[3127] "27106" "5296" "10437" "5143" "9518" "51477"
[3133] "8178" "7311" "55049" "55295" "10715" "11316"
[3139] "54555" "54929" "8625" "404037" "53345" "54815"
[3145] "83983" "374887" "57130" "94039" "440515" "81931"
[3151] "284443" "7594" "100132815" "171392" "9534" "79156"
[3157] "9745" "57616" "9141" "390916" "84902" "55094"
[3163] "1050" "80054" "9710" "2821" "84306" "6324"
[3169] "51599" "7392" "26330" "10430" "79171" "9757"
[3175] "79713" "199746" "55851" "148137" "333" "79414"
[3181] "84964" "25999" "5438" "7705" "100506930" "57677"
[3187] "284406" "57711" "84911" "163081" "342892" "728485"
[3193] "374899" "374900" "84503" "390927" "163115" "126231"
[3199] "90522" "57828" "5714" "199720" "399473" "147965"
[3205] "3191" "126432" "22933" "4793" "54938" "115290"
[3211] "126433" "10298" "57622" "55588" "7538" "64857"
[3217] "4294" "126526" "29950" "645" "57731" "92799"
[3223] "80271" "29785" "7040" "80776" "56915" "374907"
[3229] "6223" "9138" "10567" "478" "2901" "5452"
[3235] "162989" "2931" "5050" "1954" "653583" "7515"
[3241] "126299" "56006" "342908" "100505715" "7638" "9310"
[3247] "5819" "1209" "5971" "284352" "79090" "388552"
[3253] "90332" "1158" "2068" "2067" "2354" "6253"
[3259] "80207" "2696" "1762" "8189" "26145" "729440"
[3265] "64344" "5536" "55228" "57469" "29888" "79147"
[3271] "6510" "4861" "255783" "9704" "56917" "8775"
[3277] "30846" "22900" "163071" "93233" "2014" "55260"
[3283] "83743" "3770" "9266" "114783" "56848" "1628"
[3289] "54922" "57664" "23645" "94027" "4909" "3743"
[3295] "64130" "8541" "54795" "8463" "100507003" "51070"
[3301] "3661" "3276" "81857" "94030" "84258" "342918"
[3307] "50944" "2109" "125875" "79898" "284370" "90321"
[3313] "400713" "162966" "7576" "90333" "162967" "388559"
[3319] "125893" "79986" "55786" "84671" "79788" "390963"
[3325] "91664" "170958" "147804" "91663" "59285" "79165"
[3331] "79143" "148170" "112724" "7137" "255043" "22870"
[3337] "84446" "79763" "57106" "284297" "163033" "147807"
[3343] "147808" "51545" "29903" "11338" "55311" "79149"
[3349] "147947" "100128252" "57573" "140612" "58491" "147694"
[3355] "57191" "162972" "90233" "79891" "79818" "2282"
[3361] "100293516" "147686" "7694" "10782" "342945" "1"
[3367] "503538" "162968" "116412" "201514" "388569" "25799"
[3373] "55663" "84878" "100131691" "7593" "26751" "129787"
[3379] "7837" "246243" "6664" "9781" "100506299" "3398"
[3385] "51692" "285148" "8462" "3241" "245973" "3754"
[3391] "51594" "1653" "10408" "130497" "4148" "6382"
[3397] "60526" "114818" "2281" "9540" "375189" "50618"
[3403] "109" "22979" "55252" "10890" "3777" "56896"
[3409] "60509" "100128731" "3795" "790" "7781" "57159"
[3415] "7349" "4358" "5496" "2498" "26160" "64838"
[3421] "79635" "9553" "2355" "151056" "23160" "388939"
[3427] "79745" "51646" "79623" "440854" "84661" "55676"
[3433] "57448" "55622" "4052" "25940" "100288911" "9637"
[3439] "151393" "1545" "130589" "6432" "79833" "6654"
[3445] "728730" "130733" "6546" "91461" "27436" "9167"
[3451] "57504" "678" "51626" "10128" "5495" "9581"
[3457] "55133" "102724965" "2034" "90423" "5281" "90411"
[3463] "57217" "3344" "11037" "98" "400954" "57142"
[3469] "100129434" "114800" "339803" "339804" "9736" "10678"
[3475] "200728" "23301" "4190" "51542" "57162" "29094"
[3481] "54812" "9792" "23177" "200734" "116143" "200558"
[3487] "307" "64395" "11017" "151516" "400960" "54980"
[3493] "7072" "10199" "27332" "8291" "56603" "94097"
[3499] "26056" "10322" "150726" "7840" "51002" "10617"
[3505] "72" "388962" "100507171" "55233" "388963" "23559"
[3511] "7841" "116540" "64427" "84759" "550" "27429"
[3517] "10505" "84141" "9801" "347730" "8802" "10618"
[3523] "54884" "100630918" "4144" "8673" "51255" "55037"
[3529] "10989" "51318" "65055" "55818" "64795" "112597"
[3535] "730268" "51315" "150572" "9451" "101928403" "22934"
[3541] "150696" "30818" "150759" "400986" "729234" "56910"
[3547] "55654" "10865" "81562" "26504" "26505" "200539"
[3553] "151313" "375248" "100506076" "100506123" "57730" "10120"
[3559] "728537" "11320" "343990" "80705" "51263" "164832"
[3565] "9486" "79031" "55571" "284996" "6549" "64965"
[3571] "9392" "100506473" "2274" "80146" "9648" "3987"
[3577] "344558" "65124" "4867" "100288695" "55289" "10018"
[3583] "541471" "64682" "10461" "84910" "129804" "376940"
[3589] "150465" "84172" "84269" "23550" "375260" "11159"
[3595] "54520" "51141" "130355" "1622" "80775" "5775"
[3601] "57669" "79134" "5899" "23332" "254128" "84365"
[3607] "10746" "100506922" "55679" "2840" "55339" "5433"
[3613] "79595" "9394" "91409" "55627" "653269" "653781"
[3619] "55041" "445582" "401010" "150776" "116372" "4249"
[3625] "100129961" "23518" "7852" "11249" "79712" "92"
[3631] "5000" "3800" "390" "26225" "114793" "114805"
[3637] "4929" "11227" "8502" "85461" "151525" "643072"
[3643] "64844" "10213" "1803" "64135" "90134" "55137"
[3649] "22837" "80034" "129446" "27347" "115677" "10170"
[3655] "4036" "129880" "79675" "29081" "285141" "2571"
[3661] "26003" "9874" "79828" "80067" "8604" "254042"
[3667] "6670" "29789" "9541" "440926" "1123" "518"
[3673] "80856" "4780" "100130691" "150737" "92104" "129831"
[3679] "114880" "101927027" "8575" "494513" "51661" "7273"
[3685] "285025" "3676" "375298" "54431" "10787" "129401"
[3691] "401024" "10203" "51454" "54529" "64172" "5378"
[3697] "26275" "3628" "54842" "105373801" "2744" "6772"
[3703] "6775" "4430" "64859" "9262" "57520" "9330"
[3709] "92935" "23314" "205327" "79568" "26010" "130535"
[3715] "9689" "1195" "53938" "60491" "4999" "8324"
[3721] "55759" "79800" "65065" "8828" "100329109" "4719"
[3727] "2825" "22868" "151194" "151195" "7855" "33"
[3733] "1373" "2066" "22807" "580" "26154" "55686"
[3739] "55825" "150967" "57574" "7145" "14" "25953"
[3745] "64114" "9125" "7701" "617" "9654" "79840"
[3751] "79137" "10058" "55139" "7277" "1674" "10290"
[3757] "100996693" "79586" "23363" "114790" "6508" "130367"
[3763] "10056" "23704" "65080" "5270" "80309" "55022"
[3769] "9320" "130888" "151473" "3431" "51719" "257407"
[3775] "93010" "105373926" "4691" "5757" "129563" "9427"
[3781] "200765" "80303" "55054" "151507" "10123" "57007"
[3787] "9208" "377007" "8864" "51665" "150678" "51281"
[3793] "285193" "101752400" "11132" "2859" "547" "25992"
[3799] "130916" "5510" "4735" "10494" "728323" "140680"
[3805] "85364" "100507459" "6666" "57761" "10616" "128637"
[3811] "83541" "9751" "2280" "140901" "10528" "57593"
[3817] "64773" "65992" "3704" "83959" "25943" "80025"
[3823] "54498" "146" "5621" "9770" "5111" "8760"
[3829] "56261" "51605" "54675" "164312" "56255" "5332"
[3835] "63926" "6616" "8195" "22903" "55304" "79133"
[3841] "140733" "23767" "55614" "6629" "631" "92667"
[3847] "100303755" "57325" "55184" "10741" "388789" "57419"
[3853] "54453" "51340" "57186" "55857" "63908" "1471"
[3859] "955" "26090" "140838" "102724826" "100101490" "100874042"
[3865] "3397" "128854" "23509" "22919" "6640" "9139"
[3871] "11264" "128866" "84557" "128869" "58476" "2686"
[3877] "55902" "57644" "10544" "3692" "55245" "2036"
[3883] "25980" "57446" "25939" "140699" "6185" "63905"
[3889] "6714" "7052" "388796" "128439" "79913" "60625"
[3895] "64900" "84181" "6431" "51098" "57158" "51526"
[3901] "100505783" "128486" "79183" "11142" "100" "140730"
[3907] "10953" "6789" "6385" "27296" "55861" "51604"
[3913] "90203" "5476" "63925" "57727" "63916" "55713"
[3919] "64849" "81031" "8202" "55959" "57169" "5740"
[3925] "23315" "9825" "387521" "1051" "5770" "8813"
[3931] "27304" "57167" "55734" "128553" "7764" "116151"
[3937] "51507" "655" "8480" "55544" "56937" "57403"
[3943] "8675" "2778" "51497" "63939" "5509" "1002"
[3949] "5688" "26164" "11047" "3911" "81928" "140628"
[3955] "253868" "128826" "55257" "11054" "54994" "55738"
[3961] "1917" "79144" "51750" "84619" "54923" "7165"
[3967] "54963" "57473" "140700" "10287" "55251" "102723996"
[3973] "102724200" "102724428" "102724560" "102723475" "29761" "388815"
[3979] "10950" "54149" "140578" "2551" "11096" "29104"
[3985] "10069" "10694" "571" "6647" "57466" "8867"
[3991] "100506215" "3455" "9946" "539" "64968" "54065"
[3997] "3753" "861" "9980" "23515" "3141" "10311"
[4003] "3150" "7485" "6450" "54101" "63977" "49854"
[4009] "9619" "54020" "5152" "5316" "875" "150094"
[4015] "56894" "7109" "23308" "81543" "54082" "6612"
[4021] "85395" "728039" "6573" "1291" "10841" "84221"
[4027] "4047" "114044" "23181" "23765" "27439" "27440"
[4033] "83733" "529" "637" "57553" "51807" "728229"
[4039] "728233" "85376" "5625" "25786" "8220" "128977"
[4045] "54584" "79680" "421" "128989" "54487" "5902"
[4051] "7625" "84222" "3053" "1399" "439931" "6545"
[4057] "440804" "23119" "645426" "375133" "150223" "23753"
[4063] "23759" "140883" "2781" "400916" "91319" "284889"
[4069] "23523" "83606" "1416" "84700" "57168" "24144"
[4075] "23331" "150275" "7494" "83999" "25807" "10633"
[4081] "4744" "8508" "4771" "55954" "550631" "23541"
[4087] "6948" "23762" "140606" "27124" "91445" "3985"
[4093] "4733" "9814" "23761" "253143" "7533" "6523"
[4099] "7078" "3162" "23780" "80020" "11020" "7263"
[4105] "4357" "79734" "114794" "29775" "23616" "3956"
[4111] "79159" "85377" "84645" "80115" "8398" "23764"
[4117] "102800317" "400927" "11015" "10521" "9929" "9567"
[4123] "27350" "23492" "5155" "9145" "10454" "468"
[4129] "10478" "6767" "84844" "27351" "2547" "6721"
[4135] "55964" "4668" "4700" "100132273" "27341" "84271"
[4141] "53947" "26286" "11252" "25809" "638" "706"
[4147] "23170" "80339" "84247" "55615" "112885" "23313"
[4153] "55020" "55687" "9620" "23151" "9889" "79087"
[4159] "80305" "83642" "6300" "5600" "6305" "91289"
[4165] "1890" "100144603" "410" "85358" "11158" "57633"
[4171] "100996539" "3708" "9695" "859" "56852" "9901"
[4177] "25917" "55209" "64419" "7862" "4968" "8536"
[4183] "26140" "285367" "84818" "285368" "6396" "6529"
[4189] "132001" "5468" "80746" "23609" "23066" "9922"
[4195] "23225" "7476" "7508" "27258" "80852" "64432"
[4201] "64145" "85403" "8292" "686" "23243" "285381"
[4207] "92106" "23228" "9779" "5868" "8850" "7325"
[4213] "6138" "9975" "7068" "5915" "7155" "64343"
[4219] "27303" "201595" "114884" "23171" "112616" "54918"
[4225] "105377021" "131405" "26032" "7342" "6769" "4292"
[4231] "5333" "9943" "100128640" "9941" "6331" "57599"
[4237] "199223" "64651" "165904" "54977" "10289" "285267"
[4243] "285268" "131375" "9117" "92999" "57467" "1238"
[4249] "54861" "51099" "285346" "55888" "285349" "115560"
[4255] "51304" "25907" "54716" "79442" "339906" "285352"
[4261] "64147" "25930" "22937" "54859" "10675" "10201"
[4267] "5364" "79714" "51372" "84126" "11277" "51517"
[4273] "100506637" "646450" "10425" "54681" "10869" "3913"
[4279] "375341" "7375" "2876" "275" "1605" "386724"
[4285] "389119" "7318" "84315" "6405" "10991" "2771"
[4291] "132228" "7866" "8372" "11334" "11186" "10641"
[4297] "51161" "1795" "7873" "29890" "51368" "9136"
[4303] "10039" "57060" "95" "1849" "211" "51533"
[4309] "56920" "7134" "64943" "55193" "55830" "375346"
[4315] "91869" "5580" "7086" "55540" "93973" "58515"
[4321] "55799" "7474" "26059" "285331" "50650" "26060"
[4327] "378" "7871" "57406" "11102" "54899" "8309"
[4333] "2272" "57415" "8618" "6314" "100507062" "166336"
[4339] "56999" "9223" "84541" "56203" "23150" "27086"
[4345] "105377206" "317649" "23429" "55164" "100846999" "692099"
[4351] "6092" "6091" "2632" "389136" "25978" "8545"
[4357] "105377200" "55279" "63899" "84100" "84864" "1295"
[4363] "84319" "11259" "57337" "27107" "64332" "868"
[4369] "56987" "961" "90102" "55347" "25871" "80218"
[4375] "523" "2596" "4045" "56983" "51365" "64091"
[4381] "116064" "4710" "51725" "131076" "151636" "54625"
[4387] "79663" "84925" "100129550" "54437" "111" "201562"
[4393] "100506826" "4638" "7372" "10840" "28999" "79364"
[4399] "114112" "84303" "5361" "2624" "7879" "57501"
[4405] "339122" "57461" "56941" "132241" "100507032" "729375"
[4411] "27032" "79858" "152195" "131870" "11222" "23317"
[4417] "100532724" "66000" "55573" "58477" "6578" "25847"
[4423] "80254" "55167" "10274" "80723" "101927597" "25852"
[4429] "83850" "80321" "5291" "5947" "349565" "5922"
[4435] "7029" "256356" "54464" "545" "26577" "344838"
[4441] "100289361" "9435" "285195" "57088" "5359" "6596"
[4447] "84343" "4071" "51122" "11342" "5217" "646903"
[4453] "653659" "83939" "116931" "9934" "53836" "285313"
[4459] "4154" "401093" "5028" "5912" "285315" "9197"
[4465] "6747" "647033" "100498859" "79674" "5806" "51319"
[4471] "100996447" "4291" "8706" "101243545" "590" "5274"
[4477] "27333" "55892" "5584" "5010" "200916" "6514"
[4483] "23043" "5337" "57552" "22871" "254827" "79718"
[4489] "27094" "51193" "59345" "8975" "151613" "131118"
[4495] "56922" "27074" "100505687" "79929" "55324" "10195"
[4501] "9718" "5708" "131408" "8646" "64110" "9175"
[4507] "90407" "2119" "1974" "6480" "604" "4026"
[4513] "9076" "3556" "2257" "105374278" "131578" "79572"
[4519] "401106" "100507297" "55341" "105374297" "200958" "10188"
[4525] "7037" "26043" "255798" "84984" "5062" "205564"
[4531] "22916" "152217" "80235" "4241" "100507057" "1739"
[4537] "622" "9711" "84859" "89782" "255403" "79963"
[4543] "54872" "5158" "4636" "84179" "53834" "10417"
[4549] "92070" "7884" "2261" "353497" "10608" "317648"
[4555] "285489" "4043" "152" "27065" "4487" "54360"
[4561] "55351" "132884" "2121" "5522" "23324" "55330"
[4567] "57533" "257236" "80273" "60312" "84448" "54436"
[4573] "8310" "259282" "132864" "57545" "202018" "202020"
[4579] "5860" "51056" "80306" "27146" "54876" "166647"
[4585] "10891" "1665" "91050" "55203" "29063" "23231"
[4591] "3516" "55296" "57620" "5099" "116984" "51274"
[4597] "92689" "5981" "6133" "201895" "3093" "386617"
[4603] "54951" "10699" "152519" "57606" "339977" "64854"
[4609] "643783" "100288413" "65997" "152579" "26511" "5156"
[4615] "3815" "79644" "55763" "9662" "132949" "6731"
[4621] "84525" "84273" "5431" "23284" "253017" "1060"
[4627] "57050" "22902" "92597" "8671" "255324" "9908"
[4633] "55153" "950" "8987" "55752" "901" "246175"
[4639] "65008" "80144" "55589" "56978" "2250" "153020"
[4645] "3184" "9987" "58478" "79966" "100499177" "132660"
[4651] "10855" "113510" "1040" "404201" "51170" "53343"
[4657] "152926" "51191" "100873748" "266812" "10144" "285513"
[4663] "56916" "10611" "5910" "10098" "23173" "128"
[4669] "100507053" "93587" "8649" "115265" "90024" "64116"
[4675] "493856" "27068" "93627" "166929" "3033" "51176"
[4681] "58505" "839" "54433" "5308" "92610" "51574"
[4687] "287" "817" "79642" "133022" "8492" "645455"
[4693] "729218" "9871" "171024" "51778" "401149" "308"
[4699] "55212" "84162" "166379" "2247" "57182" "79633"
[4705] "27152" "22824" "256471" "80167" "55132" "10424"
[4711] "100507487" "132321" "57575" "132430" "23657" "25819"
[4717] "1998" "84709" "80155" "83452" "80854" "60592"
[4723] "1047" "255520" "23158" "27309" "8821" "84640"
[4729] "2549" "8467" "646576" "6059" "54726" "4086"
[4735] "166785" "1909" "166614" "987" "10586" "6189"
[4741] "5188" "55294" "27236" "6423" "79884" "2982"
[4747] "2743" "51313" "55314" "5481" "57600" "9693"
[4753] "92345" "4886" "23520" "201931" "6307" "1363"
[4759] "91351" "23022" "57630" "4750" "1182" "54969"
[4765] "9848" "26269" "116966" "140458" "90768" "3622"
[4771] "60684" "3660" "836" "2180" "291" "83891"
[4777] "55805" "55325" "256309" "8470" "25854" "153478"
[4783] "389257" "10016" "116349" "6550" "100288152" "100506688"
[4789] "10723" "101928793" "81037" "23379" "134111" "54888"
[4795] "6715" "11044" "4552" "9037" "100505806" "134145"
[4801] "134147" "651746" "1501" "1767" "90268" "100130744"
[4807] "23194" "441061" "54463" "4651" "10409" "29102"
[4813] "55322" "23037" "10923" "6897" "51151" "23600"
[4819] "26064" "5810" "134218" "79925" "92255" "133686"
[4825] "6507" "55100" "100506495" "1601" "23548" "345557"
[4831] "26272" "2690" "6414" "648987" "7690" "3157"
[4837] "10605" "23530" "2255" "133418" "642366" "4338"
[4843] "10468" "4724" "8988" "493869" "54505" "345651"
[4849] "10769" "79993" "1161" "57688" "285671" "10283"
[4855] "11174" "23398" "54557" "140890" "64924" "92259"
[4861] "5884" "153562" "728492" "653238" "8293" "23107"
[4867] "79810" "3842" "115548" "2297" "57763" "64283"
[4873] "3074" "10412" "51426" "134359" "22987" "10788"
[4879] "2150" "84327" "728723" "8622" "55255" "728769"
[4885] "411" "133746" "105379046" "202333" "256987" "644936"
[4891] "167555" "1719" "4437" "5924" "1160" "84240"
[4897] "83734" "92270" "153339" "1462" "105379054" "1404"
[4903] "153396" "100505894" "84059" "100505994" "100129716" "84250"
[4909] "79772" "9652" "153642" "83890" "22936" "51752"
[4915] "167410" "55781" "7903" "83594" "2241" "134430"
[4921] "134429" "100505678" "9315" "64097" "54508" "167227"
[4927] "64848" "55521" "153733" "56929" "1036" "9140"
[4933] "1176" "57556" "285605" "25816" "3295" "28966"
[4939] "153241" "57507" "65983" "51808" "84466" "133619"
[4945] "6558" "2201" "28965" "51015" "171019" "90624"
[4951] "6583" "441108" "3659" "10111" "134549" "2661"
[4957] "116842" "54819" "3308" "6932" "6500" "51265"
[4963] "23338" "51128" "134553" "9555" "4090" "26249"
[4969] "4888" "8382" "2676" "51307" "51780" "1958"
[4975] "2107" "3313" "100505636" "5813" "404734" "10307"
[4981] "113829" "55374" "4695" "23438" "153527" "56146"
[4987] "56145" "56144" "56142" "56139" "56138" "56137"
[4993] "56133" "56132" "56130" "56129" "56128" "56123"
[4999] "56122" "6879" "56103" "56100" "1729" "285613"
[5005] "64411" "5097" "9812" "10007" "80762" "2246"
[5011] "2908" "57528" "51520" "10915" "79628" "134265"
[5017] "78991" "27190" "389337" "5145" "81789" "22993"
[5023] "6949" "972" "3340" "91977" "55696" "51164"
[5029] "91975" "2878" "10318" "309" "26112" "2760"
[5035] "206358" "475" "100652758" "386627" "9421" "23367"
[5041] "9337" "29093" "6444" "9443" "26999" "348938"
[5047] "8728" "54974" "153830" "134510" "147" "63920"
[5053] "10569" "134492" "27430" "57451" "23286" "79646"
[5059] "6586" "3779" "64901" "8817" "23291" "285590"
[5065] "1843" "100268168" "153222" "662" "1482" "4488"
[5071] "3274" "375484" "57179" "285598" "54825" "26262"
[5077] "53917" "10960" "2161" "2870" "80758" "1627"
[5083] "55651" "3182" "91522" "6940" "345462" "30832"
[5089] "9509" "3187" "11282" "8878" "9945" "57472"
[5095] "4245" "643836" "81786" "90933" "10399" "619571"
[5101] "56940" "55770" "94234" "2296" "100508120" "56897"
[5107] "1992" "5272" "401233" "101927759" "8737" "63027"
[5113] "221749" "26240" "8899" "10455" "9425" "10799"
[5119] "648791" "6745" "154007" "9521" "51000" "2651"
[5125] "4117" "3096" "1906" "221692" "10048" "221687"
[5131] "9308" "29116" "101928433" "401236" "10486" "51439"
[5137] "63971" "255488" "3400" "1871" "54901" "6659"
[5143] "57380" "55856" "81688" "9750" "8418" "3006"
[5149] "8347" "8334" "3017" "8367" "8339" "3012"
[5155] "8365" "11118" "10385" "11119" "493812" "10473"
[5161] "8970" "8969" "85236" "7754" "346157" "7738"
[5167] "8330" "8341" "7718" "7746" "222699" "387032"
[5173] "7741" "84547" "80317" "9753" "222696" "2550"
[5179] "4340" "346171" "3134" "3137" "7726" "56658"
[5185] "79897" "3133" "2794" "80742" "28973" "221545"
[5191] "203068" "780" "3107" "3106" "534" "4795"
[5197] "7916" "55937" "57827" "1460" "7920" "23564"
[5203] "1192" "3304" "4758" "10919" "221527" "63943"
[5209] "9374" "5089" "4855" "6891" "5696" "6890"
[5215] "100294145" "6046" "3115" "7922" "9277" "10471"
[5221] "5863" "8831" "3710" "84300" "3159" "221491"
[5227] "6204" "29993" "64771" "54887" "6882" "2178"
[5233] "2289" "6732" "1432" "5603" "27154" "222658"
[5239] "11329" "6428" "101154753" "105375039" "51645" "23787"
[5245] "5292" "221468" "55633" "266727" "55776" "23500"
[5251] "4337" "222643" "221443" "116113" "29964" "100188893"
[5257] "25862" "705" "896" "647024" "2979" "5961"
[5263] "6903" "441150" "27232" "5190" "116138" "88745"
[5269] "10591" "65989" "93643" "25844" "9533" "5429"
[5275] "54676" "55362" "2030" "347734" "4794" "202500"
[5281] "57505" "22875" "59084" "10231" "221395" "27242"
[5287] "23607" "221391" "4594" "401264" "730101" "28978"
[5293] "2941" "2729" "401265" "90523" "222584" "54511"
[5299] "653" "81578" "667" "26036" "51715" "51557"
[5305] "7803" "55788" "79627" "22999" "56479" "135228"
[5311] "27145" "4646" "134728" "55023" "9324" "100288198"
[5317] "167691" "6785" "55603" "25998" "7162" "90025"
[5323] "23033" "167681" "112609" "57231" "23036" "57150"
[5329] "206412" "63914" "10559" "23595" "135293" "51465"
[5335] "58528" "22881" "6885" "2045" "79694" "23376"
[5341] "84553" "101927365" "100130890" "2898" "11149" "154442"
[5347] "64208" "5550" "84816" "55278" "51250" "11231"
[5353] "28962" "2309" "285753" "8763" "8936" "51362"
[5359] "23097" "262" "117247" "5980" "643749" "51175"
[5365] "619208" "4082" "3066" "101927768" "222537" "254228"
[5371] "222553" "387119" "5350" "79632" "4121" "221322"
[5377] "2697" "5570" "10345" "101927990" "7955" "154214"
[5383] "51020" "23493" "60487" "81847" "84456" "114801"
[5389] "5167" "1490" "116843" "9519" "6446" "4217"
[5395] "5191" "64065" "57221" "57224" "441172" "345930"
[5401] "85021" "58527" "51696" "167838" "10370" "51534"
[5407] "3097" "51390" "134637" "8504" "2519" "9749"
[5413] "7402" "257218" "10981" "729176" "134957" "389432"
[5419] "23328" "80328" "80329" "9590" "57621" "79624"
[5425] "54516" "26034" "154043" "26230" "51106" "729515"
[5431] "404672" "57583" "7430" "9589" "29074" "3482"
[5437] "729603" "56895" "5071" "135138" "9444" "10846"
[5443] "100289495" "51660" "11116" "253769" "387263" "55274"
[5449] "28514" "5689" "6908" "441307" "5575" "23353"
[5455] "102723743" "11033" "115330" "2852" "90637" "101927021"
[5461] "79778" "202915" "84262" "392617" "29960" "8662"
[5467] "3955" "84433" "9907" "55698" "441191" "26100"
[5473] "80028" "60" "6624" "54476" "9265" "84792"
[5479] "221955" "11014" "55146" "54753" "100131017" "221960"
[5485] "6119" "3382" "100505938" "9678" "221981" "54664"
[5491] "10124" "1607" "57037" "196" "23161" "9734"
[5497] "7291" "221830" "3696" "55536" "11097" "10457"
[5503] "10643" "340277" "4852" "1687" "26031" "3181"
[5509] "8887" "221895" "9865" "222171" "644150" "84725"
[5515] "10392" "79017" "401320" "2617" "358" "5137"
[5521] "401321" "441212" "6100" "27241" "168667" "23333"
[5527] "554236" "57057" "64224" "101930085" "100506725" "80820"
[5533] "9844" "6424" "83930" "27072" "5898" "136647"
[5539] "79783" "3624" "5683" "9263" "55744" "55665"
[5545] "255031" "5224" "27434" "165" "5425" "58498"
[5551] "2645" "222068" "5478" "83605" "23148" "107"
[5557] "641977" "3486" "3364" "23242" "55915" "81552"
[5563] "349075" "51373" "908" "25870" "51427" "643180"
[5569] "644619" "643253" "154807" "435" "8460" "100996437"
[5575] "27342" "51119" "55253" "5382" "26053" "64409"
[5581] "155370" "9883" "378108" "100101148" "100093631" "8326"
[5587] "9031" "26608" "155382" "114049" "7462" "7461"
[5593] "9569" "2969" "442582" "81554" "2970" "541473"
[5599] "375593" "100101267" "442590" "3092" "57414" "5447"
[5605] "222183" "136853" "7784" "100133091" "22932" "10875"
[5611] "100505854" "222194" "85025" "100505881" "2770" "948"
[5617] "27445" "10371" "79161" "54677" "5243" "55972"
[5623] "6717" "9069" "5218" "7978" "10142" "1595"
[5629] "57798" "5189" "84060" "55610" "7980" "2791"
[5635] "8910" "55607" "5166" "1780" "440" "55971"
[5641] "10095" "10898" "84124" "23660" "221786" "255374"
[5647] "55262" "79690" "10734" "352954" "4034" "64598"
[5653] "51593" "402682" "43" "1174" "8985" "10467"
[5659] "24146" "64792" "136227" "10603" "54784" "222229"
[5665] "222234" "222235" "10234" "83787" "222236" "9512"
[5671] "375611" "100216546" "100216545" "6733" "60561" "6856"
[5677] "10135" "168455" "26959" "10466" "2845" "11062"
[5683] "55973" "1738" "3912" "4897" "50640" "3475"
[5689] "286006" "64418" "154743" "101928036" "54329" "5506"
[5695] "29969" "4233" "7982" "83992" "3751" "10447"
[5701] "5803" "10157" "442721" "2861" "25913" "2918"
[5707] "79571" "381" "27044" "64101" "157247" "55131"
[5713] "29923" "64753" "9296" "100130705" "23382" "23008"
[5719] "84928" "378805" "4289" "100506881" "91584" "54927"
[5725] "60412" "84912" "669" "55281" "29062" "23165"
[5731] "1129" "56829" "79989" "254048" "80853" "100134229"
[5737] "23608" "100134713" "100507421" "55750" "2051" "373156"
[5743] "9715" "285966" "9747" "27010" "136051" "155054"
[5749] "7988" "100289678" "27153" "84626" "168544" "643641"
[5755] "401431" "3757" "4846" "9311" "1020" "6522"
[5761] "10922" "116988" "10061" "6604" "6009" "51422"
[5767] "57180" "22976" "155435" "64327" "64434" "57488"
[5773] "55112" "169270" "26260" "100287015" "286042" "157285"
[5779] "137075" "9258" "79660" "83648" "640" "101929490"
[5785] "252969" "2222" "1508" "85002" "91694" "57604"
[5791] "10395" "157773" "286097" "51201" "137492" "9108"
[5797] "6542" "9" "23362" "55790" "4023" "526"
[5803] "23039" "2039" "64760" "79873" "55806" "23516"
[5809] "10174" "64236" "57805" "55909" "1960" "8793"
[5815] "8797" "91782" "203069" "4017" "4824" "137814"
[5821] "4741" "4747" "2796" "23087" "2185" "2053"
[5827] "1191" "55893" "157574" "79618" "23303" "1846"
[5833] "23484" "11030" "2936" "7993" "5516" "7486"
[5839] "3084" "84750" "84549" "80185" "78986" "137970"
[5845] "80139" "1978" "23259" "137994" "6867" "6422"
[5851] "137964" "286" "7994" "5327" "3551" "6575"
[5857] "114926" "55145" "84376" "23514" "1052" "115294"
[5863] "9821" "51606" "8601" "6917" "29088" "137695"
[5869] "6224" "6386" "767" "253943" "5150" "23212"
[5875] "80124" "81796" "23471" "51110" "7013" "157506"
[5881] "6921" "5828" "3574" "7163" "65986" "55824"
[5887] "2171" "79752" "64089" "377677" "760" "4325"
[5893] "101929709" "734" "4683" "793" "169200" "64168"
[5899] "100127983" "100506365" "51633" "389677" "91147" "54704"
[5905] "54845" "137682" "94241" "79666" "157657" "392255"
[5911] "51001" "9791" "85453" "92140" "203111" "79815"
[5917] "157680" "5440" "6674" "157567" "7534" "51123"
[5923] "83988" "51366" "7071" "51582" "100506753" "25879"
[5929] "9699" "284" "9694" "157753" "84955" "56943"
[5935] "93035" "27012" "114788" "8667" "84294" "2131"
[5941] "401474" "4982" "114569" "4856" "5168" "64798"
[5947] "6641" "3037" "79139" "84933" "114907" "157769"
[5953] "9788" "6713" "5820" "50807" "114" "3786"
[5959] "137835" "7038" "10397" "10656" "83696" "57210"
[5965] "2843" "51337" "66004" "79943" "642475" "1936"
[5971] "65263" "7264" "9831" "225689" "286077" "23513"
[5977] "340371" "5339" "84875" "26873" "54512" "8733"
[5983] "1537" "84232" "340390" "8694" "203054" "51160"
[5989] "4796" "100287098" "50626" "90990" "414919" "80778"
[5995] "340385" "65265" "81704" "23189" "6595" "7436"
[6001] "5991" "6505" "55064" "403313" "55664" "50808"
[6007] "57589" "158358" "2731" "5789" "101929407" "340481"
[6013] "158326" "158219" "203238" "54796" "54875" "6456"
[6019] "92949" "10670" "123" "340485" "4300" "54914"
[6025] "55958" "4507" "63951" "7010" "79817" "158038"
[6031] "100129250" "55234" "2683" "573" "51510" "360"
[6037] "441394" "11191" "55833" "318" "203259" "1271"
[6043] "2592" "84720" "10497" "158381" "9853" "7016"
[6049] "6023" "203260" "7094" "10488" "57704" "84681"
[6055] "51754" "92973" "8434" "152007" "100506710" "26267"
[6061] "401505" "22844" "6461" "219" "347252" "101929959"
[6067] "5239" "169693" "8395" "2395" "9414" "100885775"
[6073] "9413" "375743" "23670" "51104" "138241" "55071"
[6079] "5125" "55312" "2776" "84131" "7091" "7088"
[6085] "158158" "102723989" "257019" "105376114" "64078" "4915"
[6091] "389765" "1514" "79048" "54769" "4783" "4920"
[6097] "10558" "54829" "64768" "23299" "138649" "83744"
[6103] "84270" "4814" "445577" "23196" "158257" "169841"
[6109] "101928099" "375748" "11046" "22927" "8555" "1515"
[6115] "7111" "9830" "7464" "55357" "8013" "23071"
[6121] "54881" "347273" "19" "23446" "26134" "2218"
[6127] "105376204" "9314" "8518" "54942" "8727" "54566"
[6133] "5774" "114299" "445815" "7295" "548645" "2790"
[6139] "9991" "84263" "58493" "401548" "169834" "7539"
[6145] "81932" "210" "54107" "85301" "25861" "9550"
[6151] "23245" "7099" "1620" "55755" "2934" "2040"
[6157] "4702" "92399" "5742" "286204" "100129034" "169611"
[6163] "81873" "286205" "3309" "23099" "403341" "9649"
[6169] "23452" "29988" "7633" "6136" "90678" "6812"
[6175] "1025" "2022" "27090" "399665" "203245" "114789"
[6181] "80142" "79095" "2801" "2733" "6709" "84885"
[6187] "10444" "54662" "254295" "56904" "84895" "1384"
[6193] "5524" "389792" "100506119" "100506190" "28989" "140459"
[6199] "27348" "1861" "10868" "23413" "445" "100272217"
[6205] "8939" "23404" "84814" "10585" "23064" "7270"
[6211] "9329" "9328" "5900" "26301" "6837" "6834"
[6217] "11182" "9719" "266655" "1289" "100506599" "51116"
[6223] "138151" "169714" "26086" "64170" "10807" "23203"
[6229] "158055" "4851" "101928483" "138311" "85014" "84960"
[6235] "29085" "7186" "54461" "286257" "100289341" "8636"
[6241] "27158" "26012" "64975" "92715" "92714" "55344"
[6247] "283981" "28227" "8227" "207063" "8908" "25878"
[6253] "5613" "389906" "412" "6907" "4935" "55841"
[6259] "4281" "5634" "140456" "5277" "8544" "57393"
[6265] "56474" "94056" "4810" "6322" "10742" "10149"
[6271] "22866" "23676" "51360" "23597" "6303" "79135"
[6277] "9468" "11141" "257397" "1756" "83604" "6990"
[6283] "6103" "10159" "8573" "80258" "56548" "6102"
[6289] "9767" "9104" "54539" "8241" "8237" "7592"
[6295] "369" "10682" "4943" "64743" "10245" "10084"
[6301] "55593" "7030" "79917" "5355" "89801" "389856"
[6307] "139189" "57477" "170685" "55190" "23708" "81557"
[6313] "728239" "727866" "29057" "54328" "64061" "23133"
[6319] "54954" "65267" "90121" "7216" "27301" "100463488"
[6325] "28986" "10325" "29978" "169981" "92249" "23229"
[6331] "139285" "55906" "83957" "4478" "367" "4983"
[6337] "1947" "1896" "3476" "54857" "105373244" "29934"
[6343] "9968" "9203" "4841" "26548" "340526" "55869"
[6349] "139201" "53344" "6567" "22" "139596" "646127"
[6355] "158866" "538" "9452" "27330" "140886" "57526"
[6361] "94121" "1478" "27035" "79979" "1821" "54457"
[6367] "1678" "6173" "2717" "100131755" "51309" "54470"
[6373] "9823" "64860" "80823" "56271" "84707" "9643"
[6379] "51209" "286437" "139221" "55086" "54885" "79710"
[6385] "54830" "84443" "115201" "55916" "105373311" "9949"
[6391] "90293" "3597" "170261" "10857" "203427" "7319"
[6397] "2747" "2892" "57187" "8862" "51114" "2000"
[6403] "9131" "9016" "51634" "55855" "286467" "55796"
[6409] "2239" "347475" "84295" "159090" "159091" "56180"
[6415] "644538" "203523" "399668" "2273" "27316" "100129662"
[6421] "4168" "2332" "3423" "100130086" "84548" "100506164"
[6427] "541578" "10046" "4534" "8776" "2564" "50814"
[6433] "7739" "84968" "10838" "633" "6535" "10134"
[6439] "26576" "6748" "57595" "5973" "6901" "8266"
[6445] "8273" "2539" "8517" "1736" "2157" "55217"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the DOX only mid-late response group (0.5 µM)
target_entrez <- 4892 # Replace with your desired Entrez ID from prob_3_0.5
# Check membership
if (!(target_entrez %in% prob_3_0.5)) {
stop("Selected gene is not in the DOX only mid-late response group for 0.5 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.5 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.5")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.5")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("DOX only mid-late\nresponse (0.5 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group: CX total + DOX early response (0.5 µM)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
# View gene list (optional)
prob_4_0.5
[1] "1870" "79000" "63967" "55143" "8438" "6491"
[7] "1031" "4998" "55706" "8317" "343099" "64858"
[13] "653820" "554282" "728833" "1163" "91687" "79723"
[19] "414149" "84930" "983" "219790" "1763" "6240"
[25] "2237" "113130" "23649" "220042" "2305" "9918"
[31] "83461" "9700" "1017" "100128191" "7112" "283431"
[37] "5985" "9735" "140707" "102659353" "5426" "675"
[43] "440145" "650669" "11169" "7443" "7517" "400322"
[49] "11339" "51203" "22995" "9768" "54982" "90381"
[55] "1106" "899" "124222" "9088" "116028" "54820"
[61] "8479" "79801" "23594" "64785" "55839" "81620"
[67] "2175" "83903" "54478" "79915" "146857" "29893"
[73] "78995" "146956" "3838" "7083" "201255" "126282"
[79] "29128" "10535" "348654" "79172" "4175" "83879"
[85] "151246" "23178" "1841" "994" "84515" "81610"
[91] "6790" "10732" "29980" "8208" "54058" "151648"
[97] "56992" "993" "25886" "5984" "10460" "7468"
[103] "1633" "3015" "890" "201725" "3148" "79682"
[109] "375444" "55789" "64946" "4001" "100996485" "995"
[115] "3161" "83463" "51053" "4800" "55166" "5558"
[121] "9994" "253714" "387103" "113115" "26271" "63979"
[127] "5982" "10926" "4176" "157313" "157570" "4173"
[133] "8836" "4603" "9134" "27085" "9401" "4957"
[139] "29941" "89958" "10383" "54821"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the CX total + DOX early response group (0.5 µM)
target_entrez <- 983 # Replace with your desired Entrez ID from prob_4_0.5
# Check membership
if (!(target_entrez %in% prob_4_0.5)) {
stop("Selected gene is not in the CX total + DOX early response group for 0.5 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.5 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.5")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.5")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("CX total+ DOX early\nresponse (0.5 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load libraries
library(dplyr)
library(ggplot2)
library(reshape2)
# Load response group: DOX early + CX-DOX mid-late response (0.5 µM)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# View gene list (optional)
prob_5_0.5
[1] "3151" "83667" "149175" "991" "11004" "55635"
[7] "126820" "163786" "29899" "57535" "26227" "9557"
[13] "54964" "128239" "83540" "55732" "51278" "259266"
[19] "9928" "29089" "7832" "729533" "4751" "51514"
[25] "1063" "9156" "55388" "11130" "79933" "100144748"
[31] "9585" "3832" "55165" "3070" "10613" "54780"
[37] "4288" "10346" "81930" "374393" "79073" "3619"
[43] "9633" "10714" "143888" "3014" "1111" "23310"
[49] "10635" "441631" "10376" "84790" "10024" "29127"
[55] "23468" "8914" "5557" "23306" "4193" "55010"
[61] "7374" "11113" "221150" "55835" "5983" "11340"
[67] "79866" "10426" "55632" "55320" "5427" "64841"
[73] "1033" "9787" "4522" "145508" "89839" "100288637"
[79] "9824" "701" "90417" "57082" "5888" "79968"
[85] "9133" "80119" "54962" "55055" "9493" "26263"
[91] "64782" "55215" "641" "9055" "63922" "23204"
[97] "5347" "3835" "65057" "51659" "9212" "10615"
[103] "990" "7153" "672" "146909" "55771" "83990"
[109] "105371937" "2232" "332" "7298" "10403" "3613"
[115] "162655" "220134" "162681" "148229" "84823" "10036"
[121] "1786" "147841" "23354" "115703" "284403" "8193"
[127] "27113" "3978" "5424" "27338" "6241" "1058"
[133] "4436" "23397" "699" "150468" "57405" "284992"
[139] "55355" "9837" "22974" "1869" "79980" "5933"
[145] "4605" "11065" "54069" "8318" "11200" "3976"
[151] "4174" "79640" "79019" "51512" "2177" "9942"
[157] "10293" "57650" "10721" "4171" "8930" "10051"
[163] "1894" "64393" "116832" "132671" "1062" "55345"
[169] "4085" "5393" "10733" "132320" "84057" "51166"
[175] "55247" "9319" "64105" "891" "10112" "9232"
[181] "54908" "7913" "11270" "9656" "6941" "1026"
[187] "4172" "7272" "27244" "2037" "29887" "54443"
[193] "7378" "349152" "7516" "54892" "389610" "8795"
[199] "8794" "55872" "84296" "25788" "50484" "79075"
[205] "29028" "11168" "347240" "2189" "84904" "9833"
[211] "401541" "100128361" "10592" "26147" "6839" "139886"
[217] "60401" "24137" "2491" "55559" "4354"
# Load expression dataset
boxplot1 <- read.csv("data/boxplot1.csv", check.names = FALSE)
boxplot1 <- as.data.frame(boxplot1)
# Choose a gene from the DOX early + CX-DOX mid-late response group (0.5 µM)
target_entrez <- 672 # Replace with your desired Entrez ID from prob_5_0.5
# Check membership
if (!(target_entrez %in% prob_5_0.5)) {
stop("Selected gene is not in the DOX early + CX-DOX mid-late response group for 0.5 micromolar.")
}
# Filter for selected gene
gene_data <- boxplot1[boxplot1$ENTREZID == target_entrez, ]
if(nrow(gene_data) == 0) stop("No data found for selected ENTREZID.")
# Reshape to long format
gene_data_long <- melt(gene_data,
id.vars = c("ENTREZID", "SYMBOL", "GENENAME"),
variable.name = "Sample",
value.name = "log2CPM")
# Extract metadata from sample names
gene_data_long <- gene_data_long %>%
mutate(
Time = sub(".*_(\\d+)$", "\\1", Sample),
Concentration = sub(".*_(0\\.\\d)_\\d+$", "\\1", Sample),
Drug = sub(".*_(CX\\.5461|DOX|VEH)_.*", "\\1", Sample),
Indv = sub("^([0-9]+\\.[0-9]+)_.*", "\\1", Sample)
)
# Filter for 0.5 micromolar only
gene_data_long <- gene_data_long %>% filter(Concentration == "0.5")
# Convert to factors
gene_data_long$Time <- factor(gene_data_long$Time, levels = c("3", "24", "48"))
gene_data_long$Concentration <- factor(gene_data_long$Concentration, levels = "0.5")
# Map individual IDs
indv_mapping <- c("75.1" = "1", "78.1" = "2", "87.1" = "3",
"17.3" = "4", "84.1" = "5", "90.1" = "6")
gene_data_long <- gene_data_long %>%
mutate(Indv = ifelse(Indv %in% names(indv_mapping), indv_mapping[Indv], "Unknown"))
# Define color palette for drugs
drug_palette <- c("CX.5461" = "#08306B", "DOX" = "#E7298A", "VEH" = "green")
# Extract gene symbol for labeling
gene_symbol <- unique(gene_data_long$SYMBOL)[1]
# Create the boxplot
ggplot(gene_data_long, aes(x = Drug, y = log2CPM, fill = Drug)) +
geom_boxplot(outlier.shape = NA) +
scale_fill_manual(values = drug_palette) +
facet_grid(. ~ Time, labeller = label_both) +
geom_point(aes(color = Indv), size = 2, alpha = 0.5,
position = position_jitter(width = -0.3, height = 0)) +
ggtitle("DOX early+ CX-DOX mid-late\nresponse (0.5 micromolar)") +
labs(
x = "Drugs",
y = paste(gene_symbol, " log2CPM")
) +
ylim(0, NA) +
theme_bw() +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 15, color = "black"),
axis.ticks = element_line(linewidth = 1.5),
axis.line = element_line(linewidth = 1.5),
axis.text.y = element_text(size = 10, color = "black"),
axis.text.x = element_text(size = 10, color = "black", angle = 45, hjust = 1),
strip.text = element_text(size = 12, face = "bold")
)
Version | Author | Date |
---|---|---|
aab6b9f | sayanpaul01 | 2025-04-07 |
# Load Required Libraries
library(dplyr)
library(ggplot2)
# ----------------- Load Response Groups -----------------
# 0.1 µM
prob_1_0.1 <- as.character(read.csv("data/prob_1_0.1.csv")$Entrez_ID)
prob_2_0.1 <- as.character(read.csv("data/prob_2_0.1.csv")$Entrez_ID)
prob_3_0.1 <- as.character(read.csv("data/prob_3_0.1.csv")$Entrez_ID)
# ----------------- Load DEG Data -----------------
# Helper function to load and label
load_deg <- function(path, drug, time) {
read.csv(path) %>%
mutate(Drug = drug, Timepoint = time)
}
# 0.1 µM DEG data
deg_0.1 <- bind_rows(
load_deg("data/DEGs/Toptable_CX_0.1_3.csv", "CX.5461", 3),
load_deg("data/DEGs/Toptable_CX_0.1_24.csv", "CX.5461", 24),
load_deg("data/DEGs/Toptable_CX_0.1_48.csv", "CX.5461", 48),
load_deg("data/DEGs/Toptable_DOX_0.1_3.csv", "DOX", 3),
load_deg("data/DEGs/Toptable_DOX_0.1_24.csv", "DOX", 24),
load_deg("data/DEGs/Toptable_DOX_0.1_48.csv", "DOX", 48)
) %>%
mutate(
Entrez_ID = as.character(Entrez_ID),
Response_Group = case_when(
Entrez_ID %in% prob_1_0.1 ~ "Non response\n(0.1 µM)",
Entrez_ID %in% prob_2_0.1 ~ "CX-DOX mid-late response\n(0.1 µM)",
Entrez_ID %in% prob_3_0.1 ~ "DOX only mid-late response\n(0.1 µM)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# ----------------- Set Factor Levels -----------------
deg_0.1 <- deg_0.1 %>%
mutate(
Timepoint = factor(Timepoint, levels = c(3, 24, 48)),
Response_Group = factor(Response_Group, levels = c(
"Non response\n(0.1 µM)",
"CX-DOX mid-late response\n(0.1 µM)",
"DOX only mid-late response\n(0.1 µM)"
))
)
# ----------------- Plot Boxplot (Grouped by Timepoint, Faceted by Response Group) -----------------
ggplot(deg_0.1, aes(x = Timepoint, y = logFC, fill = Drug)) +
geom_boxplot(position = position_dodge(width = 0.75)) +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) +
facet_grid(. ~ Response_Group, scales = "free_x") +
theme_bw() +
labs(
x = "Timepoint (hours)",
y = "Log Fold Change",
title = "Log Fold Change Distribution by Drug and Response Group (0.1 µM)",
fill = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
strip.text = element_text(size = 11, face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Version | Author | Date |
---|---|---|
a568872 | sayanpaul01 | 2025-04-10 |
# Load Required Libraries
library(dplyr)
library(ggplot2)
# ----------------- Load Response Groups -----------------
# 0.5 µM
prob_1_0.5 <- as.character(read.csv("data/prob_1_0.5.csv")$Entrez_ID)
prob_2_0.5 <- as.character(read.csv("data/prob_2_0.5.csv")$Entrez_ID)
prob_3_0.5 <- as.character(read.csv("data/prob_3_0.5.csv")$Entrez_ID)
prob_4_0.5 <- as.character(read.csv("data/prob_4_0.5.csv")$Entrez_ID)
prob_5_0.5 <- as.character(read.csv("data/prob_5_0.5.csv")$Entrez_ID)
# ----------------- Load DEG Data -----------------
# Helper function to load and label
load_deg <- function(path, drug, time) {
read.csv(path) %>%
mutate(Drug = drug, Timepoint = time)
}
# 0.5 µM DEG data
deg_0.5 <- bind_rows(
load_deg("data/DEGs/Toptable_CX_0.5_3.csv", "CX.5461", 3),
load_deg("data/DEGs/Toptable_CX_0.5_24.csv", "CX.5461", 24),
load_deg("data/DEGs/Toptable_CX_0.5_48.csv", "CX.5461", 48),
load_deg("data/DEGs/Toptable_DOX_0.5_3.csv", "DOX", 3),
load_deg("data/DEGs/Toptable_DOX_0.5_24.csv", "DOX", 24),
load_deg("data/DEGs/Toptable_DOX_0.5_48.csv", "DOX", 48)
) %>%
mutate(
Entrez_ID = as.character(Entrez_ID),
Response_Group = case_when(
Entrez_ID %in% prob_1_0.5 ~ "Non response\n(0.5 µM)",
Entrez_ID %in% prob_2_0.5 ~ "DOX-specific\nresponse (0.5 µM)",
Entrez_ID %in% prob_3_0.5 ~ "DOX only mid-late\nresponse (0.5 µM)",
Entrez_ID %in% prob_4_0.5 ~ "CX + DOX (early)\nresponse (0.5 µM)",
Entrez_ID %in% prob_5_0.5 ~ "DOX + CX (mid-late)\nresponse (0.5 µM)",
TRUE ~ NA_character_
)
) %>%
filter(!is.na(Response_Group))
# ----------------- Set Factor Levels -----------------
deg_0.5 <- deg_0.5 %>%
mutate(
Timepoint = factor(Timepoint, levels = c(3, 24, 48)),
Response_Group = factor(Response_Group, levels = c(
"Non response\n(0.5 µM)",
"DOX-specific\nresponse (0.5 µM)",
"DOX only mid-late\nresponse (0.5 µM)",
"CX + DOX (early)\nresponse (0.5 µM)",
"DOX + CX (mid-late)\nresponse (0.5 µM)"
))
)
# ----------------- Plot Boxplot (Grouped by Timepoint, Faceted by Response Group) -----------------
ggplot(deg_0.5, aes(x = Timepoint, y = logFC, fill = Drug)) +
geom_boxplot(position = position_dodge(width = 0.75)) +
scale_fill_manual(values = c("CX.5461" = "blue", "DOX" = "red")) +
facet_grid(. ~ Response_Group, scales = "free_x") +
theme_bw() +
labs(
x = "Timepoint (hours)",
y = "Log Fold Change",
title = "Log Fold Change Distribution by Drug and Response Group (0.5 µM)",
fill = "Drug"
) +
theme(
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
strip.text = element_text(size = 11, face = "bold"),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12)
)
Version | Author | Date |
---|---|---|
a568872 | sayanpaul01 | 2025-04-10 |
sessionInfo()
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 26100)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.utf8
[2] LC_CTYPE=English_United States.utf8
[3] LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.utf8
time zone: America/Chicago
tzcode source: internal
attached base packages:
[1] grid stats4 stats graphics grDevices utils datasets
[8] methods base
other attached packages:
[1] TxDb.Hsapiens.UCSC.hg38.knownGene_3.18.0
[2] RColorBrewer_1.1-3
[3] clusterProfiler_4.10.1
[4] pheatmap_1.0.12
[5] qvalue_2.34.0
[6] Homo.sapiens_1.3.1
[7] TxDb.Hsapiens.UCSC.hg19.knownGene_3.2.2
[8] GO.db_3.18.0
[9] OrganismDbi_1.44.0
[10] GenomicFeatures_1.54.4
[11] GenomicRanges_1.54.1
[12] GenomeInfoDb_1.38.8
[13] edgeR_4.0.16
[14] cluster_2.1.8.1
[15] ggfortify_0.4.17
[16] reshape2_1.4.4
[17] circlize_0.4.16
[18] ComplexHeatmap_2.18.0
[19] lubridate_1.9.4
[20] forcats_1.0.0
[21] stringr_1.5.1
[22] purrr_1.0.4
[23] readr_2.1.5
[24] tibble_3.2.1
[25] tidyverse_2.0.0
[26] org.Hs.eg.db_3.18.0
[27] AnnotationDbi_1.64.1
[28] IRanges_2.36.0
[29] S4Vectors_0.40.2
[30] tidyr_1.3.1
[31] ggplot2_3.5.2
[32] gprofiler2_0.2.3
[33] BiocParallel_1.36.0
[34] dplyr_1.1.4
[35] Rfast_2.1.5.1
[36] RcppParallel_5.1.10
[37] zigg_0.0.2
[38] Rcpp_1.0.12
[39] Cormotif_1.48.0
[40] limma_3.58.1
[41] affy_1.80.0
[42] Biobase_2.62.0
[43] BiocGenerics_0.48.1
[44] workflowr_1.7.1
loaded via a namespace (and not attached):
[1] fs_1.6.3 matrixStats_1.5.0
[3] bitops_1.0-9 enrichplot_1.22.0
[5] HDO.db_0.99.1 httr_1.4.7
[7] doParallel_1.0.17 tools_4.3.0
[9] R6_2.6.1 lazyeval_0.2.2
[11] GetoptLong_1.0.5 withr_3.0.2
[13] prettyunits_1.2.0 gridExtra_2.3
[15] preprocessCore_1.64.0 cli_3.6.1
[17] Cairo_1.6-2 scatterpie_0.2.4
[19] labeling_0.4.3 sass_0.4.10
[21] Rsamtools_2.18.0 yulab.utils_0.2.0
[23] gson_0.1.0 DOSE_3.28.2
[25] rstudioapi_0.17.1 RSQLite_2.3.9
[27] generics_0.1.3 gridGraphics_0.5-1
[29] shape_1.4.6.1 BiocIO_1.12.0
[31] Matrix_1.6-1.1 abind_1.4-8
[33] lifecycle_1.0.4 whisker_0.4.1
[35] yaml_2.3.10 SummarizedExperiment_1.32.0
[37] SparseArray_1.2.4 BiocFileCache_2.10.2
[39] blob_1.2.4 promises_1.3.2
[41] crayon_1.5.3 lattice_0.22-7
[43] cowplot_1.1.3 KEGGREST_1.42.0
[45] magick_2.8.6 pillar_1.10.2
[47] knitr_1.50 fgsea_1.28.0
[49] rjson_0.2.23 codetools_0.2-20
[51] fastmatch_1.1-6 glue_1.7.0
[53] getPass_0.2-4 ggfun_0.1.8
[55] data.table_1.17.0 treeio_1.26.0
[57] vctrs_0.6.5 png_0.1-8
[59] gtable_0.3.6 cachem_1.1.0
[61] xfun_0.52 S4Arrays_1.2.1
[63] tidygraph_1.3.1 iterators_1.0.14
[65] statmod_1.5.0 nlme_3.1-168
[67] ggtree_3.10.1 bit64_4.6.0-1
[69] progress_1.2.3 filelock_1.0.3
[71] rprojroot_2.0.4 bslib_0.9.0
[73] affyio_1.72.0 colorspace_2.1-0
[75] DBI_1.2.3 tidyselect_1.2.1
[77] processx_3.8.6 bit_4.6.0
[79] compiler_4.3.0 curl_6.2.2
[81] git2r_0.36.2 graph_1.80.0
[83] xml2_1.3.8 DelayedArray_0.28.0
[85] plotly_4.10.4 shadowtext_0.1.4
[87] rtracklayer_1.62.0 scales_1.3.0
[89] RBGL_1.78.0 callr_3.7.6
[91] rappdirs_0.3.3 digest_0.6.34
[93] rmarkdown_2.29 XVector_0.42.0
[95] htmltools_0.5.8.1 pkgconfig_2.0.3
[97] MatrixGenerics_1.14.0 dbplyr_2.5.0
[99] fastmap_1.2.0 rlang_1.1.3
[101] GlobalOptions_0.1.2 htmlwidgets_1.6.4
[103] farver_2.1.2 jquerylib_0.1.4
[105] jsonlite_2.0.0 GOSemSim_2.28.1
[107] RCurl_1.98-1.17 magrittr_2.0.3
[109] GenomeInfoDbData_1.2.11 ggplotify_0.1.2
[111] patchwork_1.3.0 munsell_0.5.1
[113] ape_5.8-1 viridis_0.6.5
[115] stringi_1.8.3 ggraph_2.2.1
[117] zlibbioc_1.48.2 MASS_7.3-60
[119] plyr_1.8.9 parallel_4.3.0
[121] ggrepel_0.9.6 Biostrings_2.70.3
[123] graphlayouts_1.2.2 splines_4.3.0
[125] hms_1.1.3 locfit_1.5-9.12
[127] ps_1.8.1 igraph_2.1.4
[129] biomaRt_2.58.2 XML_3.99-0.18
[131] evaluate_1.0.3 BiocManager_1.30.25
[133] tzdb_0.5.0 foreach_1.5.2
[135] tweenr_2.0.3 httpuv_1.6.15
[137] polyclip_1.10-7 clue_0.3-66
[139] ggforce_0.4.2 restfulr_0.0.15
[141] tidytree_0.4.6 later_1.3.2
[143] viridisLite_0.4.2 aplot_0.2.5
[145] memoise_2.0.1 GenomicAlignments_1.38.2
[147] timechange_0.3.0