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

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

2015-01-09 11:10:33

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

根据线性回归的方差分析

\[SST=\sum_i (y_i-\bar y)^2 \\ SSR=\sum_i (\hat y_i-\bar y)^2 \\ SSE=\sum_i (y_i-\hat y_i)^2 \\ SST=SSR+SSE \\ R^2={SSR \over SST}={SST-SSE \over SST}=1-{SSE \over SST}=1-{\sum_i (\hat y_i-\bar y)^2 \over \sum_i (y_i-\bar y)^2}\]

其中, 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日起): | 最后更新: 2024-01-20 10:40:28 UTC | 版权所有 © 2008 - 2024 Jerkwin