12. 複数データセットを統合してカーブフィッティング

藤宮

『はじめに』

 様々な由来のデータをかき集めてきたときに、それらを統合してカーブフィッティングをしたいときがあります。シンプルな関数、たとえば直線回帰や、指数関数、多項式回帰、ロジスティック関数ぐらいまででしたら、一般の回帰分析の方法ですぐに可能です。それら以外のもう少し複雑な関数形状にフィッティングしたい場合は、どのようにすればよいでしょう。特に複数のデータセットで一部x軸の値が一致しているようなデータをたくさん含んでしまっているような場合はすこし悩んでしまいます。x軸とy軸の値が1対1のデータセットであれば非線形最小二乗法などの方法でフィッティングすることが可能です。しかし、同じx軸の値に、複数のy軸データがあるようなデータセットで、すべてを活かしてパラメータを決めたい場合、簡単に従来のカーブフィッティングのツールを使えないことがあります。

 

『BUGSソフトの凄さと手軽さ』

 まず図1をご覧ください。青の○と赤の△がプロットしてあります。それぞれ2つのデータソースからそれぞれ集められたデータです。データの間隔も完全には一致しておらず、重なりのある部分とそうでない部分などもあります。こういったデータを全部考慮して、カーブフィッティングをしようとすると悩んでしまいます。部分的に平均でも取ろうか、それともまじめに全体の最尤推定するスクリプトをつくるか、といった感じで、、。

tech012_01

図1 2種類の由来を持つデータとカーブフィッティング

 

 そんなときに力を発揮するのがBUGSソフトです。上図のカーブフィッティングでは、2種類のデータソースのデータをすべて使ってカーブフィッティングしてあります。青の破線はガンマ分布の曲線で、赤の破線はロジスティック関数で、それぞれフィッティングした結果です。どちらも青の○のデータと赤の△のデータをすべて利用して、それぞれフィッティングしてあります。BUGSソフトのすごいところは、ただ単純に青のデータセットの後ろに赤のデータセットを加えて処理しただけだという点です。ここでは、JAGSを使用しましたがWinBUGSやOpenBUGSなどMCMCを実行できるソフトであれば同様にフィッティングすることができます。
x軸の値とy軸の値の関数関係をBUGSのモデルとして定義すれば、それぞれの点のx, yのデータペアは重要ですが、大域的なパラメータですから、それぞれのペアを与える順番は推定に全く関係しません。同じx軸のところで重複しているデータもそのまま、とにかく配列の後ろに順に並べてソフトに渡します。同じx軸に重複した値があれば、与えられた数だけ確からしさが上がり(もちろん同じx軸の値で、y軸のバラツキが大きければ、それなりに推定値の標準偏差σは大きくなる)ように処理をしてくれます。それらの影響を加味した尤もらしいパラメータが推定結果として得られます。
順番も気にせず、とにかくデータセットをつくり、BUGSソフトに与えるだけで上記のように綺麗な(?)線を描くためのパラメータ推定をしてくれるのは大変便利です(ただ、使いこなすには、プログラミングの知識や、BUGSのモデル構築、確率統計の基礎知識が必要です)。
なお、念のためですが、今回の話題は大域的なパラメータでしたので、データの順番は関係しませんでしたが、そうではなく、局所的なスムージング(例えば条件付き自己回帰モデル)のような場合は、隣接関係を正しく与えるという意味でデータの順番などが重要となります。