NONMEM での確率論的シミュレーション
- NONMEM で stochastic simulation を実施する際に,考えなければならないのは次の四点である.
- データをどう作成するか.
- パラメータをどう発生させるか.
- 多数回の実行をどう自動化するか.
- 多数回の実行結果をどう集計するか.
1. データをどう作成するか
- NONMEM にできるのは,与えられたデータセットに従った計算を行うことだけである.したがって,デザイン(どういう TIME にどういうイベントが発生するか)が異なる複数被験者の計算を行いたいなら,それに応じたデータを事前に用意しておく必要がある.
- したがって,「採血時点をランダムにする試験デザイン」でのシミュレーションを行いたい場合には,NONMEM だけではどうしようもない.NONMEM 内部で TIME をランダムに発生させることは不可能なので.よって,別のプログラム (SAS, S-Plus, Excel Visual BASIC) でデータファイルを発生させておいた上で,そのデータを用いて NONMEM 計算を行う,という手順を踏むことになる.(実は,あるトリックを使えばこの問題はクリアできなくはない.ただし,かなりトリッキーだし,制限もあるのでわざわざこのアプローチを取ることもないだろう)
- なお,同一デザインでよいならば,一人分のデータを用意しておいて,$SIM NSUB=n で多数人数分の計算を実施する,ということは可能である.
2. パラメータをどう発生させるか
- 固定効果と個体間変動分散の推定値を用いて個人のパラメータを発生させ,そのパラメータを用いてシミュレーションしたい,この状況ならば NONMEM の $SIM で簡単に実行できる.発生させたデータに対してまたモデルを当てはめてパラメータ推定値を得たい,という場合であっても NONMEM だけで実行可能である.
- そうではなくて,推定誤差を考慮して,多変量正規分布によってパラメータを発生させたい,という場合.これは S-Plus を使うのがほぼデファクト・スタンダードである,と私は思う.SAS で多変量正規分布にしたがう乱数を発生させるのは結構厄介なので(SAS/IML で行列計算するとか).ただし,個体間変動(および個体内変動)に相関を仮定したい場合には,多変量正規分布でのシミュレーションは正しくない.ウィッシャート分布?を用いて分散共分散行列を発生させる必要がある.
- それよりも,ブートストラップによってパラメータを発生させる方が,ある意味,楽.
3. 多数回の実行をどう自動化するか
- NONMEM の $SIM NSUB=n1 の機能で自動化できる場合もある.あるいは,$SUPER NITER=n2 が使える場合もあるかもしれない($SUPER はいろいろ厄介な制限があるので,私はほとんど使わない).
- しかし,あるひとつのコントロールファイルではシミュレーションを 1 回だけ行うようにしておいて,その代わり,そのコントロールファイルの run を多数回行う,というアプローチを取るほうが,結局のところわかりやすかったりする.データが毎回異なっていたり,パラメータの値が毎回変化するような場合にはこのアプローチを取らざるを得ない.
- NONMEM の自動実行自体は,いろいろな方法で実現可能である.SAS あるいは S-Plus から NONMEM を起動することも別に難しくない.Excel の Visual BASIC からでも可能だし,もちろん,Access VBA からでもできるだろう.Perl を使う方法もある.なんだっていい.
4. 多数回の実行結果をどう集計するか
- もちろん,手作業では不可能である.
- 標準のアウトプットを何らかのプログラムに取り込んで必要な情報を抽出する方法をとってもいいし,あるいは $PK INFN= の機能を利用して,パラメータ推定値だけ別ファイルに書き出しておいてもいい.
- 多数回の実行結果を要約する際には,SAS なり S-Plus なり,何らかの統計ソフトを用いることが多いであろう.その際には,その統計ソフトで結果を取り込むようなプログラムを書いておくのが一番である.もちろん,Excel でも可能だし,Perl で取り込んでおいて,csv ファイルに書き出す,という方法でもよい.
- なお,INFN の機能は $SUB で使えるものなので,ADVAN を使わない場合,すなわち $PRED にモデルを書く場合は INFN 機能は利用できない.しかし,同等のこと(すなわち,パラメータ推定値を別ファイルに書き出すこと)は $PRED の中でも実現可能である.(→$PREDでINFN)