我想推断一些我拥有的数据,如下图所示。蓝线是原始数据,红线是我想要的外推。
为了使用回归分析,我使用了函数polyfit
:
sizespecial = size(i_C);
endgoal = sizespecial(2);
plothelp = 1:endgoal;
reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);
i_C
和i_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
但是,我现在输出的图表是:
我不明白为什么会引入额外的缺口(用红色圈出)。不要犹豫,让我澄清这个问题的任何细节,并感谢您的所有答案。
答案 0 :(得分:3)
我想象的是你正在尝试在所有数据上拟合二阶多项式。我的猜测是这个多项式看起来很像我用橙色绘制的曲线。如果您按照Matt的评论建议并将您的回归多项式绘制在原始数据上(不仅仅是外推部分),您应该确认这一点。
通过拟合更高阶的多项式,可能会得到更好的结果。您的数据有两个拐点,因此三阶多项式可能会很好地工作。然而,对高阶多项式进行外推的一个危险是,它们可能在数据域之外产生相当大的变形,并产生意想不到的结果。
减轻这种情况的一种方法是在系列的最终x
数据点上执行线性回归。这些是图中以黄色突出显示的点。您可以将x
调整为参数,使其尽可能多地覆盖曲线的近似线性最终部分。我绘制的红线将是仅对这些数据执行线性回归的结果(而不是整个数据集)
另一种选择可能是拟合样条曲线并对其进行推断。您可以使用指定'spline'
或'pchip'
的{{3}}功能。
然而,哪个是最佳选择将在很大程度上取决于您试图解决的问题的性质。