% Author: Ricardo C.H. del Rosario % rcdelros@broadinstitute.org % % Citation: del Rosario, RCH., Damasco JG., Aguda, BD. MicroRNA inhibition % fine-tunes and provides robustness to the restriction point switch % of the cell cycle, Scientific Reports (2016). We have provided Matlab functions for the R model and for parameter sensitivity analysis. We also have provided a corresponding script for each function. In order to have only one Supplementary File, we have concatenated the four files here. They must be saved into different matlab files before they can be used. 1) Rmodel_rhs.m - the R model 2) plot_Fig3_AtoD.m - script that uses the R model and plots panels A-D of Figure 3 3) Rmodel_SensAnal_rhs.m - function that provides the right hand side of the time-dependent sensitivity equations 4) run_Rmodel_SensAnal.m - script that uses the sensitivity analysis function to plot Supplementary Figure 7. ####### Save this file as "Rmodel_rhs.m" function ydot=Rmodel_rhs(t, x, p, Spulse, Sfinal, Tpulse) % Matlab function that gives the right hand side of the R model (microRNA % inhibition of the restriction point R). See the script % "plot_Fig3_AtoD.m" to see how to use the function. % % Author: Ricardo C.H. del Rosario % rcdelros@broadinstitute.org % % Citation: del Rosario, RCH., Damasco JG., Aguda, BD. MicroRNA inhibition % fine-tunes and provides robustness to the restriction point switch % of the cell cycle, Scientific Reports (2016). % % Optional parameters passed to the ODE solver: % Spulse: the magnitute of the serum pulse % Sfinal: the serum value after the pulse % Tpulse: the duration of the pulse m=x(1); e=x(2); cdvar=x(3); ce=x(4); r=x(5); rp=x(6); re=x(7); if (length(x) == 8) u=x(8); ydot=zeros(8,1); else u=0; ydot=zeros(7,1); end kM=p(1); KS=p(2); dM=p(3); kE=p(4); KM=p(5); KE=p(6); kb=p(7); kp1=p(8); KCD=p(9); kp2=p(10); KCE=p(11); dE=p(12); kRE=p(13); kCD=p(14); kCDS=p(15); dCD=p(16); kCE=p(17); dCE=p(18); kR=p(19); kDP=p(20); KRP=p(21); dR=p(22); dRP=p(23); dRE=p(24); gM=p(25); gE=p(26); KMu=p(27); KEu=p(28); k11a=p(29); k11b=p(30); k11c=p(31); d11=p(32); if (t < Tpulse) S = Spulse; else S = Sfinal; end dmdt=kM*S/(KS+S + gM*u) - dM*m; dedt=kE*(m/(KM+m))*(e/(KE+e+gE*u)) + ... kb*m/(KM+m) + kp1*cdvar*re/(KCD+re) + ... kp2*ce*re/(KCE+re) - dE*e - kRE*r*e; dcddt=kCD*m/(KM + m) + kCDS*S/(KS+S) - dCD*cdvar; dcedt=kCE*e/(KE+e) - dCE*ce; drdt=kR + kDP*rp/(KRP + rp) - kRE*r*e - ... kp1*cdvar*r/(KCD + r) - kp2*ce*r/(KCE + r) - dR*r; drpdt= kp1*cdvar*r/(KCD + r) + kp2*ce*r/(KCE + r) + ... kp1*cdvar*re/(KCD + re) + kp2*ce*re/(KCE + re) - ... kDP*rp/(KRP + rp) - dRP*rp; dredt=kRE*r*e - kp1*cdvar*re/(KCD + re) - ... kp2*ce*re/(KCE+re) - dRE*re; dudt=k11a*m/(KMu+m) + k11b*e/(KEu+e) + k11c - d11*u; ydot(1) = dmdt; ydot(2) = dedt; ydot(3) = dcddt; ydot(4) = dcedt; ydot(5) = drdt; ydot(6) = drpdt; ydot(7) = dredt; if (length(x) == 8) ydot(8) = dudt; end end ####### This is the script file "plot_Fig3_AtoD.m" % Matlab script to plot the output of the R model (microRNA inhibition of % the restriction point R). This script plots Figure 3 a-d of the % paper and uses the function "Rmodel_rhs.m" % % Author: Ricardo C.H. del Rosario % rcdelros@broadinstitute.org % % Citation: del Rosario, RCH., Damasco JG., Aguda, BD. MicroRNA inhibition % fine-tunes and provides robustness to the restriction point switch % of the cell cycle, Scientific Reports (2016). kM=1.0; KS=0.5; dM=0.7; kE=0.4; KM=0.15; KE=0.15; kb=0.003; kp1=18; KCD=0.92; kp2=18; KCE=0.92; dE=0.25; kRE=180; kCD=0.03; kCDS=0.45; dCD=1.5; kCE=0.35; dCE=1.5; kR=0.18; kDP=3.6; KRP=0.01; dR=0.06; dRP=0.06; dRE=0.03; gM=0.1; gE=0.0; KMu=0.1; KEu=0.1; k11a=0.05; k11b=0.05; k11c=0; d11=0.001; minit=0; einit=0; cdinit=0; ceinit=0; rinit=0; rpinit=0; reinit=0.55; uinit=0; initx(1)=minit; initx(2)=einit; initx(3)=cdinit; initx(4)=ceinit; initx(5)=rinit; initx(6)=rpinit; initx(7)=reinit; initx(8)=uinit; p(1)=kM; p(2)=KS; p(3)=dM; p(4)=kE; p(5)=KM; p(6)=KE; p(7)=kb; p(8)=kp1; p(9)=KCD; p(10)=kp2; p(11)=KCE; p(12)=dE; p(13)=kRE; p(14)=kCD; p(15)=kCDS; p(16)=dCD; p(17)=kCE; p(18)=dCE; p(19)=kR; p(20)=kDP; p(21)=KRP; p(22)=dR; p(23)=dRP; p(24)=dRE; p(25)=gM; p(26)=gE; p(27)=KMu; p(28)=KEu; p(29)=k11a; p(30)=k11b; p(31)=k11c; p(32)=d11; gE_gM_vals = [0 6.3e-4; 1.41e-1 0; 1.41e-1 6.3e-4]; tspan=linspace(0,40,1000); ctr = 0; Tpulse = 5; Spulse = 20; Sfinals=[0.8, 1]; for s_ctr = 1:2, Sfin = Sfinals(s_ctr); for p_ctr=1:2 p(25) = 0; %gM p(26) = 0; %gE if p_ctr == 1 [t1, y_nog] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Spulse, Sfin, Tpulse), tspan, initx(1:7)); else [t1, y_nog] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Sfin, Sfin, Tpulse), tspan, initx(1:7)); end p(25) = gE_gM_vals(1,1); %gM p(26) = gE_gM_vals(1,2); %gE if p_ctr == 1 [t2, y_gE] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Spulse, Sfin, Tpulse), tspan, initx); else [t2, y_gE] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Sfin, Sfin, Tpulse), tspan, initx); end p(25) = gE_gM_vals(2,1); %gM p(26) = gE_gM_vals(2,2); %gE if p_ctr == 1 [t3, y_gM] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Spulse, Sfin, Tpulse), tspan, initx); else [t3, y_gM] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Sfin, Sfin, Tpulse), tspan, initx); end p(25) = gE_gM_vals(3,1); %gM p(26) = gE_gM_vals(3,2); %gE if p_ctr == 1 [t4, y_gEgM] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Spulse, Sfin, Tpulse), tspan, initx); else [t4, y_gEgM] = ode15s(@(t, y)Rmodel_rhs(t, y, p, Sfin, Sfin, Tpulse), tspan, initx); end figure plot( tspan, y_nog(:, 2), '-', 'Color', [220, 20, 60]/255, 'linewidth', 2); hold on plot( tspan, y_gE(:, 2), '--', 'Color', [100, 149, 237]/255, 'linewidth', 2); plot( tspan, y_gM(:, 2), '-.', 'Color', [0, 255, 0]/255, 'linewidth', 2); plot( tspan, y_gEgM(:, 2), '--', 'Color', [255, 128, 0]/255, 'linewidth', 2); hleg = legend('No miR', '\Gamma_M=0,\Gamma_E=6.3e-4', '\Gamma_M=0.141,\Gamma_E=0', ... '\Gamma_M=0.141,\Gamma_E=6.3e-4'); set(hleg, 'Location', 'East', 'Fontsize', 6); xlabel('Time (hr)'); ylabel('E2F'); myaxis = axis(); if s_ctr == 1 && p_ctr == 2 axis([myaxis(1) myaxis(2) myaxis(3) 0.05]); spulse_height = 0.025; else axis([myaxis(1) myaxis(2) myaxis(3) 1.2]); spulse_height = 0.6; end if p_ctr == 1 plot([0 0], [0 spulse_height], 'm--'); plot([0 Tpulse], [spulse_height spulse_height],'m--'); text(1, spulse_height+0.025, sprintf('S=%i', Spulse)); plot([Tpulse Tpulse], [spulse_height spulse_height/Spulse*Sfin], 'm--'); plot([Tpulse 40], [spulse_height/Spulse*Sfin spulse_height/Spulse*Sfin], 'm--'); text(30, spulse_height/Spulse*Sfin+0.025, sprintf('S=%.2f', Sfin )); else plot([0 40], [spulse_height/Spulse*Sfin spulse_height/Spulse*Sfin], 'm--'); text(30, 2*spulse_height/Spulse*Sfin, sprintf('S=%.2f', Sfin )); end end end ########### Save this function as "Rmodel_SensAnal_rhs.m" function ydot = Rmodel_SensAnal_rhs(t,x,p) % Matlab function that gives the right hand side of the sensitivity equations % of the R model (microRNA inhibition of the restriction point R). % See the script "run_Rmodel_SensAnal.m" to see how to use this function. % % Author: Ricardo C.H. del Rosario % rcdelros@broadinstitute.org % % Citation: del Rosario, RCH., Damasco JG., Aguda, BD. MicroRNA inhibition % fine-tunes and provides robustness to the restriction point switch % of the cell cycle, Scientific Reports (2016). m = x(1); e = x(2); cd = x(3); ce = x(4); r = x(5); rp = x(6); re = x(7); u = x(8); kM=p(1); KS=p(2); dM=p(3); kE=p(4); KM=p(5); KE=p(6); kb=p(7); kp1=p(8); KCD=p(9); kp2=p(10); KCE=p(11); dE=p(12); kRE=p(13); kCD=p(14); kCDS=p(15); dCD=p(16); kCE=p(17); dCE=p(18); kR=p(19); kDP=p(20); KRP=p(21); dR=p(22); dRP=p(23); dRE=p(24); gM=p(25); gE=p(26); KMu=p(27); KEu=p(28); k11a=p(29); k11b=p(30); k11c=p(31); d11=p(32); S = p(33); ydot = zeros( 8 + 8*33, 1); ydot(1)=kM*S/(KS+S + gM*u) - dM*m; ydot(2)=kE*(m/(KM+m))*(e/(KE+e+gE*u)) + kb*m/(KM+m) + kp1*cd*re/(KCD+re) + kp2*ce*re/(KCE+re) - dE*e - kRE*r*e; ydot(3)=kCD*m/(KM+m) + kCDS*S/(KS+S) - dCD*cd; ydot(4)=kCE*e/(KE+e) - dCE*ce; ydot(5)=kR + kDP*rp/(KRP + rp) - kRE*r*e - kp1*cd*r/(KCD + r) - kp2*ce*r/(KCE + r) - dR*r; ydot(6)= kp1*cd*r/(KCD + r) + kp2*ce*r/(KCE + r) + kp1*cd*re/(KCD + re) + kp2*ce*re/(KCE + re) - kDP*rp/(KRP + rp) - dRP*rp; ydot(7)=kRE*r*e -kp1*cd*re/(KCD+re) -kp2*ce*re/(KCE+re) -dRE*re; ydot(8)=k11a*m/(KMu+m) + k11b*e/(KEu+e)+k11c-d11*u; ydot(8+1) = S/(KS+S + gM*u); ydot(8+33) = kM/(KS+S + gM*u) -kM*S/(KS+S + gM*u)^2; ydot(8+2) = -kM*S/(KS+S +gM*u)^2; ydot(8+25) = -kM*S/(KS+S + gM*u)^2*u; ydot(8+3) = -m; ydot(8+33+4) = (m/(KM+m))*(e/(KE+e+gE*u)); ydot(8+33+5) = -kE*(m/(KM+m)^2)*(e/(KE+e+gE*u)) - kb*m/(KM+m)^2; ydot(8+33+6) = -kE*(m/(KM+m))*(e/(KE+e+gE*u)^2); ydot(8+33+26) = -kE*(m/(KM+m))*(e/(KE+e+gE*u)^2)*u; ydot(8+33+7) = m/(KM+m); ydot(8+33+8) = cd*re/(KCD+re); ydot(8+33+9) = -kp1*cd*re/(KCD+re)^2; ydot(8+33+10) = ce*re/(KCD+re); ydot(8+33+11) = -kp2*ce*re/(KCE+re)^2; ydot(8+33+12) = -e; ydot(8+33+13) = -r*e; ydot(8+2*33+14) = m/(KM+m); ydot(8+2*33+5) = -kCD*m/(KM+m)^2; ydot(8+2*33+15) = S/(KS+S); ydot(8+2*33+33) = kCDS/(KS+S) - kCDS*S/(KS+S)^2; ydot(8+2*33+2) = -kCDS*S/(KS+S)^2; ydot(8+2*33+16) = -cd; ydot(8+3*33+17) = e/(KE+e); ydot(8+3*33+6) = -kCE*e/(KE+e)^2; ydot(8+3*33+18) = -ce; ydot(8+4*33+19) = 1; ydot(8+4*33+20) = rp/(KRP + rp); ydot(8+4*33+21) = -kDP*rp/(KRP + rp)^2; ydot(8+4*33+13) = -r*e; ydot(8+4*33+8) = -cd*r/(KCD + r); ydot(8+4*33+9) = kp1*cd*r/(KCD + r)^2; ydot(8+4*33+10) = -ce*r/(KCE + r); ydot(8+4*33+11) = kp2*ce*r/(KCE + r)^2; ydot(8+4*33+22) = -r; ydot(8+5*33+8) = cd*r/(KCD + r) + cd*re/(KCD + re); ydot(8+5*33+9) = -kp1*cd*r/(KCD + r)^2 - kp1*cd*re/(KCD + re)^2; ydot(8+5*33+10) = ce*r/(KCE + r) + ce*re/(KCE + re); ydot(8+5*33+11) = -kp2*ce*r/(KCE + r)^2 - kp2*ce*re/(KCE + re)^2; ydot(8+5*33+20) = rp/(KRP + rp); ydot(8+5*33+21) = kDP*rp/(KRP + rp)^2; ydot(8+5*33+23) = -rp; ydot(8+6*33+13) = r*e; ydot(8+6*33+8) = -cd*re/(KCD+re); ydot(8+6*33+9) = kp1*cd*re/(KCD+re)^2; ydot(8+6*33+10) = ce*re/(KCE+re); ydot(8+6*33+11) = kp2*ce*re/(KCE+re)^2; ydot(8+6*33+24) = -re; ydot(8+7*33+29) = m/(KMu+m); ydot(8+7*33+27) = -k11a*m/(KMu+m)^2; ydot(8+7*33+30) = e/(KEu+e); ydot(8+7*33+28) = -k11b*e/(KEu+e)^2; ydot(8+7*33+31) = 1; ydot(8+7*33+32) = -u; end ###### Save this script file as "run_Rmodel_SensAnal.m" % Matlab script to run time-dependent sensitivity analysis on the R model and to % plot Supplementary Fig. 7. Uses the function "Rmodel_SensAnal_rhs.m" % % Author: Ricardo C.H. del Rosario % rcdelros@broadinstitute.org % % Citation: del Rosario, RCH., Damasco JG., Aguda, BD. MicroRNA inhibition % fine-tunes and provides robustness to the restriction point switch % of the cell cycle, Scientific Reports (2016). Nt = 1000; tspan = linspace(0, 5000, Nt); options = odeset('RelTol',1e-6,'AbsTol', 1e-8); S_vals = [0.8, 1.0, 2, 3, 4, 5]; gE_vals = [0, 6.36e-4, 7.5e-4, 1.5e-3, 2.05e-3, 3e-3, 4.88e-3, 6.93e-3]; gM_vals = [0, 1.25e-6, 2.5e-2, 3.75e-2, 4.04e-2, 1.41e-1, 0.2, 0.4, 0.6, 0.8, 1.8e0]; kE_vals = [0.125, 0.263, 0.274, 0.287, 0.3, 0.35]; nloop = length(S_vals)*length(gE_vals)*length(gM_vals)*length(kE_vals); sens_vals = zeros(33,nloop); kM=1.0; KS=0.5; dM=0.7; kE=0.4; KM=0.15; KE=0.15; kb=0.003; kp1=18; KCD=0.92; kp2=18; KCE=0.92; dE=0.25; kRE=180; kCD=0.03; kCDS=0.45; dCD=1.5; kCE=0.35; dCE=1.5; kR=0.18; kDP=3.6; KRP=0.01; dR=0.06; dRP=0.06; dRE=0.03; KMu=0.1; KEu=0.1; k11a=0.05; k11b=0.05; k11c=0; d11=0.001; p(1)=kM; p(2)=KS; p(3)=dM; %p(4)=kE; This is initialized below p(5)=KM; p(6)=KE; p(7)=kb; p(8)=kp1; p(9)=KCD; p(10)=kp2; p(11)=KCE; p(12)=dE; p(13)=kRE; p(14)=kCD; p(15)=kCDS; p(16)=dCD; p(17)=kCE; p(18)=dCE; p(19)=kR; p(20)=kDP; p(21)=KRP; p(22)=dR; p(23)=dRP; p(24)=dRE; %p(25)=gM; This is initialized below %p(26)=gE; This is initialized below p(27)=KMu; p(28)=KEu; p(29)=k11a; p(30)=k11b; p(31)=k11c; p(32)=d11; %p(33)=S; This is initialized below init_vals = zeros(8 + 8*33, 1); init_vals(1)=0; init_vals(2)=0; init_vals(3)=0; init_vals(4)=0; init_vals(5)=0; init_vals(6)=0; init_vals(7)=0.55; init_vals(8)=0; ctr = 0; for S=S_vals for gE=gE_vals for gM=gM_vals for kE=kE_vals p(4) = kE; p(25)= gM; p(26)= gE; p(33)= S; ctr = ctr + 1; [tout, xout] = ode15s(@(t,x)Rmodel_sensanal_rhs(t,x,p), tspan,init_vals,options); for j=1:33 sum1 = 0; for i=1:8 for k=1:Nt sum1 = sum1 + ( p(j)/(1e-6*xout(k,i) + 1e-8) * ... xout(k, 8 + (i-1)*33 + j) )^2; end end sens_vals(j, ctr) = sqrt(sum1)/(8*Nt); end fprintf('Done %i out of %i\n', ctr, nloop); end end end end figure boxplot(sens_vals'); set(gca, 'Fontsize', 8); set(gca, 'Yscale', 'log');