Homework 3 – BCB 718 – Spring 2021

Construct 5 different functions (.m files) to calculate 5 different features of a time series (10 points). Calculate and report all five features for the time series measurements in Figure 5 of PNAS 99:2399. Use these 15 time points shown for 10 uM IP3



DATA INITIALIZATION

knitr::opts_chunk$set(echo = TRUE)
There were 25 warnings (use warnings() to see them)
library(ggplot2);library(gridExtra);library(kableExtra);library(gt);library(ggpubr);library(ggseg);library(pROC)
Type 'citation("pROC")' for a citation.

Attaching package: ‘pROC’

The following objects are masked from ‘package:stats’:

    cov, smooth, var
gghisto <- list(
  theme(axis.text.x = element_text(face="bold", color="cornflowerblue", size=14,angle=17),
          axis.text.y = element_text(face="bold", color="royalblue4", 
          size=16, angle=25),
          axis.title=element_text(size=17,face="italic"),
          plot.title = element_text(size=20,face="bold.italic")))
ggbar <- list(
  theme(axis.text.x = element_text(face="bold", color="gray18", size=10,angle=20),
          axis.text.y = element_text(face="bold", color="royalblue4", 
          size=12, angle=25),
          axis.title=element_text(size=12,face="italic"),
          plot.title = element_text(size=16,face="bold.italic")))
x = c(0, 0.07, 0.14, 0.21, 0.28, 0.35, 0.42, 0.49, 0.56, 0.63, 0.7, 0.77, 0.84, 0.91, 0.98) 
y = c(0.02, 0.20, 0.34, 0.23, 0.14, 0.10, 0.08, 0.07, 0.06, 0.05, 0.05, 0.04, 0.04, 0.03, 0.03)
df = as.data.frame(cbind(x,y))

xmax <- df$x[df$y==max(df$y)]
x1 <- df$x[df$x < xmax][which.min(abs(df$y[df$x < xmax]-max(df$y)/2))]
x2 <- df$x[df$x > xmax][which.min(abs(df$y[df$x > xmax]-max(df$y)/2))]


BASE PLOT WITH 10uM IP3 OVER 0.98 SECONDS

p <- ggplot(df, aes(x=x, y=y)) + 
  geom_point(size=7,shape=21,stroke=1.4,color="lightcoral",fill="lightcoral",alpha=.6)+
  geom_line(size=2,color="lightcoral",alpha=.3) +
  scale_y_continuous(limits = c(0, .4), labels=function(y) paste0(y*100,"%"))+
  scale_x_continuous(limits = c(0, 1), breaks=seq(from=0,to=1,by=0.1))+
  ylab("Open Probability") + xlab("Time (s)") +
  gghisto

p+
  ggtitle("10uM IP3 Dose Response \nover 0.98 seconds")



1. PROBABILITY AT 0.98 SECONDS

y[x==max(x)]
[1] 0.03
p +
  geom_point(aes(x=max(x),y=y[x==max(x)]), size= 4,colour="red")+
  annotate("text", x=.9,y=.12, label= "Probability at \n0.98 sec = 3%")+
  ggtitle("10uM IP3 - Probability of Receptor\nBeing Open At 0.98 Seconds")



2. TIME FROM PEAK PROBABILITY

df2 <- df[x>=xmax,]
max(df2$x)-min(df2$x)
[1] 0.84
p +
  geom_point(data=df2, size= 4,colour="red")+
  geom_line(data=df2, size=.6,color="red",alpha=.5)+
  annotate("text", x=.4,y=.29, label= "Time from Peak = 0.84 Sec")+
  ggtitle("10uM IP3 - Time remainder \nfrom Maximum Probability")



3. LATENCY TO MAXIMUM PROBABILITY

df3 <- df[x<=xmax,]
max(df3$x)-min(df3$x)
[1] 0.14
p +
  geom_point(data=df3, size= 4,colour="red")+
  geom_line(data=df3, size=.6,color="red",alpha=.5)+
  geom_segment(aes(x = 0.14, y = 0, xend = 0.14, yend = 0.34),
  color="lightcoral",linetype="dashed")+
  annotate("text", x=.3,y=.32, label= "Time to Maximum \n= 0.14 Sec")+
  ggtitle("10uM IP3 - Latency to Maximum \nProbability of Open Receptors")



4. MAXIMUM PROBABILITY

