Rでシステムバイオロジー
antiplastics@Kashiwa.R#9
自己紹介
露﨑弘毅(つゆざき こうき)
東京理科大学大学院 薬学研究科 D2
専門: バイオインフォマティクス、
システムバイオロジー
チャリで20分
徒歩→電車→バスで30分
@antiplastics
デスク周り
システムバイオロジーについて
システムバイオロジーとは
この定義だと、バイオインフォマティクスの”オミックス”とか“ネットワーク解析”とか
も入ってしまうけど(実際に境界は曖昧だけど)、
ここでは数理モデルを構築して、シミュレーションするタイプのものに限定する
システム生物学(システムせいぶつがく、システムバイオロジー、システムズバイオ
ロジー、英語: systems biology)は、システム工学の考え方や解析手法を生物学に
導入し、生命現象をシステムとして理解することを目的とする学問分野。
(by Wikipedia)
ではなく
Protein
A
生命現象 生命現象
Protein
A
Enzyme
B
Sigma
B
geneA
+
-
システム
+
-
モデルの例
リアルタイムPCR
Ct値
Log(RNAコピー数)
サンプルコピー数
106
105
104
103
102
101
酵素活性測定
(ミカエリス・メンテンモデル)
1
𝑉
1
[𝑆]
−
1
𝑲𝒎
1
𝑽𝒎𝒂𝒙
𝑲𝒎
𝑽𝒎𝒂𝒙
これらも言うならば“線形モデル”
ただし、現象がいつも線形であるとは限らない
サンプルのCt値
モデルの例
時間
CFU
ロジスティックモデル
例: 細菌の増殖曲線
時間
振れ幅
減衰振動
例:重りをつけたバネの振動
時間
人口
指数モデル
例:人口爆発
反応拡散モデル
例: チューリングパターン
(by Wikipedia)
時間
mRNA
オシレーション(振動)
例:サーカディアンクロック
既存の方法論
今日はこれだけ・常微分方程式モデル(ODE)
・偏微分方程式モデル(PDE)
・確率微分方程式モデル
・代謝フラックス解析
・論理モデル
・ハイブリッドモデル
…
既存のフレームワーク
今日はRで
Matlab (Octave)
Mathematica (Maxima)
C
Java
Python
R
…
CUI
GUI CellDesigner
Cell Illustrator
E-cell
…
(むちゃくちゃいっぱいある)
お絵かきツール
黒い画面でカタカタ
> R CMD BATCH program.R
1 12
2 21
3 43
…
LibSBMLSim
http://fun.bio.keio.ac.jp/software/libsbmlsim/
RでODEモデル構築
Step.1 対象とする現象を決める
細菌のQuorum Sensing
http://www.ted.com/talks/
bonnie_bassler_on_how_bact
eria_communicate.html
少数だと
何もしない
ある個体数(Quorum)
まで増えると
蛍光物質を産生!!
Step.1 対象とする現象を決める
緑膿菌のQuorum Sensing
少数だと
何もしない
ある個体数(Quorum)
まで増えると
毒性因子やバイオフィルムを産生!!
:毒性因子
→さまざまな疾患
:バイオフィルム
→抗生物質が効かなくなる
Step.1 対象とする現象を決める
QS System
I gene R gene
I protein
(Enzyme)
AutoInducer
R protein
R / I Complex
+
Step.2 モデル化
ここではMagnusモデル(Magnus G. Fagerlind, et. .al., 2003)を利用
21111
1
kCkAR
dt
dC

42322
2
kCkAR
dt
dC

63512
3
kCkAR
dt
dC

  10
11
11
1121111
1
R
Ck
CV
RbkCkAR
dt
dR
R
R
R 


  20
12
12
226351242322
2
R
Ck
CV
RbkCkARkCkAR
dt
dR
R
R
R 


  0
1
1
S
Ck
CV
Sb
dt
dS
s
s
s 


 11110
1
1
11
116351221111
1
1
AAdA
K
S
K
CV
AbkCkARkCkAR
dt
dA
EX
S
A
A
A 








 
 22220
22
22
2242322
2
AAdA
CK
CV
AbkCkAR
dt
dA
EX
A
A
A 


