对拟合数据使用“填充曲线”

时间:2021-07-21 11:22:17

标签: gnuplot

我正在使用 'fit' 拟合一些数据,得到 f(x) 并绘制它就好了。但是,除了数据点和拟合曲线之外,我还想在图中添加置信区间,因此我需要在 f(x)-stddev_y 和 f(x)+stddev_y 之间添加一个“条纹”。

我可以将边界 f(x)-stddev_y 和 f(x)+stddev_y 写入表格,就像这样

set datafile separator ';'
f(x) = a*x + b
fit f(x) '0706-2007.csv' using 7:8 via a,b
stddev_y = sqrt(FIT_WSSR / (FIT_NDF + 1 ))
set table "1.dat"
plot [10:80] f(x)-sqrt(FIT_WSSR / (FIT_NDF + 1 ))
set table "2.dat"
plot [10:80] f(x)+sqrt(FIT_WSSR / (FIT_NDF + 1 ))
unset table
plot [10:80] '0706-2007.csv' using 7:8 not with points pt 7 ps 1,f(x) not with lines,\
"< paste 1.dat 2.dat | awk '{print $1\";\"$2\";\"$5;}' " using 1:2:3 with filledcurves title sprintf("σ = %.1f",sqrt(FIT_WSSR/(FIT_NDF+1)))

但看起来有点牵强。有没有更直接的方法?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您想填充拟合不确定性所覆盖的区域。在线性拟合的简单情况下,这确实可以通过恒定的移位因子轻松完成。可以使用特殊文件名 '+'(有关详细信息,请参阅 special-filename 上的手册)。

set datafile separator ';'
f(x) = a*x + b
fit f(x) '0706-2007.csv' using 7:8 via a,b
stddev_y = sqrt(FIT_WSSR / (FIT_NDF + 1 ))
plot '+' using ($1):(f($1)-stddev_y):(f($1)+stddev_y) with filledcurves

如果您碰巧有一个更复杂的拟合函数,您将需要更仔细地考虑最小值和最大值的表达式。为此,set fit errorvariables 可能有用,这会将 a, b 的拟合误差保存为 a_err, b_err