生命体データ同化システムLiSDAS利用手引

 


斎藤正也 吉田亮 長尾大道 中野慎也 樋口知之
統計数理研究所 データ同化研究開発センター
最終更新 平成24年4月27日


目次





1. はじめに

細胞内物質は、異なる階層の生物学的回路を形成し、外部からの信号の受信と生命維持に必要な物質の生成を行っている。形式的には、回路を構成する素過程を明らかにし、これを組み上げることにより細胞の活動の力学的理解に到達できると考えられる。前者は観測、後者はシミュレーション・モデルの構成にあたるが、それぞれ独立に行うには限界がある。細胞内の力学には細胞毎に多様性があり、さらに細胞内外の環境による影響のために、観測で得られるデータには大きな不確定性が含まれる。また、仮にそのような観測から推定された素過程が完全に正しいとしても、物質や反応過程ごとに観測的知識の蓄積の程度はまちまちであり、信頼できる閉じた力学モデルを構成することを困難にしている。

このような背景から、本研究では観測データと力学モデルとをベイズ推定の枠組みで統合する生命体データ同化システムLiSDASを開発した。与えたられた、観測時系列、ネットワークモデルおよびそのモデルパラメータへの大まかな目安(事前分布)に対して、改良されたパラメータへの制約(事後分布)を出力する。必ずしも利用者が良好な事前分布を準備できるとは限らないため、LiSDASでは、観測時系列を分析して事前分布を修正するとともに、ディレクレ混合過程による効率の良いパラメータ・サンプリングを行っている。

2. シミュレーション・モデルの概要


2.1 モデルを記述する方程式

LiSDASが対象とするシミュレーション・モデルを概説する。LiSDASでは、モデルを以下に示すxj (j=1,...,p)にかんする一階常微分方程式の形式で記述できる(説明のために、実装よりも制限のあるかたちで示している)。


ここで、
である。パラメータdkjtckjbkjと初期条件xj(0)が推定の対象となる。以降では推定の対象となるパラメータのすべてをθ、初期条件の全成分をx0と書く。ただし、「推定の対象となるパラメータと初期条件」と毎回書くと煩雑なので、誤解のおそれがない限り、単にパラメータと書く。

右辺第一は、分解による減少でその速度を決めるパラメータdkjを伴う。第二項は実際には物質jがmRNAの場合に有効になる項で、転写によってmRNAの存在量が増加することを記述している。パラメータtckjが転写速度をdkj決めている。mRNAの転写は転写因子と呼ばれるタンパク質が遺伝子に結合することで促進または抑制される。A(j)やR(j)のメンバーがこれに当たり、その効果は方程式上では、ヒル関数
で表現される。pが十分大きいときには、hA = 0 (x < c), 1 (x > c)およびhI = 1 (x < c), 0 (x > c)の階段関数で近似される関数で、A(やR)の要素の存在量が閾値c(やd)を越えると、方程式の左辺にくる物質の増加を促進(または抑制)することがわかる。第三項は、物質jが複合体またはその構成要素の場合に有効になる。複合体の場合、構成要素がパラメータbkj (> 0)で規定される速度で結合して生産されることを表している。構成要素の場合は、bkj < 0であり複合体を合成した分だけ存在量が減少することを表す。ここで、LiSDASは複合体であることを識別しないことに注意されたい。利用者の責任で、複合体jとその要素bとで、bkb = -bkjとなるようにパラメータを設定し、推定の対象とする場合にはこの拘束条件を指定する必要がある。

さて、上記ではタンパク質とmRNAを想定して方程式を紹介したが、実装はより一般の方程式を扱うようにできていて、eq1をオイラー法(1階差分)で近似し、x_i(t-1) (i=1,..,p)の関数の積和形式でx_i(t)を定義するかたちになっている。LiSDASが扱う方程式系を過不足なく書くと次の通りである。
単項式の集合Mモジュール、単項式を構成する因子の集合Eエレメントと呼ぶ。利用者は後述のファイル形式で、MEの中身を定義することで、モデルを定義することになる。ただし、実装上の簡便のために微分方程式を差分化したものよりも広い範囲の写像を表現できるようになってしまっている。整合性を保つには、利用者は以下の点に注意してモデルを定義する必要がある。
のように複合体の増加量とそれぞれの構成要素の減少量が一致しなければならない。そのためには、
を満たすようにモジュールとエレメントを定義しなければならない。

