我正在尝试使用Math.NET通过少量数据点执行简单的线性拟合。使用Fit.Line,我很容易执行线性拟合并获得斜率和截距:
Tuple<double, double> result = Fit.Line(xdata, ydata);
var intercept = result.Item1;
var slope = result.Item2;
这很简单,但是错误呢?
y数据中的错误
我的y数据可能包含错误栏,Math.NET可以考虑这些错误吗? x数据中没有错误,仅y数据中没有错误。
拟合参数错误
结果拟合参数中的错误呢?斜率和截距应该有一个错误,或者至少可以让我知道这些参数的拟合程度。通常,我认为您会使用协方差矩阵,并且其对角线元素会给参数带来误差。我看不到使用它的任何选择。 Math.NET能够给我合适的参数错误吗?
我想您可以使用此行来测量拟合误差:
GoodnessOfFit.RSquared(xdata.Select(x => a+b*x), ydata); // == 1.0
其中1
表示“完美”(完全在线),0
表示“差”。
该页面上的Math.NET文档中对此进行了描述: