Why Biological Systems Suddenly Change State: An Intuitive Guide to Freidlin–Wentzell Theory

Image
  Stochasticity is ubiquitous in biology and neuroscience, manifesting in various forms, including ion channel noise, synaptic variability, gene regulatory fluctuations, noisy population dynamics, and more. Many biological systems spend long periods in a stable “state” and only rarely transition to another state due to noise. For instance, a neuron typically remains inactive but may occasionally trigger a spontaneous spike. Similarly, a gene can switch from the OFF state to the ON state due to rare bursts of transcription factors. Cells can also transition out of metabolic or epigenetic states, populations might shift between different ecological equilibria, and a viral infection can fluctuate between phases of control and uncontrollability. Freidlin–Wentzell theory provides a mathematically rigorous framework to study these phenomena when noise is small but nonzero . It tells you, firstly, h ow likely rare transitions are,    secondly,   h ow fast they occ...

R function ELISA_4PL

ELISA_4PL function takes as input three variables: x, y and yhat. The function uses the drc and nplr R-packages to fit a curve to the input data and return the parameters of the fitted curve. In addition, the function calculates the value of x corresponding to a specified value of y (yhat) using the inversion of the fitted curve.

ELISA_4PL<-function(x,y,yhat) {
#x:independent variable (e.g., concentration, dose)
#y:response variable
#yhat:a reference value of the curve for which we want to estimate the corresponding xhat value
library(drc)
library(nplr)
DF<-data.frame(x,y)
mod0<-drm(y~x,fct=LL.4(names=c("Slope","Lower","Upper","EC50")),type="continuous",data=DF)
Tab1<-summary(mod0)
B<-as.numeric(coef(mod0)[1])#slope of the curve
C<-as.numeric(coef(mod0)[2])#min value that can be obtained
D<-as.numeric(coef(mod0)[3])#max value that can be obtained
E<-as.numeric(coef(mod0)[4])#inflection point
DF2<-data.frame(B,C,D,E)
colnames(DF2)<-c("Slope","Bottom","Top","Inflection point")
#Inversion
fun<-expression(E*((D-C)/(yhat-C)-1)^(1/B))
xhat<-eval(fun)
#plot
plot(mod0,xlab=expression(bold("Concentration")),ylab=expression(bold("Titer")))
grid()
points(xhat,yhat,pch=16,col="red")
return(list(Summary=Tab1,Parameters=DF2,invY=xhat))
}

Comments

Popular posts from this blog

Understanding Anaerobic Threshold (VT2) and VO2 Max in Endurance Training

Owen's Function: A Simple Solution to Complex Problems

Cell Count Analysis with cycleTrendR