max(y)
[1] 0.34
p +
  geom_point(x=x[y==max(y)],y=max(y), size= 4,colour="red")+
  annotate("text", x=x[y==max(y)]+.19,y=max(y), label= "Peak Probability = 34%")+
  geom_segment(aes(x = 0.14, y = 0, xend = 0.14, yend = 0.34),
  color="lightcoral",linetype="dashed")+
  ggtitle("10uM IP3 - Peak Probability of \nOpen Receptors over 0.98 Sec")



5. FULL WIDTH AT HALF MAXIMUM

FWHM <- x2-x1
p +
  geom_point(aes(x=x1,y=y[x==x1]), size= 4,colour="red")+
  geom_point(aes(x=x2,y=y[x==x2]), size= 4,colour="red")+
  geom_segment(aes(x = x1, y = y[x==x1], xend = x2, yend = y[x==x2]),
  color="red",linetype="dashed")+
  annotate("text", x=.39,y=.23, label= "Full Width \nHalf Maximum\n= 0.21 sec")+
  ggtitle("10uM IP3 - Full Width at \nHalf Maximum over 0.98 sec")



5. AREA UNDER THE CURVE

myroc <- roc(df$y,df$x)
'response' has more than two levels. Consider setting 'levels' explicitly or using 'multiclass.roc' insteadSetting levels: control = 0.02, case = 0.03
Setting direction: controls < cases
plot(myroc, auc.polygon=TRUE)

