当我在使用多项式回归后尝试推断时,为什么会得到不相交的数据

时间:2016-02-22 07:45:48

标签: matlab regression curve-fitting extrapolation

我想推断一些我拥有的数据,如下图所示。蓝线是原始数据,红线是我想要的外推。

enter image description here

为了使用回归分析,我使用了函数polyfit

sizespecial = size(i_C); 
endgoal = sizespecial(2); 
plothelp = 1:endgoal;

reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);

i_Ci_D是表示原始数据的向量。我使用以下代码扩展了数据:

plothelp=1:endgoal+11; 

for in = endgoal+1:endgoal+11
    i_C(in) = (reg1(1)*(in^2))+(reg1(2)*in)+reg1(3);
    i_D(in) = (reg2(1)*(in^2))+(reg2(2)*in)+reg2(3);
end

但是,我现在输出的图表是:

enter image description here

我不明白为什么会引入额外的缺口(用红色圈出)。不要犹豫,让我澄清这个问题的任何细节,并感谢您的所有答案。

1 个答案:

答案 0 :(得分:3)

enter image description here

我想象的是你正在尝试在所有数据上拟合二阶多项式。我的猜测是这个多项式看起来很像我用橙色绘制的曲线。如果您按照Matt的评论建议并将您的回归多项式绘制在原始数据上(不仅仅是外推部分),您应该确认这一点。

通过拟合更高阶的多项式,可能会得到更好的结果。您的数据有两个拐点,因此三阶多项式可能会很好地工作。然而,对高阶多项式进行外推的一个危险是,它们可能在数据域之外产生相当大的变形,并产生意想不到的结果。

减轻这种情况的一种方法是在系列的最终x数据点上执行线性回归。这些是图中以黄色突出显示的点。您可以将x调整为参数,使其尽可能多地覆盖曲线的近似线性最终部分。我绘制的红线将是仅对这些数据执行线性回归的结果(而不是整个数据集)

另一种选择可能是拟合样条曲线并对其进行推断。您可以使用指定'spline''pchip'的{​​{3}}功能。

然而,哪个是最佳选择将在很大程度上取决于您试图解决的问题的性质。