LasR
Cell membrane
LasR
RhlR
RhlR
RhlI
RsaL
LasI
lasR
lasI
rsaL
rhlI
Virulence
genes
rhlR
C12 C12
C4C4
-
+
+
+
+
+
+
+
8物質
23反応
31パラメーター
Step.2 モデル化
ポイント1
素反応は入ってきたらプラス、出ていったらマイナスとすればいいだけ
物質A 物質B 物質C
𝑑𝐴
dt
= − 𝑘1[𝐴]
𝑑𝐵
dt
= 𝑘1 𝐴 − 𝑘2[𝐵]
𝑑𝐶
dt
= 𝑘2[𝐵]
k1 k2
物質Aの濃度反応(速度)定数、
パラメータ
Step.2 モデル化
ポイント2
転写制御は、ミカエリス・メンテン式でモデル化する
𝑑𝐶
𝑑𝑡
=
𝑉𝑚𝑎𝑥 𝐶
Km+𝐶
Enzyme Gene
TF-C
Product Transcriptional
product
Gene
Substrate
C
EnzymeSubstrate
C
𝑑𝐶
𝑑𝑡
=
𝑉𝑚𝑎𝑥 𝐶
Km+𝐶
TF-C
𝑉𝑚𝑎𝑥 𝑉𝑚𝑎𝑥
𝐾𝑚
𝐾𝑚
Step.2 モデル化
ポイント3
膜外の物質の移動は、Fickの拡散方程式でモデル化する
Substance
X
Substance
X
細胞内 細胞外
𝑑𝑋
𝑑𝑡
= d(𝑋𝑖𝑛 − 𝑋𝑜𝑢𝑡)
𝑑
補足:微分方程式を解く
方程式を解く
微分方程式を解く
解く
(𝐴, 𝐵) = (−1, 4)
𝐴 + 𝐵 = 3
𝐴 + 2𝐵 = 7
目的は変数
(A, Bの値が欲しい)
解く
𝑥 = 𝐶 𝑒 𝑡
dx
𝑑𝑡
= 𝑥
目的は関数
(x=f(t)が欲しい)
補足:解析的に解く vs 数値的に解く
微分方程式を解く (解析的に解く)
言うならば、「微分方程式入門」みたいな数学の本は、これまで解析的に解け
る事が証明できてる式のカタログみたいなもの
ただし、システムバイオロジーの分野では、解析的に解けないモデルが殆ど
式変形
(ラプラス変換、フーリエ変換等
数学のテクニックを駆使)
−
dx
𝑑𝑡
= 𝑘 𝑎 𝑥0 − 𝑘𝑥
𝑥 =
𝑘 𝑎 𝐹 𝑥0
𝑘 𝑎 − 𝑘
(𝑒−𝑘𝑡
− 𝑒−𝑘 𝑎 𝑡
)
補足:解析的に解く vs 数値的に解く
微分方程式を解く (数値的に解く = 数値計算、シミュレーション)
オイラー法(次頁)等
近似アルゴリズムを利用
タイムステップ( ∆𝑡 )毎に物質の濃度を少しづつ算出
𝑑𝑥
𝑑𝑡
= −𝑝𝑥 + 𝑝𝑦,
𝑑𝑦
𝑑𝑡
= −𝑥𝑧 + 𝑟𝑥 − 𝑦,
𝑑𝑧
𝑑𝑡
= 𝑥𝑦 − 𝑏𝑧
𝑥 𝑡+∆𝑡 = 𝑥 𝑡 + −𝑝𝑥 𝑡 + 𝑝𝑦𝑡 ×∆𝑡,
𝑦𝑡+∆𝑡 = 𝑦𝑡 + −𝑥 𝑡 𝑧𝑡 + 𝑟𝑥 𝑡 − 𝑦𝑡 ×∆𝑡,
𝑧𝑡+∆𝑡 = 𝑧𝑡 + 𝑥 𝑡 𝑦𝑡 + 𝑏𝑧𝑡 ×∆𝑡
time x y z
t = 0 1 1 1
t = 0.001 1.004 0.997 1.052
t = 0.002 1.008 0.980 1.204
…
漸化式
初期値を設定
補足:オイラー法
𝑑𝑥
𝑑𝑡
= lim
∆𝑡→0
𝑓 𝑡 + ∆𝑡 − 𝑓(𝑡)
∆𝑡
計算機は極限という概
念が理解できない
∆𝑡を実際の小さい数字として使う
𝑑𝑥
𝑑𝑡
≈
𝑓 𝑡 + ∆𝑡 − 𝑓(𝑡)
∆𝑡
他にも、ルンゲクッタ法等、
数値計算手法は様々
𝑓 𝑡 + ∆𝑡 = 𝑓 𝑡 +
𝑑𝑥
𝑑𝑡
× ∆𝑡
例:
𝑑𝑥
𝑑𝑡
= 𝑡 + 2 の場合
f(t)は未知だが各ステップ毎に値はわかる
∆𝑡 = 0.01とする
Xの初期値は0とする
・t = 0
x = 1
・t = 0.01
x = 1 + ( 0 + 2 ) × 0.01
= 1.02
・t = 0.02
x = 1.02 + ( 0.01 + 2) × 0.01
= 1.0401
… これを数百~数万回繰り返す
Step.3 実装(R)
# ライブラリ読み込み
library(deSolve)
# ODEモデルを定義
QS <- function(t, x, p) {
# パラメーターを定義
k1 <- p["k1"]; k2 <- p["k2"]; k3 <- p["k3"]; k4 <- p["k4"]; k5 <- p["k5"]
k6 <- p["k6"]; bR1 <- p["bR1"]; bR2 <- p["bR2"]; bS <- p["bS"]
bA1 <- p["bA1"]; bA2 <- p["bA2"]; R10 <- p["R10"]; R20 <- p["R20"]
S0 <- p["S0"]; A10 <- p["A10"]; A20 <- p["A20"]; VR1 <- p["VR1"]
VR2 <- p["VR2"]; VS <- p["VS"]; VA1 <- p["VA1"]; VA2 <- p["VA2"]
KR1 <- p["KR1"]; KR2 <- p["KR2"]; KS <- p["KS"]; KA1 <- p["KA1"]
KA2 <- p["KA2"]; KS1 <- p["KS1"]; d1 <- p["d1"]; d2 <- p["d2"]
A1ex <- p["A1ex"]; A2ex <- p["A2ex"]
##### (次頁に続く)#####
http://journal.r-project.org/archive/2010-2/RJournal_2010-2_Soetaert~et~al.pdf
Rで微分方程式を解くパッケージ
Step.3 実装(R)
#####(前頁の続き)#####
# ODEを定義
F1 <- - k3 * x[1] * x[4] + k2 * x[6] - bR1 * x[1] + VR1 * x[6] / (KR1 + x[6]) + R10
F2 <- - k3 * x[2] * x[5] + k4 * x[7] - k5 * x[2] * x[4] + k6 * x[8] - bR2 * x[2] +
VR2 * x[6] / (KR2 + x[6]) + R20
F3 <- - k3 * x[2] * x[5] + k4 * x[7] - bR2 * x[2] + VR2 * x[6] / (KR2 + x[6]) + R20
F4 <- - k1 * x[1] * x[4] + k2 * x[6] - k5 * x[2] * x[5] + k6 * x[8] - bA1 * x[4] +
VA1 * x[6] / (x[6] + KA1 * (1 + (x[3] / KS1))) + A10 + d1 * (A1ex - x[4])
F5 <- - k3 * x[2] * x[5] + k4 * x[7] - bA2 * x[5] + VA2 * x[7] / (KA2 + x[7]) + A20
+ d2 * (A2ex - x[5])
F6 <- k1 * x[1] * x[4] - k2 * x[6]
F7 <- k3 * x[2] * x[5] - k4 * x[7]
F8 <- k5 * x[2] * x[4] - k6 * x[8]
list(c(F1, F2, F3, F4, F5, F6, F7, F8))
}
Step.4 計算(ODEを解く)
# パラメーターの値を設定
params <- c(
k1=0.0027, k2=0.00486, k3=0.0027, k4=0.00486, k5=0.0027, k6=0.00486,
bR1=0.000021, bR2=0.000021, bS=0.000021, bA1=0.000052, bA2=0.000052,
R10=0.000246, R20=0.000244, S0=0.000733, A10=0.000282, A20=0.000023,
VR1=0.13, VR2=0.13, VS=0.13, VA1=0.13, VA2=0.13,
KR1=5, KR2=5, KS=5, KA1=5, KA2=5, KS1=5,
d1=0.2, d2=0.4, A1ex=0, A2ex=0
)
# 初期値を設定
init <- c(0, 0, 0, 0, 0, 0, 0, 0)
# 計算ステップ(0.0001刻みで、0→50まで計算、50000ステップ)
times <- seq(0, 50, by=0.0001)
# ODEを解く
result <- ode(init, times, QS, params, method="euler")
deSolveは他にもODEを数値的に解く関数を多数用意
http://cran.r-project.org/web/packages/deSolve/vignettes/deSolve.pdf
Step.5 可視化
# プロット
plot(result)
Step.6 モデルの検証
現実と挙動が同じ
時間
物質濃度
実測値と同じ
時間
物質濃度
Step.7 考察
分岐解析
どの濃度で低定常状態から
高定常状態に移行するか
感度解析(ロバスト解析)
どの経路が脆弱か
(または頑健であるか)
時間
鍵となる物質X
k
物質濃度
∆𝑋
∆𝑘
どのくらいの物質濃度で
QSが起きるのか
どの経路を阻害すれば効
果的にQSを抑えられるか
発展的な話
実際的な問題
・システムのどこまでをモデル化するか(簡潔 vs 網羅)
・計算ステップをどうするか(計算の精度に直結、桁落ちや計算時間との兼ね合い)
・何ステップまで計算するか(長いほど誤差は蓄積される)
・初期値、パラメーターをどうするか
(実測値が無い場合、パラメーターを推定するか、適当な値にしておくか)
・モデルが妥当なものであるか(現実の現象を再現できているか)
・モデリング後の考察(そのモデルで何を予測するか)
・生物学的な解釈
近い学問領域
システムバイオロジー
最適化問題、数値計算
数学的なエリア 物理学的なエリア
力学系、非線形、カオス、
複雑系
生物学的なエリア
モデル化、パラメーター
計測、検証実験、個体
群生態学、薬物動態学
工学的なエリア
システム工学、制御工学、
電気回路
色々な分野の方法論が取り入れられている
(“シミュレーション”等、意味が広いキーワードで勉強すると良いかも)

Rでシステムバイオロジー