17 藥物動力學(xué)
藥物動力學(xué)(Pharmacokinetics)是研究藥物和其他物質(zhì)是如何在動物體內(nèi)移動、反應(yīng)和消除的一門學(xué)科。在這一章,我們要實(shí)現(xiàn)被最廣泛應(yīng)用的藥物動力學(xué)模型之一:關(guān)于血流中的葡萄糖和胰島素的最小模型(minimal model)。
我在這一章的陳述遵循Bergman (2005) “Minimal Model” (獲取摘要 http://modsimpy.com/bergman,獲取PDF http://modsimpy.com/minmod)
17.1 葡萄糖-胰島素系統(tǒng)
葡萄糖是一種在動物血液中循環(huán)的糖類,它是肌肉,大腦和其他器官的能量來源。血液中糖的濃度是由內(nèi)分泌系統(tǒng)調(diào)控的,特別是由胰腺產(chǎn)生的胰島素(insulin),具有降低血糖的作用。
對于胰腺功能正常的人群來說,內(nèi)分泌系統(tǒng)保持穩(wěn)態(tài)(homeostasis);也就是說,它使血糖濃度保持在一個(gè)不高也不低的范圍內(nèi)。
但是,如果胰腺不能產(chǎn)生足夠的胰島素,或者是細(xì)胞對胰島素的反應(yīng)變得不那么敏感,那么血糖就會上升,這種情況被稱作高血糖(hyperglycemia)。長期來看,嚴(yán)重的高血糖是糖尿病(diabetes mellitus)的一種典型癥狀。而糖尿病是一種嚴(yán)重的疾病,幾乎影響了美國10%的人口 (詳情請看 http://modsimpy.com/cdc)。
高血糖和糖尿病最常用的測試之一是靜脈葡萄糖耐受試驗(yàn)(frequently sampled intravenous glucose tolerance test ,FSIGT)。試驗(yàn)為禁食受試者(最近一段時(shí)間沒有吃東西的人)注射葡萄糖,然后每隔2-10分鐘采集一次血樣,持續(xù)采集3小時(shí)。之后對樣品進(jìn)行分析,測量樣本的葡萄糖和胰島素的濃度。
通過分析這些測量結(jié)果,我們可以評估出幾個(gè)有關(guān)受試者反應(yīng)的幾個(gè)參數(shù);其中一個(gè)最重要的參數(shù)是, 它量化了胰島素對血糖降低率的影響。
17.2 葡萄糖最小模型
“最小模型”是由Bergman、Ider、Bowden和Cobelli1提出的。它由兩部分組成:葡萄糖模型和胰島素模型。我將會介紹葡萄糖模型的實(shí)現(xiàn);作為案例學(xué)習(xí),您可以相應(yīng)地去實(shí)現(xiàn)胰島素模型。
最初的模型是在二十世紀(jì)七十年代發(fā)展起來的,從那以后,許多變種和擴(kuò)展已經(jīng)被相繼提出。Bergman對該模型發(fā)展的評論提供了對該過程的洞察:
我們應(yīng)用了奧卡姆剃刀的原理(the principle of Occam’s Razor),即通過詢問基于已知生理學(xué)的最簡單的模型是什么,可以解釋數(shù)據(jù)中顯示的胰島素-葡萄糖關(guān)系。這樣一個(gè)模型必須足夠簡單來完整地描述測量到的所有葡萄糖濃度(考慮到胰島素輸入),但是它必須可以通過使用數(shù)學(xué)技術(shù),從一個(gè)單一的數(shù)據(jù)集中估計(jì)出模型中的所有參數(shù)(從而避免無法檢驗(yàn)的假設(shè))。
最有用的模型是能夠?qū)崿F(xiàn)這一平衡的模型:需要包括足夠的現(xiàn)實(shí)性來捕獲系統(tǒng)的基本特性,但不會太復(fù)雜以至于不切實(shí)際。在這個(gè)例子中,實(shí)際的限制在于使用數(shù)據(jù)來估計(jì)模型的參數(shù)的能力以及有意義地解釋這些參數(shù)的能力。
伯格曼討論了他和他的同事認(rèn)為必不可少的特征:
(1)葡萄糖在注射后一旦升高,會由于兩種作用而恢復(fù)到基礎(chǔ)水平:葡萄糖本身使自身濃度恢復(fù)正?;淖饔肹...]以及胰島素對葡萄糖自我正?;拇呋饔?。(2)同時(shí),我們發(fā)現(xiàn)胰島素對葡萄糖消失的影響是緩慢的——也就是說,胰島素作用緩慢是因?yàn)橐葝u素需要通過血漿運(yùn)輸?shù)竭h(yuǎn)端作用部位[...]然后在葡萄糖上發(fā)揮作用。
轉(zhuǎn)述第二點(diǎn),胰島素降低血糖的作用,正如數(shù)據(jù)所示,如果它主要依賴于血液中的胰島素濃度,它就會發(fā)生得比我們預(yù)期的要慢。伯格曼的研究小組的假設(shè)就是,胰島素必須從血液中相對緩慢地轉(zhuǎn)移到它發(fā)揮作用的“遠(yuǎn)室”。
在當(dāng)時(shí),遠(yuǎn)程分隔是一個(gè)可能表示也可能不表示某些物理內(nèi)容的建模抽象。后來,根據(jù)伯格曼的說法,它“被證明是組織間液”,也就是在組織細(xì)胞的周圍液體。在數(shù)學(xué)建模的歷史上,它通常作為假設(shè)的實(shí)體,被添加到模型中以達(dá)到特定的效果,然后后來才發(fā)現(xiàn)相對應(yīng)的物理實(shí)體。
葡萄糖模型由兩個(gè)微分方程組成:
其中:
-
是血糖濃度隨時(shí)間變化的函數(shù),
是血糖濃度隨時(shí)間的變化率。
-
是組織液中胰島素濃度隨時(shí)間變化的函數(shù),
是組織液中胰島素濃度隨時(shí)間的變化率。
-
是血液中胰島素濃度隨時(shí)間變化的函數(shù),它可以被測量,作為模型的輸入。
-
是血糖的基礎(chǔ)濃度,
是血液中胰島素的基礎(chǔ)濃度,即處于平衡狀態(tài)的濃度。二者都是在測試開始或者結(jié)束時(shí)通過測量估計(jì)出的常數(shù)。
-
,
,
都是控制葡萄糖和胰島素出現(xiàn)和消失的速率的正值參數(shù)。
我們可以逐一解釋方程中的項(xiàng):
-
是葡萄糖自身作用導(dǎo)致的葡萄糖消失速率。當(dāng)
高于基礎(chǔ)水平
時(shí),這一項(xiàng)為負(fù)值;當(dāng)
低于基礎(chǔ)水平
時(shí),這一項(xiàng)為正值;所以在沒有胰島素的情況下,這一項(xiàng)傾向于將血糖恢復(fù)到基礎(chǔ)水平。
-
模擬組織液中葡萄糖和胰島素的相互作用,所以速率隨
或
的增加而增加。這一項(xiàng)不需要速率參數(shù),因?yàn)檫@
的單位還沒有被指定,我們可以假設(shè)
的單位使這一項(xiàng)的參數(shù)為1。
-
是胰島素在血液和組織液之間擴(kuò)散的速率。當(dāng)
高于基礎(chǔ)水平時(shí),胰島素從血液擴(kuò)散到組織液中。當(dāng)I(t)低于基礎(chǔ)水平時(shí),胰島素從組織擴(kuò)散入血液中。
-
是胰島素在組織液中被消耗和或分解的的速率。
模型的初始狀態(tài)為,
,其中G0為常數(shù),表示注射后即刻的血糖濃度。理論上,我們可以通過測量來估計(jì)
,但在實(shí)際中,注射的葡萄糖在血液中擴(kuò)散需要時(shí)間,導(dǎo)致
不可測量。因此我們將其視為模型的一個(gè)自由參數(shù)(free parameters),這意味著我們可以自由地選擇它來擬合數(shù)據(jù)。
17.3 數(shù)據(jù)
為了開發(fā)和測試模型,我們我使用了Pacini和Bergman2的數(shù)據(jù)。這個(gè)數(shù)據(jù)集可以在這本書的存儲庫中的一個(gè)文件中找到,我們可以將其讀取到一個(gè)數(shù)據(jù)框(DataFrame)中:
data = pd.read_csv('data/glucose_insulin.csv',
index_col='time')
數(shù)據(jù)由兩列組成:glucose是血糖濃度,單位為mg/dL;insulin是血液中胰島素濃度,單位為μU/mL(一個(gè)醫(yī)學(xué)單位,其中U,是上下文約定的量)。其中索引index為時(shí)間,單位是時(shí)間。