第2項vjは解に不確定性を導入するために付加するもので、この項をシステムノイズと呼ぶ。LiSDASは、システムノイズは平均0、分散j2の正規分布に従うものと仮定している(以降、変数がある確率分布に従うことを示すのに、ここで用いた表記を使う)。利用者はj2を指定することで不確定性をコントロールできる。

2.2 パラメータの推定のしくみ

本小節では、設定に必要な最小限の推定のしくみを紹介する。LiSDASはディレクレ混合過程を使ってパラメータ値の候補を挙げ、その尤度の計算を反復し、最尤パラメータを結果として出力する。ディレクレ混合過程は、これまでに高い尤度を出したパラメータ値の周辺から次の候補を提案する性質を持つため、効果的な探索ができると考えられる。

パラメータの尤度を評価するには、シミュレーション結果と観測データとの関係を記述するモデルが必要である。LiSDASではシミュレーション結果と観測データと差が各時点、各成分で独立な正規分布に従うと仮定している。すなわち、シミュレーション時系列をX ≡ {xj,n|n∈{1,2,…,nmax}, j ∈ {1,2,…,p}}T ⊆ {1,2,…,nmax}を観測データが得られる時点たち、J ⊆ {1,2,…,p}を同じく成分たち、yj,nxj,nに対応する観測データとすると全時点・全成分の観測データ(以下、観測時系列と呼ぶ)Y ≡ {yj,n| n T, j J}は確率分布
に従うと仮定する。分散σj2は利用者が設定し、シミュレーションと観測との誤差をどの程度許容するかをコントロールする。
パラメータ(x0,θ)の尤度は、式(4)に(x0,θ)のもとでシミュレーションを実行するとXが得られる確率p(X|x0,θ)を掛けてXで積分すると得られる。
実際にはこの積分はモンテカルロ積分で近似した
で尤度を計算している。パスの個数Mは、ディレクレ分布の特性により計算の進行とともに高い尤度を与えるパラメータほど大きくなる。

3. 設定ファイル

LiSDASは以下の5つのファイル
  • suffix.set: 1行目に任意に設定するモデル名を記述する。2行目以降は無視される。以下、書かれた内容をmodelで参照する。
  • model.mdl: シミュレーションモデル記述ファイル
  • model.dat: 観測時系列記述ファイル
  • RAND.set: 乱数設定ファイル
  • procedure.set: アルゴリズム設定ファイル
を入力としてパラメータ探索を行い、
  • model.emdl: 改良されたシミュレーションモデル記述ファイル(形式はmodel.mdlと同じ)
を出力する。suffix.setを除くファイルの書式を以下の小節で示す。ただし、ファイルの書式を記述には、以下の記号を用いる。
  • タブ
  • 改行(LF)
  • 【…】 実際のファイルでは具体的な文字列に置き換えられるもの。
  • 《…》 省略可能な部分
  • 「…」 (ファイル上ではなく)書式に対するコメント


3.1 シミュレーションモデル記述ファイル (model.mdl)


この小節では、シミュレーションモデル記述ファイルの一応の形式的を行う。しかし、はじめてモデルを作成するときは同梱のサンプルファイル(circadian02.mdl)またはこれに注釈をつけた
Excelファイルを見ながら作成したほうがはやいだろう。

モデル記述ファイルは12のセクションからなるタブ区切りファイルであり、それぞれのセクションは、
<begin:【セクション名】>
・・・ 本体 ・・・
<end:【セクション名】>
というかたちをしている。それぞれのセクションは順不同で出現してよい。テキストエディタで編集できないことはないが、Excelなどの表計算ソフトで編集し、タブ区切りファイルとして保存することを推奨する。

改行コードに関する注意:
OSによってテキストファイルでの改行コードには差異があり、「京」が採用しているLinuxではLF(\nあるいは0x0A)である。「京」のFortranのREAD文は改行コードに寛容でないので、例えば以下のようなコマンドをログインノード上で実行し、LFであることを保証することを推奨する。
nkf -Lu --overwrite 【対象ファイル】


3.1.1 モデル名指定

【セクション名】:= Model_Reference

省略可能なセクションである。ただし、定義する場合は中身は1行でなければならない。
モデルの管理などのために任意の文字列を設定する。

3.1.2 モデルへの注釈

【セクション名】:= Model_Descriptions

省略可能なセクションである。行数は任意である。モデルに対する説明文などを書くのに利用する。

3.1.3 状態変数の定義

【セクション名】:= List_Species

常微分方程式の独立変数(状態変数)を列挙する。各行は、
【番号】【物質名】《【コメント1】《【コメント2】《…》》》
となっていなければならない。ここで、【番号】は1以上の連番、【物質名】は英数字またはアンダースコアの並びでなければならない。


