Day 3, part 2: Objective Functions and Sensitivity Analysis

In this section, we'll make our first objective function, and measure the change in NFkB concentration to all parameters. To solve this problem, we're computing

by setting our objective function

and computing

Contents

Construct the objective function

KroneckerBio includes a variety of objective functions for sensitivity analysis and optimization.

All have a similar structure: for their first argument they take the model of interest; for the second argument they take the index (or indices) of the species/outputs to use in th objective function.

Any additional information (the time at which to compute the sensitivity, or the data to compare the model's output to) is passed as the third argument.

Here, we'll construct an objective function that measures the value of the output at the time of the first event.

obj = constructObjectiveOutputValue(m, 1, simulation.te(1));

Running sensitivity analysis

Now that we have defined an objective function, let's run sensitivity analysis on the model. "Sensitivity analysis" is just a euphemism for computing the full derivatives of the objective function with respect to parameters (and/or initial conditions).

[O dOdp] = sensitivity(m, obj, expt);

Two ways to view the results of sensitivity analysis

dOdp is a list of sensitivities with one entry per parameter. First, let's make a bar graph to visualize all the sensitivities.

bar(dOdp)
xlabel('parameter index')
ylabel('dO/dp')

We've also included a tool that allows you to quickly look up the names, values and sensitivities of your parameters.

rankSensitivities(m, dOdp, 10)
Param #		Name			Value			dGdp
-------		----			-----			----
  29		k01  		    8e-005		     -1.15
   1		tr1  		  0.000408		    -0.047
  32		tp1  		   0.00015		   -0.0301
  42		DNAprod		     0.001		   -0.0191
  28		k1   		      0.09		   0.00168
  19		d4   		    0.0005		   0.00085
  31		deg4 		 2.25e-005		  0.000742
   6		tr3  		   0.00028		  0.000299
  30		deg1 		  0.000113		  0.000288
  34		k2   		    0.0138		 -0.000261

To try on your own

Do these results hold up for other peaks?

Try running the analysis from Parts 1 & 2 on different oscillation peaks, and see what kind of parameter ranked list you get. If you want, increase the number of events for which you're simulating. Do the same parameters appear to control all pulse heights?