5. 時系列データ処理の勘所:その2

不定期な測定データの補間

榎本 Ph.D

はじめに

前回に引き続き、時系列データの処理に関する話題です。

例えば、病院に通院する患者さんの検査データは、土日が間に入ってしまったり、個人的な都合などにより来院が遅れてしまったりといったことがあり、どうしても不定期な測定データになりがちです。ノイズを移動平均などでなめらかにフィルタリングしようとしても、十分な測定点がなければ適用できません。

医療データの場合、何らかのイベント(投薬開始や病変など)の発生時点で揃えて、特定の日数が経過した時点ごとの、患者さんのデータを処理したい場合などには、ちょうどその日に測定したデータがないため、近くの検査データで代用するといったことが発生します。直線回帰や指数関数で表されることが分かっている場合にはそのモデル関数でフィッティングして、残差が最小になるようにパラメーターを求めれば良いので問題ありません。

しかし、そのようなシンプルな関数で必ずしもフィッティングできないこともあります。そういった場合になめらかな曲線を想定して推定し、内挿または補間出来れば便利です。今回はそういった話題です。

データをなめらかに補間する前に

データをなめらかに結ぶ前に、よく検討しなければならないことは「本当になめらかに結んで良いか?」を考えることです。

前回の話題にあったように例えば血糖値の動きであれば、食事のたびに上昇下降を繰り返します。そういった日内変動を含むような細かい動きまで厳密に再現しようとしたら、原信号の持っている周波数成分の2倍の周期(ナイキストレート)で測定しなければ再現できません。想像するに、おそらく食事の時間間隔の少なくとも1/5~1/6の時間間隔で採血しなければならないように思います(赤外線方式であれば、血を取られるよりは楽かもしれませんが、、、、)。

毎年1回しか検査していない健診データでは、このナイキストレートを満足できていないのですが、必ず「空腹時」という状態をつくることで、日内変動(食事間の変動)の影響を消し去っています。年にわずか1回しか計測されないデータであっても、毎年のデータをなめらかに結んで良いという根拠が与えられているわけです。

なめらかに補間する方法

複雑な形状のデータをなめらかに補間する方法としては、(1)スプライン関数などでなめらかに結ぶ方法、(2)最近注目されているベイズ推定を用いた方法などがあります。

まず、スプライン関数では、測定点を通るようにすることも、測定点を通らず全体の間を通りながらなめらかに結ぶこともできます。一方、二つ目のベイズ推定では、事前分布として、測定波形の持っている緩やかな動きをモデル化します。さらにそのモデルからの時系列データに計測ノイズが重畳されて得られたものが計測データであると考え、得られたデータの条件付きで事後分布を求め、曲線を推定します。

スプライン関数では、関数に縛られるイメージがありますが、得られる曲線の性質としては両者ともほぼ同じ次元の滑らかさです。ベイズ推定の良い点は、事前分布で与えられている測定波形の持っている動きの分と計測ノイズのランダムな動きの標準偏差を分けて推定してくれる点です。この成分が正しいという意味ではありません。

しかし、複数のデータを対象にしてこれらを評価していると、同じ条件で得られた多数のデータを処理したときに、それぞれ得られている標準偏差やその他のパラメーターの値から、ちょっと変だな、といった感じが把握できます。経験的に知っている測定のバラツキ程度とも照らし合わせながら妥当性を見極めることもできます。

図1に作成したデータに条件付き自己回帰モデルを適用した例を示します。○で示された11点が測定点です。飛び飛びでかつ間隔も不定期です。この時系列データの事前分布として、なめらかな曲線であるという制約条件(2次のランダムウォークモデル)を与え、約101点で細かく補間推定をしています。ハイパーパラメーターの事前分布の与え方で、どの程度追従させるか意図的に変えることもできますが、とりあえずはそのようなことをせず、無条件情報分布で最も尤もらしい推定をさせました。

tech005_01

図1 不定期な測定データを用いてなめらかに補間した例

モデルの想定の仕方によって得られる結果は変わってきますので、詳しい人にその妥当性の意見はいただくようにしたほうが良いかもしれません。事前分布としてどのようなモデルを想定するかによって、得られる結果が変わってくるため、そのあたりも十分に検討する必要があります。