gnuplot拟合参数的误差及相关系数

类别:    标签: gnuplot origin   阅读次数:   版权: (CC) BY-NC-SA

2015-01-09 11:10:33

gnuplot的fit命令可以做拟合, 但使用的是非线性拟合方法, 即便对于线性模型也是一样, 而且拟合结果中不会给出线性相关系数 $R^2$. stat命令可以给出线性相关系数, 可惜无法用于带误差的拟合. 如果我们需要 $R^2$ 的话, 可以利用fit命令, 并根据相关系数的定义进行计算. 具体方法如下.

根据线性回归的方差分析

其中, SST(sum of squares for total)为总平方和, 即数据的总体方差, SSR(sum of squares for regression, 也可写做模型平方和,SSM,sum of squares for model)为回归平方和, 即拟合数据的总体方差, SSE(sum of squares for error)为残差平方和, 即数据与其拟合值的方差.

gnuplot的fit命令会给出拟合后的sum of squares of residuals, 也称为拟合的 $\c^2$, 存于内置变量FIT_WSSR中. 名字中虽然有SSR, 但实际上它相应于SSE, 也就是残差的平方和. 知道了这一点, 再和上面的公式进行对比, 可以发现, SST可看作是数据对常数项拟合的FIT_WSSR, 而SSE则是数据对线性模型拟合的FIT_WSSR. 这样我们利用fit命令先做一次常数拟合得到SST, 再做一次线性拟合得到SSE, 就能计算出 $R^2$ 了.

测试数据

# X       Y      Yerr
1.23457  3.4326 0.1534
0.694444 4.7962 0.1788
0.444444 6.1129 0.1876
0.326531 6.6983 0.1290
0.25     7.1511 0.1468

代码

gnuplot
1
2
3
4
5
6
7
8
9
mean(x)=m       # 拟合后m即为Y的平均值
fit mean(x) 'File' u 1:2:3 via m
SST = FIT_WSSR  # 对平均值的方差, 即SST

f(x)=A+B*x      # 线性模型
fit f(x) 'File' u 1:2:3 via A, B
SSE=FIT_WSSR    # 对线性模型的方差, 即SSE

print "R^2=", 1-SSE/SST

结果

After 4 iterations the fit converged.
final sum of squares of residuals : 11.001
rel. change during last iteration : -1.77313e-010

degrees of freedom    (FIT_NDF)                        : 3
rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 1.91494
variance of residuals (reduced chisquare) = WSSR/ndf   : 3.66699
p-value of the Chisq distribution (FIT_P)              : 0.0117207

Final set of parameters            Asymptotic Standard Error
=======================            ==========================
A               =  7.89179         +/- 0.2438       (3.09%)
B               = -3.75272         +/- 0.3618       (9.642%)

R^2=0.972868859990092

常用的origin软件Analysis-->Fit Linear给出的拟合结果如下:

Linear Regression for Data1_B:
Y = A + B * X
Weight given by Data1_C error bars.

Parameter  Value      Error
----------------------------------------
A          7.89179    0.12733
B         -3.75272    0.18895
----------------------------------------

R           SD         N    P
----------------------------------------
-0.98634    1.91494    5    0.00191
----------------------------------------

对比可知, 二者给出的SD相同, $R^2$ 相同, 拟合参数值也相同, 但参数的拟合误差不同. 检查后发现, 与origin的Analysis-->Fit Linear不同, gnuplot的fit给出的拟合参数误差是经过SD标度的误差. 比如, 对常数项A的误差, origin给出的是0.12733, 将其乘上SD 1.91494, 就得到0.2438293102, 这正是gnuplot给出的误差. 我不能确定这两种值哪个更合理或是更常用一些, 只是在这里提醒大家在对比时要注意到它们的不同. 此外, origin的非线性拟合可是使用误差项, 并可以指定不同的权重方法, 也可以选择是否对拟合参数的误差进行SD标度.

注意, 当不考虑误差项Yerr进行拟合时, gnuplot和origin给出的拟合参数的误差完全相同.

网络资料

评论

随意赞赏

微信

支付宝
◆本文地址: , 转载请注明◆
◆评论问题: https://jerkwin.herokuapp.com/category/3/博客, 欢迎留言◆


前一篇: 【转】统一文字是保障主权防止分裂的千秋大计
后一篇: 我使用的markdown工具

访问人次(2015年7月 9日起): | 最后更新: 2017-12-13 23:46:45 UTC | 版权所有 © 2008 - 2017 Jerkwin