Simple one to one model:

$A + L \overset{k_{on}}{\underset{k_{off}}\rightleftarrows} AL\;\; (K_d = k_{off}/K_{on})$

  • A: the protein to be analyzed.
  • L: Ligand immobilized on the pin
  • AL: Complex formed on the pin

Below is the rate equation:

${d[AL] \over dt} = k_{on} [A] [L] - k_{off} [AL]$

  • other forms:

    • ${dy \over dt} = k_{on} [conc] (R_{max} - R) - k_{off} y$

    • ${dy \over dt} = k_{on} [conc] R_{max} - (k_{on} [conc] + k_{off}) y$

    • ${dy \over dt} = k_{on} C R_{max} - (k_{on} C + k_{off}) R$

  • Parameters:

    • Response (nm): $R = [AL] = y$
    • Ligand on the sensor: $[L] = R_{max} - R$
    • Conc. of the analytes: $C = [conc] = [A]$
    • $R_{max} = [AL] + [L]$

knitr::opts_chunk$set(fig.width=6.5, fig.height = 4)
require(reshape2); 
require(ggplot2);
require(grid)

require(pldfit)

Simulation & Plot

# simulate the data use the following parameters
par = list(kon    = 2e2, 
           koff   = 1e-2, 
           rmax   = 1,
           concs  = 1e-5 * (2^(0:5)),
           time   = seq(0, 300, length.out = 1501),
           t2     = 150)

# simulation
model = "simple1to1"
xySimulated <- kinsim(par = par, model = model, noise = 0.01) 

# plot the simulation
# ySimulated$Time = time; 
xy <-reshape2::melt(data = xySimulated, 
                     id.vars = "Time", 
                     measure.vars = rev(1:6), 
                     variable.name = "Conc")

g <- ggplot()  + xlab("Time (sec)") + ylab("Response (nm)") +
    labs(linetype= 'title') + 
    ylim(-0.025,1) + 
    theme_classic() + 
    theme(legend.position=c(0.9, 0.65), 
          legend.text=element_text(size = rel(1)), 
          legend.key.size=unit(0.9,"line")); 
g <- g + geom_line(data = xy, aes(x = Time, y = value, color = Conc)); 
print(g)

Kinetic Fitting

# init
initPar_test = list(kon =1, koff = 1, rmax = 1)  
lower        = list(kon =1e-04, koff=1e-04, rmax = 0.01);
upper        = list(kon =1e04,  koff=1e04,  rmax = 10);
t2  = par$t2 # t2 is the beginning of the diassociation.  
concs        = par$concs 
dat          = xySimulated 

# Fit
fit <- kinfit(par = initPar_test, 
              lower = lower, 
              upper = upper, 
              dat = dat, 
              concs = concs, 
              t2 = t2, 
              model = "simple1to1")
names(fit)
class(fit)
par[1:3] # simulation parameters
fit$par[1:3] # paramenters after fitting
cbind(simulation= par, init = initPar_test, fitting = fit$par)

#prodict and plot

predFit <- predict(fit, concs)
predFit <- reshape2::melt(predFit, id.vars = "Time")
g + geom_line(data=predFit, aes(x = Time, y = value, group = variable) ) 

Equilibrium Fitting

# 
dat    = xySimulated
concs  = par$concs
scale  = 1e3
fit <- ssgfit(datF = dat, 
              concs = concs * scale,  
              start = list(Rmax = 0.5, Kd=1),
              width = 5,
              t2    = 149.5,
              model = "simple1to1")
coef(fit)
with(par, koff/kon *scale)
plot(fit$datF[1:2])
par$concs * scale
lines(fit$predict, lty = 2)
class(fit)
plot(fit)


huangrenhuai/sgfit documentation built on May 17, 2019, 9:10 p.m.