Difference between revisions of "Support:Documents:Examples:Estimate physiological parameters using a physiologically based model"
Jump to navigation
Jump to search
Line 5: | Line 5: | ||
− | ==Example of Implementation of the | + | ==Example of Implementation of the Physiologically Based Model== |
<pre> | <pre> | ||
Line 12: | Line 12: | ||
% Define parameters | % Define parameters | ||
cm=addParameter(cm,'k1',0.1); | cm=addParameter(cm,'k1',0.1); | ||
− | cm=addParameter(cm,'k2','k1/ | + | cm=addParameter(cm,'k2','k1/Fis'); |
− | cm=addParameter(cm,'k3','VG/(Fis*KGa+Fis* | + | cm=addParameter(cm,'k3','VG/(Fis*KGa+Fis*ISg*KGa/KGg)'); |
cm=addParameter(cm,'k4','VG/(Fic*KGa+Fic*ICg*KGa/KGg)'); | cm=addParameter(cm,'k4','VG/(Fic*KGa+Fic*ICg*KGa/KGg)'); | ||
cm=addParameter(cm,'k5','VH/(Fic*KHa+Fic*ICg*KHa/KHg)'); | cm=addParameter(cm,'k5','VH/(Fic*KHa+Fic*ICg*KHa/KHg)'); | ||
Line 22: | Line 22: | ||
cm=addParameter(cm,'F',1); | cm=addParameter(cm,'F',1); | ||
− | cm=addParameter(cm,'Pg', | + | cm=addParameter(cm,'Pg',6); % Plasma glucose concentration (mM) |
− | cm=addParameter(cm,'ISg',5.4); % Interstitial glucose concentration | + | cm=addParameter(cm,'ISg',5.4); % Interstitial glucose concentration (mM) |
− | cm=addParameter(cm,'ICg',0.2); % Intracellular glucose concentration | + | cm=addParameter(cm,'ICg',0.2); % Intracellular glucose concentration (mM) |
− | cm=addParameter(cm,'KGg',3.5); % Michaelis constant of glucose transporter (GLUT) for glucose | + | cm=addParameter(cm,'KGg',3.5); % Michaelis constant of glucose transporter (GLUT) for glucose (mM) |
− | cm=addParameter(cm,'KHg',0.13; % Michaelis constant of hexokinase for glucose | + | cm=addParameter(cm,'KHg',0.13); % Michaelis constant of hexokinase for glucose (mM) |
− | cm=addParameter(cm,'KGa', | + | cm=addParameter(cm,'KGa',14); % Michaelis constant of glucose transporter (GLUT) for glucose analog (mM) |
− | cm=addParameter(cm,'KHa',0. | + | cm=addParameter(cm,'KHa',0.17); % Michaelis constant of hexokinase for glucose analog (mM) |
cm=addParameter(cm,'VG','(k1*Pg-k1*ISg)/(ISg/(KGg+ISg)-ICg/(KGg+ICg))'); % Maximal velocity of glucose transport for glucose=6FDG=2FDG | cm=addParameter(cm,'VG','(k1*Pg-k1*ISg)/(ISg/(KGg+ISg)-ICg/(KGg+ICg))'); % Maximal velocity of glucose transport for glucose=6FDG=2FDG | ||
Line 39: | Line 39: | ||
% Usually, the decay time correction of image data is performed. So, dk is zero. | % Usually, the decay time correction of image data is performed. So, dk is zero. | ||
cm=addParameter(cm,'dk',0); | cm=addParameter(cm,'dk',0); | ||
+ | |||
+ | % Define scan time | ||
+ | delay = 0.0; | ||
+ | scanduration = 120; | ||
+ | |||
+ | t=[ones(5,1)/30;ones(10,1)/12;ones(12,1)*0.5;ones(8,1);ones(21,1)*5]; | ||
+ | scant = [[0;cumsum(t(1:(length(t)-1)))] cumsum(t)]; | ||
+ | scanTime = [scant(:,1),scant(:,2)]; | ||
+ | |||
+ | cm = set(cm, 'ScanTime', scanTime); | ||
+ | |||
+ | lambda = [-12.02 -2.57 -0.02]; | ||
+ | |||
+ | a = [1771.5 94.55 14.27]; | ||
+ | |||
+ | cm = addParameter(cm, 'pfeng', [delay a lambda]'); | ||
+ | cm = addInput(cm, 'Cp', 'sa', 'dk', 'fengInputByPar','pfeng'); % Cp is the plasma input function | ||
+ | cm = addInput(cm, 'Ca',1,0, 'fengInputByPar', 'pfeng'); % Ca is the decay-corrected whole-blood input function. Herein, we assume that Cp=Ca. | ||
% Define compartment | % Define compartment | ||
Line 54: | Line 72: | ||
% Define output of the first injection plus the second injection | % Define output of the first injection plus the second injection | ||
− | wlistTotal={'IS','F';'IC','F;'IP','F'}; | + | wlistTotal={'IS','F';'IC','F';'IP','F'}; |
xlistTotal={'Ca','Fb'}; | xlistTotal={'Ca','Fb'}; | ||
cm=addOutput(cm,'TissueTotal',wlistTotal,xlistTotal); | cm=addOutput(cm,'TissueTotal',wlistTotal,xlistTotal); | ||
Line 62: | Line 80: | ||
[PET,PETIndex,Output,OutputIndex]=solve(cm); | [PET,PETIndex,Output,OutputIndex]=solve(cm); | ||
+ | noise_level=0.05; | ||
+ | |||
+ | sd=noise_level*sqrt(PET(:,3)./(PET(:,2)-PET(:,1))); | ||
+ | |||
+ | data=sd.*randn(size(PET(:,3)))+PET(:,3); | ||
+ | |||
+ | cm=set(cm,'ExperimentalData',data); | ||
+ | |||
+ | cm = set(cm,'ExperimentalDataSD',sd); | ||
+ | |||
+ | optsIRLS = setopt('SDModelFunction', @IRLSnoiseModel); | ||
+ | cm = set(cm, 'IRLSOptions', optsIRLS); | ||
+ | |||
+ | oo = optimset('TolFun', 1e-8, 'TolX', 1e-4,'Algorithm','interior-point'); | ||
+ | cm = set(cm, 'OptimizerOptions', oo); | ||
+ | |||
+ | % Set initial conditions and boundary conditions | ||
+ | % k1, ISg, ICg, Fs Fv | ||
+ | pinit = [0.01 ; 4.4 ; 0.1 ;0.15 ; 0.01]; | ||
+ | plb = [0.001; 1 ; 0.001;0.10 ; 0 ]; | ||
+ | pub = [0.5 ; 6 ; 1 ;0.60 ; 0.04]; | ||
+ | |||
+ | [pfit, qfit, modelfit, exitflag, output, lambda, grad, hessian, objfunval] = fitGen(cm, pinit, plb, pub, 'IRLS'); | ||
+ | |||
+ | figure; | ||
+ | t = 0.5*(PET(:,1)+PET(:,2)); | ||
+ | plot(t,PET(:,3),'g-',t,data,'ro','LineWidth',2); | ||
+ | xlabel('Time (minutes)'); | ||
+ | ylabel('Concentrations (uCi/mL)'); | ||
+ | legend('Noise-free data','Noisy data'); | ||
+ | |||
+ | figure; | ||
+ | t = 0.5*(PET(:,1)+PET(:,2)); | ||
+ | plot(t,data,'ro',t,modelfit,'b-','LineWidth',2); | ||
+ | xlabel('Time (minutes)'); | ||
+ | ylabel('Concentrations (uCi/mL)'); | ||
+ | legend('Noisy data', 'Model fit'); | ||
+ | |||
+ | Pg=6;KGa=14;KHa=0.17;KGg=3.5;KHg=0.13; % Unit is mM | ||
+ | |||
+ | k1=pfit(1);k2=pfit(1)/pfit(4);ISg=pfit(2);ICg=pfit(3);Fis=pfit(4);Fb=pfit(5); | ||
+ | |||
+ | VG=(k1*ISg-k1*Pg)/(ICg/(KGg+ICg)-ISg/(KGg+ISg)) | ||
+ | |||
+ | VH=(k1*Pg-k1*ISg)/(ICg/(KHg+ICg)) | ||
+ | |||
+ | CI=VG*ISg/(KGg+ISg) | ||
+ | |||
+ | CE=VG*ICg/(KGg+ICg) | ||
+ | |||
+ | PR=VH*ICg/(KHg+ICg) | ||
+ | |||
</pre> | </pre> |
Revision as of 17:07, 22 August 2011
Estimation of Physiological Parameters Using a Physiologically Based Model
Overview
Example of Implementation of the Physiologically Based Model
cm=compartmentModel; % Define parameters cm=addParameter(cm,'k1',0.1); cm=addParameter(cm,'k2','k1/Fis'); cm=addParameter(cm,'k3','VG/(Fis*KGa+Fis*ISg*KGa/KGg)'); cm=addParameter(cm,'k4','VG/(Fic*KGa+Fic*ICg*KGa/KGg)'); cm=addParameter(cm,'k5','VH/(Fic*KHa+Fic*ICg*KHa/KHg)'); cm=addParameter(cm,'Fb',0.02); % fraction of total space occupied by blood cm=addParameter(cm,'Fis',0.3); % fraction of total space occupied by interstitial space cm=addParameter(cm,'Fic','1-Fis-Fb'); % fraction of total space occupied by intracellular space cm=addParameter(cm,'F',1); cm=addParameter(cm,'Pg',6); % Plasma glucose concentration (mM) cm=addParameter(cm,'ISg',5.4); % Interstitial glucose concentration (mM) cm=addParameter(cm,'ICg',0.2); % Intracellular glucose concentration (mM) cm=addParameter(cm,'KGg',3.5); % Michaelis constant of glucose transporter (GLUT) for glucose (mM) cm=addParameter(cm,'KHg',0.13); % Michaelis constant of hexokinase for glucose (mM) cm=addParameter(cm,'KGa',14); % Michaelis constant of glucose transporter (GLUT) for glucose analog (mM) cm=addParameter(cm,'KHa',0.17); % Michaelis constant of hexokinase for glucose analog (mM) cm=addParameter(cm,'VG','(k1*Pg-k1*ISg)/(ISg/(KGg+ISg)-ICg/(KGg+ICg))'); % Maximal velocity of glucose transport for glucose=6FDG=2FDG cm=addParameter(cm,'VH','(k1*Pg-k1*ISg)/(ICg/(KHg+ICg))'); % Maximal velocity of glucose phosphorylation for glucose=6FDG=2FDG % Specific activity (sa): if the unit of image data is the same with that of input function, the specific activity is 1. cm=addParameter(cm,'sa',1); % Usually, the decay time correction of image data is performed. So, dk is zero. cm=addParameter(cm,'dk',0); % Define scan time delay = 0.0; scanduration = 120; t=[ones(5,1)/30;ones(10,1)/12;ones(12,1)*0.5;ones(8,1);ones(21,1)*5]; scant = [[0;cumsum(t(1:(length(t)-1)))] cumsum(t)]; scanTime = [scant(:,1),scant(:,2)]; cm = set(cm, 'ScanTime', scanTime); lambda = [-12.02 -2.57 -0.02]; a = [1771.5 94.55 14.27]; cm = addParameter(cm, 'pfeng', [delay a lambda]'); cm = addInput(cm, 'Cp', 'sa', 'dk', 'fengInputByPar','pfeng'); % Cp is the plasma input function cm = addInput(cm, 'Ca',1,0, 'fengInputByPar', 'pfeng'); % Ca is the decay-corrected whole-blood input function. Herein, we assume that Cp=Ca. % Define compartment cm=addCompartment(cm,'IS'); % interstitial cm=addCompartment(cm,'IC'); % intracellular cm=addCompartment(cm,'IP'); % intracellular phosphorylated cm=addCompartment(cm,'Junk'); % Define link cm=addLink(cm,'L','Cp','IS','k1'); cm=addLink(cm,'K','IS','Junk','k2'); cm=addLink(cm,'K','IS','IC','k3'); cm=addLink(cm,'K','IC','IS','k4'); cm=addLink(cm,'K','IC','IP','k5'); % Define output of the first injection plus the second injection wlistTotal={'IS','F';'IC','F';'IP','F'}; xlistTotal={'Ca','Fb'}; cm=addOutput(cm,'TissueTotal',wlistTotal,xlistTotal); cm=addSensitivity(cm,'k1','ISg','ICg','Fis','Fb'); [PET,PETIndex,Output,OutputIndex]=solve(cm); noise_level=0.05; sd=noise_level*sqrt(PET(:,3)./(PET(:,2)-PET(:,1))); data=sd.*randn(size(PET(:,3)))+PET(:,3); cm=set(cm,'ExperimentalData',data); cm = set(cm,'ExperimentalDataSD',sd); optsIRLS = setopt('SDModelFunction', @IRLSnoiseModel); cm = set(cm, 'IRLSOptions', optsIRLS); oo = optimset('TolFun', 1e-8, 'TolX', 1e-4,'Algorithm','interior-point'); cm = set(cm, 'OptimizerOptions', oo); % Set initial conditions and boundary conditions % k1, ISg, ICg, Fs Fv pinit = [0.01 ; 4.4 ; 0.1 ;0.15 ; 0.01]; plb = [0.001; 1 ; 0.001;0.10 ; 0 ]; pub = [0.5 ; 6 ; 1 ;0.60 ; 0.04]; [pfit, qfit, modelfit, exitflag, output, lambda, grad, hessian, objfunval] = fitGen(cm, pinit, plb, pub, 'IRLS'); figure; t = 0.5*(PET(:,1)+PET(:,2)); plot(t,PET(:,3),'g-',t,data,'ro','LineWidth',2); xlabel('Time (minutes)'); ylabel('Concentrations (uCi/mL)'); legend('Noise-free data','Noisy data'); figure; t = 0.5*(PET(:,1)+PET(:,2)); plot(t,data,'ro',t,modelfit,'b-','LineWidth',2); xlabel('Time (minutes)'); ylabel('Concentrations (uCi/mL)'); legend('Noisy data', 'Model fit'); Pg=6;KGa=14;KHa=0.17;KGg=3.5;KHg=0.13; % Unit is mM k1=pfit(1);k2=pfit(1)/pfit(4);ISg=pfit(2);ICg=pfit(3);Fis=pfit(4);Fb=pfit(5); VG=(k1*ISg-k1*Pg)/(ICg/(KGg+ICg)-ISg/(KGg+ISg)) VH=(k1*Pg-k1*ISg)/(ICg/(KHg+ICg)) CI=VG*ISg/(KGg+ISg) CE=VG*ICg/(KGg+ICg) PR=VH*ICg/(KHg+ICg)