圖17.1:用FSIGT測量到的葡萄糖和胰島素濃度
圖17.1顯示一個(gè)具有正常的胰島素產(chǎn)生和敏感性的受試者其葡萄糖和胰島素濃度在182分鐘內(nèi)的變化。
17.4 插值
在我們準(zhǔn)備實(shí)施這個(gè)模型之前,我們還需要解決一個(gè)問題。在微分方程中,是可以在任意時(shí)間
上求值的函數(shù),但是在DataFrame數(shù)據(jù)框中,我們只擁有離散時(shí)間上的測量值,這就需要進(jìn)行插值工作!
ModSim庫提供了一個(gè)名為interpolate的函數(shù),它是SciPy函數(shù)interp1d的包裝器,它將任何類型的序列(Series)作為參數(shù),包括時(shí)間序列(TimeSeries)和掃描序列(SweepSeries),并返回一個(gè)函數(shù)。沒錯(cuò),我說它會返回一個(gè)函數(shù)。
所以我們可以這樣調(diào)用interpolate插值函數(shù):
I = interpolate(data.insulin)
然后我們可以調(diào)用這個(gè)新的函數(shù),I ,像這樣:
I(18)
所得結(jié)果為31.66,這是在t=16和t=19所得的真實(shí)測量值之間進(jìn)行線性插值所得到的結(jié)果,我們還可以將一個(gè)數(shù)組作為參數(shù)傳遞給I:
ts = linrange(t_0, t_end, endpoint=True)
I(ts)
結(jié)果是一組等間隔的t的插值值,如圖17.2所示。

