サーチ…


前書き

fitコマンドは、非線形最小二乗法( NLLS )Marquardt-Levenbergアルゴリズムの実装を使用して、データポイント(x,y)または(x,y,z)セットにユーザ定義関数を適合させることができます。

関数本体で発生するユーザ定義の変数はfitパラメータとして機能しますが、関数の戻り値の型は実数でなければなりません。

構文

  • fit [ xrange ] [ yrange ] 関数 " datafile " parameter_fileを 介し 修飾子 使用する

パラメーター

パラメーター詳細
パラメータabcとそれまで使用されていなかった文字文字を使用して、関数に適合させるためのパラメータを表します。例えば、 f(x) = a * exp(b * x) + cg(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 

ここで、 WZは所望のパラメータで満たされ、それらのパラメータについての誤差を推定する。

下のコードは、次のグラフを生成します。

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ファイルに適合し、次にmqパラメータをプロットして、データセットの最適な曲線近似を取得します。パラメータを取得すると、数式で代用する任意の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. mq値を文字列に保存してプロットする

ここでは、 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

出力は次のようになります。

フィット感



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow