gnuplotでガウシアン・フィッティング(重み付き)

以前やったこの方法だと、各データ点の重みがすべてデフォルトの値である1になってしまうということを知りました。そこで、gnuplotのマニュアルをついに手にすることに。日本語訳があって、本当に助かりました。

参考:gnuplot のページ (Takeno Lab)

書式:
       fit {[xrange] {[yrange]}} <function> '<datafile>'
           {datafile-modifiers}
           via '<parameter file>' | <var1>{,<var2>,...}

`fit` コマンドはユーザ定義関数を (x,y) または (x,y,z) の形式のデータ点の集合への当てはめを可能にします。それにはMarquardt-Levenberg 法による非線形最小自乗法 (NLLS) の実装が用いられます。関数内部に現われるユーザ定義変数はいずれも当てはめのパラメータとして使うことができます。ただ、その関数の返り値は実数である必要があります。

当てはめる 1 変数関数 y=f(x) へのデフォルトのデータの書式は {x:}y かx:y:s で、これらはデータファイルへの `using` 指定子で変更できます。この 3 番目の項目 (列番号、または数式) が与えられた場合は、それは対応する y の値の標準偏差として解釈され、それはそのデータへの重み (=1/s**2)を計算するのに使われます。そうでなければ、全てのデータは同じ重み (1)で計算されます。`using` オプションを全く指定しなかった場合、3 列目のデータがあった場合でもデータから y の偏差は読まれませんので、その場合は重み 1 になります。

gnuplot > f(x) = a*exp(-(x-b)**2/(2*c**2))
gnuplot > fit [x_1 : x_2] f(x) "hogehoge.data" using 1:2:3 via a,b,c
gnuplot > plot f(x), "hogehoge.data"

[x_1 : x_2]:フィッティング範囲。
using      :フィッティングに使用するコラムの指定。3列目にyの標準偏差
via        :フィッティングする際に動かすパラメタの指定。


■ フィッティングのコツ

・パラメータの初期値にもっともらしい値を代入しておく。
・yがゼロになるところを含めるとフィットできない。