SimBiology parameter estimation for a series of single dose-response data
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
emjey
el 3 de Ag. de 2022
Comentada: Arthur Goldsipe
el 5 de Ag. de 2022
I would like to estimate set of parameters from a series of experiments with different doses and single measurement points. I.e. there is one concentration measurement for each dose, all administered at time=0.
I get reasonably looking parameter estimates but when reentering the doses in the model the reults don't quite match. I attach the working sbproj and script in PS. Would appreciate some comments what is missing.
Best, M
PS:
So far my code reads:
%% multiDOSE.m
clear all
DOSE_TIME = [0,0,0,0,0,0]'; % day
DOSE_AMT = [1,2,3,4,5,6]'; % mg
DOSEdata = groupedData(table(DOSE_TIME, DOSE_AMT));
DOSEdata.Properties.IndependentVariableName = 'DOSE_TIME';
DOSEdata.Properties.VariableUnits = {'day','milligram'};
DOSEdata.Properties
sampleDose = sbiodose('sample', 'TargetName', 'CELL.DRUG');
doseArray = createDoses(DOSEdata,'DOSE_AMT','',sampleDose);
TIME = [10,10,10,10,10,10]'; % day
CONC = [14,44,88,105,192,254]'; % ng/mL
CONCdata = groupedData(table(TIME, CONC));
CONCdata.Properties.VariableUnits = {'day','milligram/milliliter'};
s = sbioloadproject("multiDOSE.sbproj");
modelObj = s.m1;
paramsToEstimate = {'log(kdeg)','log(kin)'};
paramToEst = estimatedInfo(paramsToEstimate,'InitialValue',[1,1]);
opt = optimset('PlotFcns',@optimplotfval,'MaxIter',150);
result1 = sbiofit(modelObj, CONCdata, 'Species1 = CONC', paramToEst, ...
doseArray, 'fminsearch', opt,'Pooled', true);
estValues1 = result1.ParameterEstimates
0 comentarios
Respuesta aceptada
Arthur Goldsipe
el 3 de Ag. de 2022
I think the problem is that you need to add a grouping variable to your DOSEdata and your CONCdata. As the code is currently written, you are doing a single simulation with 6 different doses at time 0, for a cumultive dose of sum(1:6), or 21 milligram. And then you're simultaneously trying to fit all 6 measurements at time 10 to the result of a single simulation at time 10. (We allow different repeated measurements at the same time in order to support technical or biological replicates.)
I'll attach my updated version of your script. But the main changes are that (1) I added the following group identifier line near the top:
ID = (1:6)';
and (2) I updated the groupedData setup as follows:
DOSEdata = groupedData(table(ID, DOSE_TIME, DOSE_AMT));
DOSEdata.Properties.VariableUnits = {'', 'day','milligram'};
CONCdata = groupedData(table(ID, TIME, CONC));
CONCdata.Properties.VariableUnits = {'', 'day','milligram/milliliter'};
If you like, you could create a single groupedData that contains both your dosing information and the measurements. You just need to use NaN values as appropriate to indicate no dose or no measurement at the specific time. For example:
ID = [1 1 2 2]';
TIME = [0 10 0 10]';
DOSE = [1 nan 2 nan]';
CONC = [nan 14 nan 44]';
data = groupedData(table(ID, TIME, DOSE, CONC))
3 comentarios
Arthur Goldsipe
el 5 de Ag. de 2022
No, you still need to pass doseArray in to sbiofit. But you would create it from the same data you pass in to sbiofit. So, the code might look something like this:
data = groupedData(table(ID, TIME, DOSE, CONC));
doseArray = createDoses(data, 'DOSE_AMT', '', sampleDose)
result1 = sbiofit(modelObj, data, 'Species1 = CONC', paramToEst, ...
doseArray, 'fminsearch', opt, 'Poosed', true);
The main reason I designed things this way was for additional flexibility. Your dosing information can be embedded in the same data set as your experimental measurements, but it doesn't have to be.
Más respuestas (0)
Ver también
Categorías
Más información sobre Import Data en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!