個人メモ
xy平面に存在する、fittingしたいデータにエラーバーが存在する場合のエラーバーフィッティングのやり方をメモ程度に(Gnuplot.jlの文献がわかりずらかったので記述する).
参考URL:https://riptutorial.com/gnuplot/example/27491/fitting-data-with-errors
使用するものは
Julia 1.5.0
Gnuplot.jl
以下のサンプルデータがあったとして
qiita.jl
x = [1.0, 0.699, 0.492, 0.332, 0.26, 0.205, 0.152, 0.126, 0.113, 0.101]
y = [12.629999999999997, 9.446833333333332, 6.870000000000003, 4.446666666666669, 3.2823333333333338, 2.3615, 1.5669999999999997, 1.1508333333333334, 1.0224999999999997, 0.8695000000000002]
xerr = [0.0, 0.0006042022055027993, 0.0011512517321786886, 0.002247965322632335, 0.0028503588298436655, 0.004671390455855099, 0.005048214501530516, 0.007837345552787455, 0.007954572277127921, 0.00723438424981115]
yerr = [2.0e-5, 4.169928653076862, 4.45897153149065, 3.092209273657006, 2.007596983888329, 1.7789611327582189, 0.9446893489934641, 0.5132322521361732, 0.4083804308132142, 0.2517309567301392]
qiita.jl
using Gnuplot
@gp x y xerr yerr "w xyerrorbars ps 1.5 t '{/Latex Sample data}'"
@gp :- "set logscale x"
@gp :- "set logscale y"
従来のfitting
qiita.jl
name = "\$ samplingdata"
@gp "f(x) = a*x**b" # define an analytical model
@gp :- "a=1" "b=1" # set parameter initial values
@gp :- name=>(x, y) # define a named dataset
@gp :- "fit f(x) $name via a,b;" # fit the data
*******************************************************************************
Fri Oct 23 02:37:30 2020
FIT: data read from $ c3scaling
format = z
#datapoints = 10
residuals are weighted equally (unit weight)
function used for fitting: f(x)
f(x) = a*x**b
fitted parameters initialized with current variable values
iter chisq delta/lim lambda a b
0 2.8764613569e+02 0.00e+00 3.76e-01 1.000000e+00 1.000000e+00
6 1.3060759013e+00 -2.93e-02 3.76e-07 1.307892e+01 1.031668e+00
After 6 iterations the fit converged.
final sum of squares of residuals : 1.30608
rel. change during last iteration : -2.93426e-07
degrees of freedom (FIT_NDF) : 8
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.404054
variance of residuals (reduced chisquare) = WSSR/ndf : 0.163259
Final set of parameters Asymptotic Standard Error
======================= ==========================
a = 13.0789 +/- 0.3547 (2.712%)
b = 1.03167 +/- 0.04416 (4.28%)
correlation matrix of the fit parameters:
a b
a 1.000
b 0.583 1.000
エラーバーつきfitting
qiita.jl
name = "\$ samplingdata"
@gp "f(x) = a*x**b" # define an analytical model
@gp :- "a=1" "b=1" # set parameter initial values
@gp :- name=>(x, y, xerr, yerr) # define a named dataset
@gp :- "fit f(x) $name xyerrors via a,b;" # fit the data
*******************************************************************************
Fri Oct 23 02:36:19 2020
FIT: data read from $ c3scaling xyerrors
format = z:s
#datapoints = 10
function used for fitting: f(x)
f(x) = a*x**b
fitted parameters initialized with current variable values
iter chisq delta/lim lambda a b
0 3.3814225003e+11 0.00e+00 1.12e+04 1.000000e+00 1.000000e+00
7 3.8514486446e-01 -8.32e-02 1.12e-03 1.263000e+01 1.144262e+00
After 7 iterations the fit converged.
final sum of squares of residuals : 0.385145
rel. change during last iteration : -8.31863e-07
degrees of freedom (FIT_NDF) : 8
rms of residuals (FIT_STDFIT) = sqrt(WSSR/ndf) : 0.219415
variance of residuals (reduced chisquare) = WSSR/ndf : 0.0481431
p-value of the Chisq distribution (FIT_P) : 0.999951
Final set of parameters Asymptotic Standard Error
======================= ==========================
a = 12.63 +/- 4.388e-06 (3.475e-05%)
b = 1.14426 +/- 0.01899 (1.66%)
correlation matrix of the fit parameters:
a b
a 1.000
b 0.000 1.000
エラーを考慮したフィッティング大事