我正在尝试为一组数据找到最佳的多项式。它为一定程度的每个多项式拟合计算AIC,然后选择AIC最低的一个。据我所知(可能是我错了),我发现最低的AIC是最合适的。
在这里,我定义了多项式:
int32_t
我的AIC计算功能:
def p2(xData,a0,a1,a2):
return a0 + a1 * xData + a2 * xData**2
def p3(xData,a0,a1,a2,a3):
return a0 + a1 * xData + a2 * xData**2 + a3 * xData**3
def p4(xData,a0,a1,a2,a3,a4):
return a0 + a1 * xData + a2 * xData**2 + a3 * xData**3 + a4 * xData**4
我的多项式拟合代码适合我的数据并选择最佳数据:
def compute_AIC(yData,model,variables):
residual=yData-model
SSE=np.sum(residual**2)
return 2*variables-2*np.log(SSE)
但是,当我用需要拟合的代码执行此操作时,我得到:
哪个具有令人惊讶的低AIC值。
对于分段线性回归显然看起来最适合的数据集,该函数创建的多项式的AIC值低于我的分段线性回归(Rsquared大于0.99但AIC约为12)。 / p>
这没有通过健全性检查,因此我在这里一定做错了。我认为我对多项式的定义或定义计算AIC的函数的方式是错误的,或者仅仅是我对AIC告诉我的最佳拟合的理解是错误的。
即使我的分段回归倾向于具有非常好的Rsquared值,也可能会有这样的情况,它们具有大量参数(断点1,断点2,slope1,slope2,slope3,offset1,offset2,offset3-生成8个参数或变量),这可能使多项式胜出了,但我仍然怀疑我的代码在说真话。
答案 0 :(得分:0)
从情节到问题,所表示的函数y(x)看起来像是由三段组成的分段函数。
本文给出了一种非常简单的方法(没有猜测的初始值,没有迭代计算):https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf
第29-30页处理了这种分段线性函数的情况。这篇论文是法文。相关页面的翻译如下:
由于未提供数据,因此通过扫描操作员发布的图形获得了近似数据。
结果是:
有关信息:
由于分段函数是非线性函数(甚至由线性段组成),因此全局回归的线性化基于一个积分方程:
有关更多说明,请参见参考文件。