LoginSignup
1
7

More than 3 years have passed since last update.

x値, y値にエラーバーがあるときのfitting

Last updated at Posted at 2020-10-22

個人メモ

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"

スクリーンショット 2020-10-23 2.29.55.png

従来の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 

スクリーンショット 2020-10-23 2.40.22.png

エラーを考慮したフィッティング大事

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7