3.1.4 積分のタイムステップ

【セクション名】:= Time_Interval

1行からなり、書式は以下の通り。
【数値】


3.1.5 シミュレーションのステップ数

【セクション名】:= Time_Simulation

2行からなり、書式は以下の通り。
start 1
end【終了時刻】
【終了時刻】は2以上の整数である。

3.1.6 エレメントの定義

【セクション名】:= List_Reaction_Elements

1行目は2行目以降の各要素(列)の意味を表す文字列である。形式は、
【コメント1】【コメント2】…【コメント11】

である。計算には使用しないが、探索の結果を出力するモデル記述ファイルでは、これをそのまま使う。
2行目以降は、各行で(c,p,e) ∈ ∪mE(m)の要素を定義する。以降に出現する記号の意味は、式(eq3)とその周辺の文章を参照のこと。形式は、
【番号】【生成物番号】【生成物名】【Φの種別番号 k【反応物名】
【反応物番号 e【しきい値 c【べき p 0 0
ここで、【番号】は要素に一意に付す番号である。後で、モジュールの定義、参照対象パラメータの指定に使われる。【生成物番号】は式(eq3)において、xjの添え字j。【生成物名】は対応する物質の名称を記述する。生成物との対応は、モジュールを経由して記述されるので、ここでの指定は無視される。【Φの種別番号k】は k ∈ {1,2,18,19}を取る。最後の2つの0は将来の拡張のためのプレースホルダである。

3.1.7 モジュールの定義

【セクション名】:= List_Reaction_Modules


1行目は2行目以降の各要素(列)の意味を表す文字列である。形式は、
【コメント1】【コメント2】…【コメント11】
である。計算には使用しないが、探索の結果を出力するモデル記述ファイルでは、これをそのまま使う。

2行目以降は、各行で (k,m) ∈ ∪j M(j) の要素を定義する。モジュールに結びつけられた係数kとモジュール(単項子)を構成するエレメント(因子)を列挙する。記号の意味は、式(eq3)とその周辺の文章を参照のこと。形式は、
【番号m【生成物名】【生成物番号j【反応過程名】【反応物名】
【係数|k|】【符号sgn(k)】【エレメント数#E(m)】
【エレメント1】【エレメント#E(m)】

である。

3.1.8 エレメント内の推定対象パラメータの指定

【セクション名】:= List_ParametersInElements


推定対象とするパラメータを持つエレメントの番号およびパラメータの平均と分散を指定する。1行目が定義要素名、2行目以降が定義となっており、要素数は11である。LiSDASはこの平均・分散を持つ正規分布からパラメータ値の候補をサンプリングする。推定にはディレクレ混合過程を用いている。アルゴリズムの詳細は、4節で解説する。現在の実装では、ヒル関数(Φ1819)が持つパラメータのみが可変で、他は1に固定する必要があるか意味を持たない。そのため、書式はヒル関数を前提にしている。
【番号】【生成物名】【Φの種別番号 k【反応物番号 e【パラメータ数】
【埋め草1】【埋め草2】
【パラメータc・平均】【パラメータp・平均】
【パラメータc・分散】【パラメータp・分散】

3.1.9 初期条件の指定

【セクション名】:= List_ParametersInModules

セクションList_Speciesで定義した状態変数の初期値を設定する。初期値はすべて推定の対象であり、エレメント内の推定対象パラメータの指定と同様に平均値と分散を指定する。書式は以下の通り。
【番号】【生成物名】【Φの種別番号 k【反応物番号 e【パラメータ数】
【埋め草1】【埋め草2】
【パラメータc・平均】【パラメータp・平均】
【パラメータc・分散】【パラメータp・分散】


3.1.10 モジュール内の推定対象パラメータの指定

【セクション名】:= List_ParametersInModules


推定対象とするパラメータを持つモジュールの番号およびパラメータの平均と分散を指定する。1行目が定義要素名、2行目以降が定義となっており、要素数は5である。モジュールに付随するパラメータはkのみであって、2行目以降の書式は以下の通り。
【番号】【パラメータk・平均】【パラメータk・分散】【埋め草】【コメント】


3.1.11 観測ノイズの分散の指定

【セクション名】:= Variance_Noise_Observed


式(eq4)の分散σj2を指定する。1行目が定義要素名、2行目以降が定義となっており、要素数は5である。2行目以降の書式は以下の通り。
【パラメータk・平均】【番号】【パラメータk・分散】【埋め草】【コメント】


3.1.12 システムノイズの分散の指定

【セクション名】:= Variance_Noise_System


式(eq3)の分散j2を指定する。1行目が定義要素名、2行目以降が定義となっており、要素数は5である。2行目以降の書式は以下の通り。
-->【パラメータk・平均】【番号】【パラメータk・分散】【埋め草】【コメント】

アルゴリズム設定ファイルで【●includeNoise】= 0とした場合は、ここでの設定は無視される。

3.2 観測時系列記述ファイル (model.dat)


観測データの時系列を定義する。3つのセクションから構成され、セクションの区切りは、モデル記述ファイルと同じである。

3.2.1 観測可能量の指定 (Jの定義)

【セクション名】:= obs_var

状態ベクトルの成分の内、観測可能な成分を各行で定義する。各行の形式は、
【物質名】【成分番号】
であり、【成分番号】はモデル定義ファイルのList_Speciesセクションで定義したものでなければならない。


3.2.2 観測時刻の指定 (Tの定義)

【セクション名】:= obs_time

観測データが得られる時点を各行で定義する。各行の形式は、
【時点】
である。【時点】はモデル定義ファイルのTime_Simulationセクションで指定した開始時点以上、終了時点以下でなければならない。


3.2.3 観測データの定義 ({yj,n}の定義)

【セクション名】:= data

{y_{j,n}を行列形式で与える。行番号が成分番号j、列番号が時点nに対応する。各行の形式は、
【物質名】【成分番号】【時点1の値】【時点#Tの値】
である。


3.3 乱数設定ファイル (RAND.set)


つぎの2行からなる。
【乱数のシード】【コメント】
【サンプル中心点数N【コメント】

LiSDASはサンプリングの中心点をN回サンプリングし(ノード当たり、N/【使用ノード数】回)、さらにその各々のまわりでnum_Particle_DPM個サンプリングする。したがって、1回の実行で試されるパラメータの場合の数はN ×【num_Particle_DPM】個となる。ここで、num_Particle_DPMは次のアルゴリズム設定ファイルで設定する。また、使用ノード数はジョブスクリプト(
4.2節を見よ)内で指定する。

3.4 アルゴリズム設定ファイル (procedure.set)


パラメータ探索方法に関係する諸パラメータを定義する。利用者は基本的に付属するファイルを変更する必要はない。ただし、いくつかの項目は利用者による変更が有益であるかもしれない。以下に示す書式ではこのような項目に●を付けた。パラメータの意味を「…」に示すが、先頭に{0,1}を付したものは、0または1を取り、示した設定が0のとき有効、1のとき無効になる。
【コメント】

【●iprint_process】【コメント】
「{0,1} 設定値は無視される。」
【●iDoSaveSimul】【コメント】
「{0,1} n番目に優良なパラメータでのシミュレーション結果を save_simulation_n.log に保存する。」
【●numDoSaveSimul】【コメント】
「【iDoSaveSimul】= 1のとき有効で、保存するシミュレーションの個数を指定する。」
【○iDoSaveCovar】 【コメント】
「{0,1} 粒子の分散共分散行列を保存する」
【○iDoSaveParticle】 【コメント】
「{0,1} 常に1(有効)にすること。」
【○iDoDPM】【コメント】
「{0,1} 常に1(有効)にすること。」
【●numDoDPM】【コメント】
「保持する優良なサンプリング中心点の個数。」
【○iDoStrSearch】【コメント】
「{0,1} Do the search for circuit structures of the graphical model」
【●includeNoise】【コメント】
「{0,1} シミュレーションにシミュレーションノイズを導入する。ノイズの大きさはモデル記述ファイルのVariance_Noise_Systemセクションの設定に従う。」
【●iDoClock】【コメント】
「{0,1} 実行時間を測定する。」
【○bwkernel】【コメント】
「規定値1500を用いること。」
【○nbw】【コメント】
「規定値100を用いること。」
【○shrinkPara】【コメント】
「規定値0.0001を用いること。」
【○iDoSampleModule】【コメント】
「規定値2を用いること。」
【○iDoSampleElement】【コメント】
「規定値1を用いること。」
【○iDoSampleInits】【コメント】
「規定値2を用いること。」
【●iPrint】【コメント】
「{0,1} 計算過程に関するくどい出力をする。高並列時には大量の出力が出てしまうので、無効にするのが望ましい。」
【○iUseDataPriorInits】【コメント】
「{0,1} 設定値は無視される。」
【○iDoRangeHidden】【コメント】
「{0,1} 観測不可能量について、上限と下限を設定する。」
【○RangeHidden;Upper】【コメント】
「【○iDoRangeHidden】=1のとき有効で、観測不可能量の上限。」
【○RangeHidden;Lower】【コメント】
「【○iDoRangeHidden】=1のとき有効で、観測不可能量の下限。」
【●num_Particle_DPM】【コメント】
「ひとつのサンプリング中心のまわりから一度にサンプリングする粒子数」
【○gamma】【コメント】
「ディレクレ混合過程の中心集中パラメータ」


4. 「京」での実行方法

本節では、パッケージに付属するサンプル・モデルを使って実行方法を説明する。本書をGCアプリケーション配布サイトから直接見ている場合には、先にここからパッケージ一式をダウンロードすること。

4.1 パッケージの確認

ダウンロードしたパッケージを解凍
tar zxf lisdas-【バージョン】.tar.gz
すると、以下のディレクトリ構成のファイル群が現れる。


4.2 コンパイル・実行

各アーキテクチャ用のMakefileを使って実行形式を作成する。「京」の場合は、
chmod 755 frtK.mak
./frt.mak
を実行すると、実行形式 LiSDAS-【バージョン】.exe が得られる。

これを実行するには、ジョブ投入スクリプトを投入するコマンド
pjsub run8.sh
を実行する。このほかジョブ管理コマンドには次のようなものがある。
rscinfoCPUの使用状況
pjstat「自分が投入した」ジョブの一覧
pjsub 【ジョブスクリプト名】ジョブを投入する。
pjdel 【ジョブID】投入したジョブを削除する
詳細については、「京」のジョブ管理システムのマニュアルを参照すること。


run8.shの内容を以下に示す。必要に応じて、使用するノード数と計算時間の上限を変更する。[注意:試験利用期間IVで提供される環境での実行手順を示している。供用開始後はステージング運用となるため、ジョブの投入方法、ジョブスクリプトの仕様は変更になると予想される]
#! /bin/bash -x
# 計算に使用するノード数を指定する。ノード数に依らずRAND.setに指定した粒子数だけ
# パラメータ中心をサンプリングするため、ノード数を大きくするほど実行時間が短縮される。
#PJM --rsc-list "node=8"

# 計算時間(物理時間)の上限を指定する。この時間を超過すると、ジョブは強制終了される。
#PJM --rsc-list "elapse=00:60:00"
#PJM -s
. /work/system/Env_base

# 1ノード当たりのスレッド数を指定する。「京」のCPUは8コアからなるため8を指定する。
export OMP_NUM_THREADS=8

# プロファイルを取るときは次の行のコメントをはずす。
#fpcoll -Srange -pall -Icall,balance -Ihwm -o prof_normal2_8_version3.txt mpiexec lpgparm -s 32MB -d 32MB -h 32MB -t 32MB -p 32MB ./LiSDAS-2-7-mpi.exe

# プログラムを実行する (プロファイルを取るときは次の行をコメントアウトする)。
mpiexec lpgparm -s 32MB -d 32MB -h 32MB -t 32MB -p 32MB ./LiSDAS-2-7-mpi.exe

# ファイルシステムの動機を取る
mpiexec /work/system/bin/msh sync


4.3 実行結果の確認

計算が終了するとカレントディレクトリに改良されたモデルが(同梱しているサンプルでは)circadian.emdlに、対応するシミュレーション結果がsimulation_map.logに、さらに比較のためのオリジナルのモデルでのシミュレーション結果がsimulation_init.logにそれぞれ出力される。


パラメータが改良されたかどうかを確認する一例として、観測時系列と改良前後のシミュレーション時系列をプロットしてみる。plot_simulation.rはそのためのRスクリプトである。
Rscript plot_simulation.r
を実行すると、図(simulation_map)のようなグラフが画面上に表示されるはずである。改良前の結果(灰色線)よりも改良後の結果(青線)の方が、観測データ(赤点)によりよく合致していることが確認できるはずである。



5. 理論背景とアルゴリズム
5.1 状態空間モデル
5.2 Dirichlet過程
5.3 Dirichlet混合過程

参考文献

  • Yoshida R, et al., (2010) Bayesian experts in exploring reaction kinetics of transcription circuits, Bioinformatics, 26(18), i589-595.
  • Yoshida R, et al. (2010) Bayesian learning in sparse graphical factor models via variational mean-field annealing, Journal of Machine Learning Research, 11:1771-1798.
  • Yoshida R, et al. (2008) Bayesian learning of biological pathways on genomic data assimilation, Bioinformatics, 24(22):2592-2601.