Skip to content

Commit 316fcd5

Browse files
committed
Add files from meeting Feb 9
1 parent 6e7a990 commit 316fcd5

6 files changed

+2148
-5
lines changed

.gitignore

-5
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ Examples/FakeExperiment_*.csv
3737
WorkSpace/Bomyi/*
3838
WorkSpace/Bomyi/*/*
3939
WorkSpace/Bomyi/*/*/*
40-
WorkSpace/DavidKing/*
41-
WorkSpace/DavidKing/*/*
42-
WorkSpace/DavidKing/*/*/*
4340
WorkSpace/Josh/OldVersions/*
4441
WorkSpace/Josh/OldVersions/*/*
4542
WorkSpace/Josh/OldVersions/*/*/*
@@ -51,5 +48,3 @@ WorkSpace/OldProablyTrash/*/*/*
5148
*/tmpPropensityFunctions/*
5249
Examples/Iterative*.mat
5350
WorkSpace/Josh/Fake*.csv
54-
Workspace/*/*
55-
Workspace/*

WorkSpace/DavidKing/Luis_Strategy1.m

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
%% Using the SSIT to fit and Design Single-Cell Experiments
2+
% In this script, we show how the SSIT can be used to identify a
3+
% time-inhomogeneous model for the activation of Dusp1 mRNA expression
4+
% under Dexamethasome stimulation of Glucocorticoid Receptors.
5+
clear all
6+
clc
7+
addpath(genpath('../../src'));
8+
DATAFILE = 'datasetDavidKingJan2024';
9+
%% Define SSIT Model
10+
Model0 = SSIT;
11+
Model0.species = {'elt2';... % endogenous ELT-2. Unobserved.
12+
'elt7';... % endogenous ELT-7. Unobserved.
13+
'gfp'}; % GFP, run off of elt-2 promoter. This is our observed variable.
14+
Model0.initialCondition = [0;0;0];
15+
Model0.propensityFunctions = {
16+
'kelt2*(1 + elt7)/(promoter_alpha+elt7)*promoter_beta/(promoter_beta+elt2)'; ... % ELT-2
17+
'gelt2*elt2';... % degradation
18+
'kelt7';... % ELT-7
19+
'gelt7*elt7';... % degradation
20+
'kgfp*(1 + elt7)/(promoter_alpha+elt7)*promoter_beta/(promoter_beta+elt2)';... % GFP
21+
'ggfp*gfp'}; %GFP
22+
Model0.stoichiometry = [1,-1,0,0,0,0;...
23+
0,0,1,-1,0,0;...
24+
0,0,0,0,1,-1];
25+
26+
Model0.parameters = ({ ...
27+
'kelt2',1;...
28+
'kelt7',1;...
29+
'kgfp',1;...
30+
'gelt2',1;...
31+
'gelt7',1;...
32+
'ggfp',16;...
33+
'promoter_alpha',5; ...
34+
'promoter_beta',10});
35+
36+
%% set FSP and other settings
37+
disp("Setting parameters.")
38+
Model0.fspOptions.initApproxSS = true;
39+
Model0.tSpan=[0,100];
40+
41+
Model0.solutionScheme = 'FSP';
42+
Model0.fspOptions.fspTol = 1e-3;
43+
disp('Writing propensity functions')
44+
Model0 = Model0.formPropensitiesGeneral('DavidKing');
45+
46+
[~,Model0.fspOptions.bounds] = Model0.solve;
47+
Model0.fspOptions.bounds(6) = max(30,Model0.fspOptions.bounds(6));
48+
49+
%% Load and Fit GFP reporter data
50+
disp("Loading WT data.");
51+
Model1 = Model0.loadData(DATAFILE,{'gfp','IntensityIntegers'},...
52+
{'Genotype','ELT-2-GFP';'RNAi','L4440'});
53+
Model1.fittingOptions.modelVarsToFit = [1:8];
54+
55+
disp("Loading elt7 KO data.");
56+
Model2 = Model0.loadData(DATAFILE,{'gfp','IntensityIntegers'; 'elt7', 'zeroes'},...
57+
{'Genotype','ELT-7-KO';'RNAi','L4440'});
58+
Model2.parameters(2,:) = {'kelt7',0};
59+
% define parameters that are in model 2.
60+
M2parInds = [1,3,4,6,8];
61+
Model2.fittingOptions.modelVarsToFit = M2parInds;
62+
63+
%%
64+
[~,Model1.fspOptions.bounds] = Model1.solve;
65+
[~,Model2.fspOptions.bounds] = Model2.solve;
66+
67+
mu = zeros(size(Model0.parameters,1),1); % log means
68+
sig2 = ones(size(Model0.parameters,1),1);
69+
70+
% Model1.fittingOptions.logPrior = @(x)sum(-(log10(x)-mu).^2./(2*sig2));
71+
% Model2.fittingOptions.logPrior = @(x)sum(-(log10(x)-mu([1,3,4,6,8])).^2./(2*sig2(M2parInds)));
72+
73+
%% setting up the fit
74+
% initial guess
75+
pars0 = [Model0.parameters{:,2}];
76+
fitOptions = optimset('Display','iter','MaxIter',100);
77+
obj = @(x)-(Model1.computeLikelihood(exp(x))+Model2.computeLikelihood(exp(x(M2parInds))));
78+
initial_error = obj(log(pars0))
79+
80+
%% fit
81+
disp("Fitting...");
82+
83+
% load ParsBrian pars0
84+
for iRound = 1:5
85+
pars0 = exp(fminsearch(obj,log(pars0),fitOptions))
86+
87+
Model1.parameters(:,2) = num2cell(pars0);
88+
Model2.parameters(M2parInds,2) = num2cell(pars0(M2parInds));
89+
90+
[soln1,Model1.fspOptions.bounds] = Model1.solve;
91+
Model1.fspOptions.bounds(6) = max(30,Model1.fspOptions.bounds(6));
92+
[~,~,soln1] = Model1.computeLikelihood([],soln1.stateSpace);
93+
94+
[soln2,Model2.fspOptions.bounds] = Model2.solve;
95+
[~,~,soln2] = Model2.computeLikelihood([],soln2.stateSpace);
96+
Model2.fspOptions.bounds(6) = max(30,Model2.fspOptions.bounds(6));
97+
98+
Model1.makeFitPlot(soln1,1);
99+
Model2.makeFitPlot(soln2,1);
100+
end
101+
102+
% save ParsBrian pars0
103+
104+
105+
106+
% Model0.parameters(Model0.fittingOptions.modelVarsToFit,2) = num2cell(Model0.maximizeLikelihood([],fitOptions));
107+
108+
%% plot
109+
% disp("Plotting...");
110+
% [fspSoln,Model0.fspOptions.bounds] = Model0.solve;
111+
% Model0.makeFitPlot([],1); % makeSeparatePlotOfData last worked on commit 20a9bbe, not subsequent: 0055cc
112+
% Error with 0055cc:
113+
% Attempt to grow array along ambiguous dimension.
114+
%
115+
% Error in makeSeparatePlotOfData (line 87)
116+
% H1(end+1)=0;
117+

WorkSpace/DavidKing/ParsBrian.mat

243 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)