Gnuplot
gnuplotでデータを合わせる
サーチ…
前書き
fitコマンドは、非線形最小二乗法( NLLS )Marquardt-Levenbergアルゴリズムの実装を使用して、データポイント(x,y)
または(x,y,z)
セットにユーザ定義関数を適合させることができます。
関数本体で発生するユーザ定義の変数はfitパラメータとして機能しますが、関数の戻り値の型は実数でなければなりません。
構文
- fit [ xrange ] [ yrange ] 関数 " datafile " parameter_fileを 介し て 修飾子 を 使用する
パラメーター
パラメーター | 詳細 |
---|---|
パラメータa 、 b 、 c とそれまで使用されていなかった文字 | 文字を使用して、関数に適合させるためのパラメータを表します。例えば、 f(x) = a * exp(b * x) + c 、 g(x,y) = a*x**2 + b*y**2 + c*x*y |
ファイルパラメータstart.par | 初期化されていないパラメータ(Marquardt-Levenbergは自動的にa=b=c=...=1 初期化します)を使用して、 start.par ファイルに入れ、 parameter_fileセクションで呼び出します 。例: fit f(x) 'data.dat' u 1:2 via 'start.par' 。 start.par ファイルの例を以下に示します |
備考
短い紹介
fit
は、ユーザー定義関数にデータをフィットさせるのに最適なパラメーターのセットを見つけるために使用されます。適合は、入力データ点と同じ場所で評価された関数値との差の二乗または「残差」(SSR)の合計に基づいて判断されます。この量はしばしば「キススクエア」と呼ばれます(すなわち、ギリシャ文字のchi、2の累乗)。アルゴリズムは、入力データエラー(または1.0)によって残差が二乗される前に「重み付け」されるため、SSR、つまりより正確にはWSSRを最小化しようとします。 ( Ibidem )
fit.log
ファイル
各反復ステップの後に、画面上といわゆるログファイルfit.log
両方について、フィットの状態に関する詳細情報が与えられます。このファイルは決して消去されることはありませんが、フィットの履歴が失われないように常に追加されます。
エラーのあるデータのフィッティング
最大12の独立変数が存在し、常に1つの従属変数があり、任意の数のパラメータを適合させることができる。必要に応じて、データポイントを重み付けするための誤差推定値を入力することができる。 (T. Williams、C. Kelley- gnuplot 5.0、インタラクティブプロッティングプログラム )
あなたがデータセットを持っていて、コマンドが非常に単純で自然であれば適合したい場合:
fit f(x) "data_set.dat" using 1:2 via par1, par2, par3
代わりにf(x)
はf(x, y)
。あなたはまた、データエラーの推定値を持っている場合、 {y | xy | z}errors
( { | }
修飾子オプションに可能な選択肢を表す)( 構文を参照)。例えば
fit f(x) "data_set.dat" using 1:2:3 yerrors via par1, par2, par3
ここで、 {y | xy | z}errors
オプションには、エラー推定値を指定する1( y
)、2( xy
)、1( z
)列がそれぞれ必要です。
ファイルのxyerrors
による指数関数近似
データ誤差推定値は、二乗残差の加重和、WSSRまたは二乗誤差を決定する際に、各データ点の相対的重量を計算するために使用されます。それらは、フィッティングされた関数からの各データポイントの偏差が最終値にどの程度の影響を及ぼすかを決定するため、パラメータ推定に影響を与える可能性があります。パラメタ誤差推定値を含む適合出力情報の一部は、正確なデータ誤差推定値が提供されている場合により意味がある。( Ibidem )
x軸座標( Temperature (K)
)、y軸座標( Pressure (kPa)
)、x誤差推定値( T_err (K)
Pressure (kPa)
)の4つの列で構成されたサンプルデータセットmeasured.dat
取ります。 T_err (K)
)およびy誤差推定値( P_err (kPa)
)を含む。
#### 'measured.dat' ####
### Dependence of boiling water from Temperature and Pressure
##Temperature (K) - Pressure (kPa) - T_err (K) - P_err (kPa)
368.5 73.332 0.66 1.5
364.2 62.668 0.66 1.0
359.2 52.004 0.66 0.8
354.5 44.006 0.66 0.7
348.7 34.675 0.66 1.2
343.7 28.010 0.66 1.6
338.7 22.678 0.66 1.2
334.2 17.346 0.66 1.5
329.0 14.680 0.66 1.6
324.0 10.681 0.66 1.2
319.1 8.015 0.66 0.8
314.6 6.682 0.66 1.0
308.7 5.349 0.66 1.5
さて、理論から私たちのデータを近似するべき関数のプロトタイプを作成するだけです。この場合:
Z = 0.001
f(x) = W * exp(x * Z)
Marquardt-Levenbergフィッティングアルゴリズムで(浮動小数点)InfinityとNaNにつながる巨大な値がexp(x * Z)
の指数関数exp(x * Z)
を評価するため、パラメータZ
を初期化しています。変数 - Marquardt-Levenbergについてもっと知りたい場合は、 ここをクリックしてください。
データに合わせる時間です!
fit f(x) "measured.dat" u 1:2:3:4 xyerrors via W, Z
結果は次のようになります
After 360 iterations the fit converged.
final sum of squares of residuals : 10.4163
rel. change during last iteration : -5.83931e-07
degrees of freedom (FIT_NDF) : 11
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.973105
variance of residuals (reduced chisquare) = WSSR/ndf : 0.946933
p-value of the Chisq distribution (FIT_P) : 0.493377
Final set of parameters Asymptotic Standard Error
======================= ==========================
W = 1.13381e-05 +/- 4.249e-06 (37.47%)
Z = 0.0426853 +/- 0.001047 (2.453%)
correlation matrix of the fit parameters:
W Z
W 1.000
Z -0.999 1.000
ここで、 W
とZ
は所望のパラメータで満たされ、それらのパラメータについての誤差を推定する。
下のコードは、次のグラフを生成します。
set term pos col
set out 'PvsT.ps'
set grid
set key center
set xlabel 'T (K)'
set ylabel 'P (kPa)'
Z = 0.001
f(x) = W * exp(x * Z)
fit f(x) "measured.dat" u 1:2:3:4 xyerrors via W, Z
p [305:] 'measured.dat' u 1:2:3:4 ps 1.3 pt 2 t 'Data' w xyerrorbars,\
f(x) t 'Fit'
フィットとプロットmeasured.dat
コマンドを使用してwith xyerrorbars
X上とyにエラーの推定値を表示します。 set grid
は、大きなチックに点線のset grid
を配置します。
エラー推定値が利用可能でないか、または重要ではない場合、 {y | xy | z}errors
適合オプション:
fit f(x) "measured.dat" u 1:2 via W, Z
この場合、 xyerrorbars
も避けなければなりませんでした。
"start.par"ファイルの例
ファイルからフィットパラメータをロードする場合は、使用するすべてのパラメータを宣言し、必要に応じてパラメータを初期化する必要があります。
## Start parameters for the fit of data.dat
m = -0.0005
q = -0.0005
d = 1.02
Tc = 45.0
g_d = 1.0
b = 0.01002
フィット:データセットの基本線形補間
フィットの基本的な使い方は、簡単な例で最もよく説明されています。
f(x) = a + b*x + c*x**2 fit [-234:320][0:200] f(x) ’measured.dat’ using 1:2 skip 4 via a,b,c plot ’measured.dat’ u 1:2, f(x)
フィッティングで使用されるデータをフィルタリングするための範囲を指定できます。範囲外のデータポイントは無視されます。 (T. Williams、C. Kelley- gnuplot 5.0、インタラクティブプロッティングプログラム )
線形補間(線でフィッティング)は、データセットをフィットさせる最も簡単な方法です。 y量の増加が線形であるデータファイルがあるとします。
[...]既知のデータ点の離散集合の範囲内で新しいデータ点を構成する線形多項式。 (ウィキペディアから、 線形補間から )
1級多項式を使用した例
house_price.dat
と呼ばれる次のデータセットを使用して作業します。このデータセットには、特定の都市の家屋の平方メートルとその価格(1000ドル)が含まれます。
### 'house_price.dat'
## X-Axis: House price (in $1000) - Y-Axis: Square meters (m^2)
245 426.72
312 601.68
279 518.16
308 571.50
199 335.28
219 472.44
405 716.28
324 546.76
319 534.34
255 518.16
これらのパラメータをgnuplotに適合させましょう。コマンド自体は非常に単純です。構文からわかるように、フィッティングのプロトタイプを定義し、 fit
コマンドを使用して結果を取得します。
## m, q will be our fitting parameters
f(x) = m * x + q
fit f(x) 'data_set.dat' using 1:2 via m, q
しかし、プロット自体で得られたパラメータを使っても面白いかもしれません。以下のコードはhouse_price.dat
ファイルに適合し、次にm
とq
パラメータをプロットして、データセットの最適な曲線近似を取得します。パラメータを取得すると、数式で代用する任意のx-vaule
(家の平方メートル )からy-value
、この場合はHouse priceを計算できます
y = m * x + q
適切なx-value
。コードをコメントしましょう。
0.期限を設定する
set term pos col
set out 'house_price_fit.ps'
1.グラフを装飾するための通常の管理
set title 'Linear Regression Example Scatterplot'
set ylabel 'House price (k$ = $1000)'
set xlabel 'Square meters (m^2)'
set style line 1 ps 1.5 pt 7 lc 'red'
set style line 2 lw 1.5 lc 'blue'
set grid
set key bottom center box height 1.4
set xrange [0:450]
set yrange [0:]
適切なフィット感
そのためには、次のコマンドを入力するだけです:
f(x) = m * x + q
fit f(x) 'house_price.dat' via m, q
3. m
とq
値を文字列に保存してプロットする
ここでは、 sprintf
関数を使用して、フィットの結果を印刷するラベル( object rectangle
囲まれたラベル)を準備しobject rectangle
。最後に、グラフ全体をプロットします。
mq_value = sprintf("Parameters values\nm = %f k$/m^2\nq = %f k$", m, q)
set object 1 rect from 90,725 to 200, 650 fc rgb "white"
set label 1 at 100,700 mq_value
p 'house_price.dat' ls 1 t 'House price', f(x) ls 2 t 'Linear regression'
set out
出力は次のようになります。