圖17.2:用FSIGT和插值函數(shù)顯示的測量的胰島素濃度
interpolate插值函數(shù)還可以接受一些額外的參數(shù),它將其傳遞給interp1d。您可以在http://modsimpy.com/interp上了解這些選項(xiàng)。
在下一章中,我們將使用插值后的數(shù)據(jù)來模擬葡萄糖-胰島素系統(tǒng)。
在你繼續(xù)之前,你可能需要閱讀這一章的notebook文件chap17.ipynb,然后進(jìn)行練習(xí)。有關(guān)下載和運(yùn)行代碼的說明,請參閱第0.4節(jié)。
參考文獻(xiàn):
1Bergman RN, Ider YZ, Bowden CR, Cobelli C., “Quantitative estimation of insulin sensitivity”, Am J Physiol. 1979 Jun;236(6):E667-77. Abstract at http://modsimpy.com/insulin.
2“MINMOD: A computer program to calculate insulin sensitivity and pancreatic responsivity from the frequently sampled intravenous glucose tolerance test”, Computer Methods and Programs in Biomedicine 23: 113-122, 1986.
本書的中文翻譯由南開大學(xué)醫(yī)學(xué)院智能醫(yī)學(xué)工程專業(yè)2018級、2019級的師生完成,方便后續(xù)學(xué)生學(xué)習(xí)《Python仿真建?!氛n程。翻譯人員(排名不分前后):薛淏源、金鈺、張雯、張瑩睿、趙子雨、李翀、慕振墺、許靖云、李文碩、尹瀛寰、沈紀(jì)辰、迪力木拉、樊旭波、商嘉文、趙旭、連煦、楊永新、樊一諾、劉志鑫、彭子豪、馬碧婷、吳曉玲、常智星、陳俊帆、高勝寒、韓志恒、劉天翔、張藝瀟、劉暢。
整理校訂由劉暢完成,如果您發(fā)現(xiàn)有翻譯不當(dāng)或者錯(cuò)誤,請郵件聯(lián)系changliu@nankai.edu.cn。
本書中文版不用于商業(yè)用途,供大家自由使用。
未經(jīng)允許,請勿轉(zhuǎn)載。