AIC太低而无法拟合多项式

时间:2019-06-14 18:05:27

标签: python-3.x regression non-linear-regression sanity-check

我正在尝试为一组数据找到最佳的多项式。它为一定程度的每个多项式拟合计算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)

但是,当我用需要拟合的代码执行此操作时,我得到:

enter image description here

哪个具有令人惊讶的低AIC值。

对于分段线性回归显然看起来最适合的数据集,该函数创建的多项式的AIC值低于我的分段线性回归(Rsquared大于0.99但AIC约为12)。 / p>

enter image description here

这没有通过健全性检查,因此我在这里一定做错了。我认为我对多项式的定义或定义计算AIC的函数的方式是错误的,或者仅仅是我对AIC告诉我的最佳拟合的理解是错误的。

即使我的分段回归倾向于具有非常好的Rsquared值,也可能会有这样的情况,它们具有大量参数(断点1,断点2,slope1,slope2,slope3,offset1,offset2,offset3-生成8个参数或变量),这可能使多项式胜出了,但我仍然怀疑我的代码在说真话。

1 个答案:

答案 0 :(得分:0)

从情节到问题,所表示的函数y(x)看起来像是由三段组成的分段函数。

本文给出了一种非常简单的方法(没有猜测的初始值,没有迭代计算):https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf

第29-30页处理了这种分段线性函数的情况。这篇论文是法文。相关页面的翻译如下:

enter image description here

enter image description here

由于未提供数据,因此通过扫描操作员发布的图形获得了近似数据。

结果是:

enter image description here

有关信息:

由于分段函数是非线性函数(甚至由线性段组成),因此全局回归的线性化基于一个积分方程:

enter image description here

有关更多说明,请参见参考文件。