Load Libraries

library(data.table)
library(ggplot2)
library(tidyr)


#create function to play around with parameters-- 
#I can plug in any parameters and get the shape of the unfolding curve
ufold<-function(Tm=40,slope=1,min=0,x=seq(30,70,.1)){
  y=min+(1-min)/(1+exp((-slope*(Tm-x))))
  return(y)
}

The unfolding function

\[Fraction\ non-denatured = min + \frac{(1-min)}{(1+exp^{(-slope * (Tm-Temperature)})}\] There are three parameters:

  • Tm = inflection point of unfolding in units of temperature, celcius in this case; also known as the melting temperature
  • Slope = parameter that changes the rate change at Tm
  • min = the lowest amount of unfolding

Messing with Tm parameter

I varied Tm values from 30-60 and held min and slope as the same.

#create a data set, wide format, varying different Tm values
a4<-data.frame(x=seq(30,70,.1),Tm30=ufold(Tm=30),Tm40=ufold(),Tm50=ufold(Tm=50),Tm60=ufold(Tm=60))

a5<-gather(a4,param,y,Tm30:Tm60) # make it long format 

ggplot(a5,aes(x=x,y=y,colour=param))+
  geom_line()+#facet_wrap(~param)+
  xlab("Temperature in Celcius")+ylab("Fraction non-denatured")

Thoughts: Changes in the melting temperature or Tm towards higher values means that the protein unfolds at a higher temperature. It is more thermally stable.

Messing with slope parameter

I varied slope values from 0.05- 10 and held Tm and min as the same.

#create a data set, wide format, varying different slopes 
a<-data.frame(x=seq(30,70,.1),slope0.05=ufold(slope=.05),slope0.1=ufold(slope=.1),
              slope0.5=ufold(slope=.5),slope10=ufold(slope=10))

a1<-gather(a,param,y,slope0.05:slope10) # make it long format 

#all in 1 plot
ggplot(a1,aes(x=x,y=y,colour=param))+
  geom_line()+#facet_wrap(~param)+
  xlab("Temperature in Celcius")+ylab("Fraction non-denatured")

# plot, with slope parameter as a facet 
#ggplot(a1,aes(x=x,y=y,colour=param))+
#  geom_line()+facet_wrap(~param)+
#  xlab("Temperature in Celcius")+ylab("Fraction non-denatured")

Thoughts: Changes in the slope isn’t given much thought in the unfolding literature (that I’ve read at least). However, I’d interpret this as the rate of unfolding and it is possible for a protein to be similar in their melting temperature, but the rate change could lead to differences in stability at the lower and higher end of the temperature gradient. For example, if a protein has the same Tm, a lower slope value leads to higher stability above Tm, but lower stability below the Tm.

Messing with min parameter

I varied min parameter values from 0-0.3 and held Tm and min as the same.

#create a data set, wide format, varying different min values
a2<-data.frame(x=seq(30,70,.1),min0=ufold(min=0),min.1=ufold(min=.1),min.2=ufold(min=.2),min.3=ufold(min=.3))

a3<-gather(a2,param,y,min0:min.3) # make it long format 

ggplot(a3,aes(x=x,y=y,colour=param))+
  geom_line()+#facet_wrap(~param)+
  xlab("Temperature in Celcius")+ylab("Fraction non-denatured")

Thoughts: Overall stability of the protein. It is the minimum value of unfolding over the temperature gradient that is surveyed. Not all proteins can completely unfold. What is the reason for this? Not sure.

Session info

sessionInfo()
## R version 4.3.2 (2023-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
## 
## 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/New_York
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] tidyr_1.3.0       ggplot2_3.4.3     data.table_1.14.8
## 
## loaded via a namespace (and not attached):
##  [1] vctrs_0.6.3       cli_3.6.1         knitr_1.43        rlang_1.1.1      
##  [5] xfun_0.40         highr_0.10        purrr_1.0.2       generics_0.1.3   
##  [9] jsonlite_1.8.7    labeling_0.4.2    glue_1.6.2        colorspace_2.1-0 
## [13] htmltools_0.5.6   sass_0.4.7        fansi_1.0.4       scales_1.2.1     
## [17] rmarkdown_2.24    grid_4.3.2        evaluate_0.21     munsell_0.5.0    
## [21] jquerylib_0.1.4   tibble_3.2.1      fastmap_1.1.1     yaml_2.3.7       
## [25] lifecycle_1.0.3   compiler_4.3.2    dplyr_1.1.2       pkgconfig_2.0.3  
## [29] rstudioapi_0.15.0 farver_2.1.1      digest_0.6.33     R6_2.5.1         
## [33] tidyselect_1.2.0  utf8_1.2.3        pillar_1.9.0      magrittr_2.0.3   
## [37] bslib_0.5.1       withr_2.5.0       tools_4.3.2       gtable_0.3.4     
## [41] cachem_1.0.8