LS0tCnRpdGxlOiAiQkNCIDcxOCBNb2RlbGluZzogSFcgMyIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogYWxpY2Ugd29vbGFyZAotLS0KCiMjIyBIb21ld29yayAzIOKAkyBCQ0IgNzE4IOKAkyBTcHJpbmcgMjAyMSAjIyMKCiMjIyMgQ29uc3RydWN0IDUgZGlmZmVyZW50IGZ1bmN0aW9ucyAoLm0gZmlsZXMpIHRvIGNhbGN1bGF0ZSA1IGRpZmZlcmVudCBmZWF0dXJlcyBvZiBhIHRpbWUgc2VyaWVzICgxMCBwb2ludHMpLiBDYWxjdWxhdGUgYW5kIHJlcG9ydCBhbGwgZml2ZSBmZWF0dXJlcyBmb3IgdGhlIHRpbWUgc2VyaWVzIG1lYXN1cmVtZW50cyBpbiBGaWd1cmUgNSBvZiBQTkFTIDk5OjIzOTkuIFVzZSB0aGVzZSAxNSB0aW1lIHBvaW50cyBzaG93biBmb3IgMTAgdU0gSVAzICMjIyMKCioqKgoqKioKXG4KCgojIyMgX0RBVEEgSU5JVElBTElaQVRJT05fICMjIwpgYGB7ciBzZXR1cH0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpsaWJyYXJ5KGdncGxvdDIpO2xpYnJhcnkoZ3JpZEV4dHJhKTtsaWJyYXJ5KGthYmxlRXh0cmEpO2xpYnJhcnkoZ3QpO2xpYnJhcnkoZ2dwdWJyKTtsaWJyYXJ5KGdnc2VnKTtsaWJyYXJ5KHBST0MpCmBgYAoKYGBge3IgZ2cgdGhlbWVzfQpnZ2hpc3RvIDwtIGxpc3QoCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIGNvbG9yPSJjb3JuZmxvd2VyYmx1ZSIsIHNpemU9MTQsYW5nbGU9MTcpLAogICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIsIGNvbG9yPSJyb3lhbGJsdWU0IiwgCiAgICAgICAgICBzaXplPTE2LCBhbmdsZT0yNSksCiAgICAgICAgICBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTE3LGZhY2U9Iml0YWxpYyIpLAogICAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTIwLGZhY2U9ImJvbGQuaXRhbGljIikpKQpnZ2JhciA8LSBsaXN0KAogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLCBjb2xvcj0iZ3JheTE4Iiwgc2l6ZT0xMCxhbmdsZT0yMCksCiAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgY29sb3I9InJveWFsYmx1ZTQiLCAKICAgICAgICAgIHNpemU9MTIsIGFuZ2xlPTI1KSwKICAgICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTIsZmFjZT0iaXRhbGljIiksCiAgICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTYsZmFjZT0iYm9sZC5pdGFsaWMiKSkpCmBgYAoKYGBge3J9CnggPSBjKDAsIDAuMDcsIDAuMTQsIDAuMjEsIDAuMjgsIDAuMzUsIDAuNDIsIDAuNDksIDAuNTYsIDAuNjMsIDAuNywgMC43NywgMC44NCwgMC45MSwgMC45OCkgCnkgPSBjKDAuMDIsIDAuMjAsIDAuMzQsIDAuMjMsIDAuMTQsIDAuMTAsIDAuMDgsIDAuMDcsIDAuMDYsIDAuMDUsIDAuMDUsIDAuMDQsIDAuMDQsIDAuMDMsIDAuMDMpCmRmID0gYXMuZGF0YS5mcmFtZShjYmluZCh4LHkpKQoKeG1heCA8LSBkZiR4W2RmJHk9PW1heChkZiR5KV0KeDEgPC0gZGYkeFtkZiR4IDwgeG1heF1bd2hpY2gubWluKGFicyhkZiR5W2RmJHggPCB4bWF4XS1tYXgoZGYkeSkvMikpXQp4MiA8LSBkZiR4W2RmJHggPiB4bWF4XVt3aGljaC5taW4oYWJzKGRmJHlbZGYkeCA+IHhtYXhdLW1heChkZiR5KS8yKSldCmBgYAoKKioqCioqKgpcbgoKIyMjIEJBU0UgUExPVCBXSVRIIDEwdU0gSVAzIE9WRVIgMC45OCBTRUNPTkRTICMjIwpgYGB7ciBpbml0aWFsIERhdGF9CnAgPC0gZ2dwbG90KGRmLCBhZXMoeD14LCB5PXkpKSArIAogIGdlb21fcG9pbnQoc2l6ZT03LHNoYXBlPTIxLHN0cm9rZT0xLjQsY29sb3I9ImxpZ2h0Y29yYWwiLGZpbGw9ImxpZ2h0Y29yYWwiLGFscGhhPS42KSsKICBnZW9tX2xpbmUoc2l6ZT0yLGNvbG9yPSJsaWdodGNvcmFsIixhbHBoYT0uMykgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIC40KSwgbGFiZWxzPWZ1bmN0aW9uKHkpIHBhc3RlMCh5KjEwMCwiJSIpKSsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzPXNlcShmcm9tPTAsdG89MSxieT0wLjEpKSsKICB5bGFiKCJPcGVuIFByb2JhYmlsaXR5IikgKyB4bGFiKCJUaW1lIChzKSIpICsKICBnZ2hpc3RvCgpwKwogIGdndGl0bGUoIjEwdU0gSVAzIERvc2UgUmVzcG9uc2UgXG5vdmVyIDAuOTggc2Vjb25kcyIpCmBgYAoKKioqCioqKgpcbgoKIyMjIDEuIF9QUk9CQUJJTElUWSBBVCAwLjk4IFNFQ09ORFNfICMjIwoKYGBge3IgUHJvYmFiaWxpdHkgYXQgMS4wIHNlY30KeVt4PT1tYXgoeCldCnAgKwogIGdlb21fcG9pbnQoYWVzKHg9bWF4KHgpLHk9eVt4PT1tYXgoeCldKSwgc2l6ZT0gNCxjb2xvdXI9InJlZCIpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD0uOSx5PS4xMiwgbGFiZWw9ICJQcm9iYWJpbGl0eSBhdCBcbjAuOTggc2VjID0gMyUiKSsKICBnZ3RpdGxlKCIxMHVNIElQMyAtIFByb2JhYmlsaXR5IG9mIFJlY2VwdG9yXG5CZWluZyBPcGVuIEF0IDAuOTggU2Vjb25kcyIpCmBgYAoKKioqCioqKgpcbgoKIyMjIDIuIF9USU1FIEZST00gUEVBSyBQUk9CQUJJTElUWV8gIyMjCgpgYGB7ciBUaW1lIEZyb20gUGVha30KZGYyIDwtIGRmW3g+PXhtYXgsXQptYXgoZGYyJHgpLW1pbihkZjIkeCkKCnAgKwogIGdlb21fcG9pbnQoZGF0YT1kZjIsIHNpemU9IDQsY29sb3VyPSJyZWQiKSsKICBnZW9tX2xpbmUoZGF0YT1kZjIsIHNpemU9LjYsY29sb3I9InJlZCIsYWxwaGE9LjUpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD0uNCx5PS4yOSwgbGFiZWw9ICJUaW1lIGZyb20gUGVhayA9IDAuODQgU2VjIikrCiAgZ2d0aXRsZSgiMTB1TSBJUDMgLSBUaW1lIHJlbWFpbmRlciBcbmZyb20gTWF4aW11bSBQcm9iYWJpbGl0eSIpCmBgYAoKKioqCioqKgpcbgoKIyMjIDMuIF9MQVRFTkNZIFRPIE1BWElNVU0gUFJPQkFCSUxJVFlfICMjIwoKYGBge3IgTGF0ZW5jeSB0byBNYXhpbXVtfQpkZjMgPC0gZGZbeDw9eG1heCxdCm1heChkZjMkeCktbWluKGRmMyR4KQoKcCArCiAgZ2VvbV9wb2ludChkYXRhPWRmMywgc2l6ZT0gNCxjb2xvdXI9InJlZCIpKwogIGdlb21fbGluZShkYXRhPWRmMywgc2l6ZT0uNixjb2xvcj0icmVkIixhbHBoYT0uNSkrCiAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gMC4xNCwgeSA9IDAsIHhlbmQgPSAwLjE0LCB5ZW5kID0gMC4zNCksCiAgY29sb3I9ImxpZ2h0Y29yYWwiLGxpbmV0eXBlPSJkYXNoZWQiKSsKICBhbm5vdGF0ZSgidGV4dCIsIHg9LjMseT0uMzIsIGxhYmVsPSAiVGltZSB0byBNYXhpbXVtIFxuPSAwLjE0IFNlYyIpKwogIGdndGl0bGUoIjEwdU0gSVAzIC0gTGF0ZW5jeSB0byBNYXhpbXVtIFxuUHJvYmFiaWxpdHkgb2YgT3BlbiBSZWNlcHRvcnMiKQpgYGAKCioqKgoqKioKXG4KCiMjIyA0LiBfTUFYSU1VTSBQUk9CQUJJTElUWV8gIyMjCgpgYGB7ciBQZWFrIFByb2JhYmlsaXR5fQptYXgoeSkKcCArCiAgZ2VvbV9wb2ludCh4PXhbeT09bWF4KHkpXSx5PW1heCh5KSwgc2l6ZT0gNCxjb2xvdXI9InJlZCIpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD14W3k9PW1heCh5KV0rLjE5LHk9bWF4KHkpLCBsYWJlbD0gIlBlYWsgUHJvYmFiaWxpdHkgPSAzNCUiKSsKICBnZW9tX3NlZ21lbnQoYWVzKHggPSAwLjE0LCB5ID0gMCwgeGVuZCA9IDAuMTQsIHllbmQgPSAwLjM0KSwKICBjb2xvcj0ibGlnaHRjb3JhbCIsbGluZXR5cGU9ImRhc2hlZCIpKwogIGdndGl0bGUoIjEwdU0gSVAzIC0gUGVhayBQcm9iYWJpbGl0eSBvZiBcbk9wZW4gUmVjZXB0b3JzIG92ZXIgMC45OCBTZWMiKQpgYGAKCioqKgoqKioKXG4KCiMjIyA1LiBfRlVMTCBXSURUSCBBVCBIQUxGIE1BWElNVU1fICMjIwoKYGBge3IgRnVsbCBXaWR0aCBIYWxmIE1heGltdW19CkZXSE0gPC0geDIteDEKcCArCiAgZ2VvbV9wb2ludChhZXMoeD14MSx5PXlbeD09eDFdKSwgc2l6ZT0gNCxjb2xvdXI9InJlZCIpKwogIGdlb21fcG9pbnQoYWVzKHg9eDIseT15W3g9PXgyXSksIHNpemU9IDQsY29sb3VyPSJyZWQiKSsKICBnZW9tX3NlZ21lbnQoYWVzKHggPSB4MSwgeSA9IHlbeD09eDFdLCB4ZW5kID0geDIsIHllbmQgPSB5W3g9PXgyXSksCiAgY29sb3I9InJlZCIsbGluZXR5cGU9ImRhc2hlZCIpKwogIGFubm90YXRlKCJ0ZXh0IiwgeD0uMzkseT0uMjMsIGxhYmVsPSAiRnVsbCBXaWR0aCBcbkhhbGYgTWF4aW11bVxuPSAwLjIxIHNlYyIpKwogIGdndGl0bGUoIjEwdU0gSVAzIC0gRnVsbCBXaWR0aCBhdCBcbkhhbGYgTWF4aW11bSBvdmVyIDAuOTggc2VjIikKYGBgCgoKKioqCioqKgpcbgoKCiMjIyA1LiBfQVJFQSBVTkRFUiBUSEUgQ1VSVkVfICMjIwoKYGBge3IgQVVDfQpteXJvYyA8LSByb2MoZGYkeSxkZiR4KQpwbG90KG15cm9jLCBhdWMucG9seWdvbj1UUlVFKQoKYGBg