【问题标题】:How to specify non linear regression model in python如何在python中指定非线性回归模型
【发布时间】:2020-06-03 17:19:41
【问题描述】:

我正在学习计量经济学课程,并且一直在尝试使用 Python,而不是他们设置作业的专有 STATA 和 EVIEWS。

在其中一个问题中,我有一段时间内的消费数据。我被要求以两种方式计算它。

第一种方法是计算形式consumption = Aexp(Bt)的模型,第二种方法是对双方进行log(consumption) = alpha + Bt 做普通OLS

我知道如何做第二种方式。但是,当我尝试做第一种方式时,它出错了。使用 statsmodels,我可以对时间数据求幂(归一化后),但这会以消耗 = Aexp(t) + B 的形式计算回归,这不是我想要的。 (我想指定参数的去向)。在 sklearn 中,我可以找到多项式回归,但不是指数。

然后我找到了 scipy.curve_fit 然而,这似乎有两个问题: (1) 它似乎依赖于参数的初始猜测,这意味着我的输出最终将与专有软件不同(而 OLS 之类的输出是相同的)[因为我假设初始猜测意味着完成了一些迭代解决方案,即有助于非常奇怪和奇妙的功能,但我认为相当标准的结果适用于指数回归] (2) 每次我尝试实现它时,它只是返回猜测参数。

这是我的代码

`consumption_data = pd.read_csv(......\consumption.csv")
def func(x,a,b):
    return a * np.exp(b*x)

xdata = consumption_data.YEAR
ydata = consumption_data.CONSUMPTION
ydata = (ydata - 1948)/100

popt, pcov = curve_fit(func, xdata, ydata, (1,1))
print(popt)

plt.plot(xdata, func(xdata, *popt), 'g--',)
`

scipy.optimize 代码基本上只是从他们的教程中复制粘贴而来 https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

【问题讨论】:

    标签: scipy regression statsmodels non-linear-regression scipy-optimize


    【解决方案1】:

    简短回答:使用 statsmodels GLM

    statsmodels 没有非线性最小二乘。最好的 python 库是 lmfit https://pypi.org/project/lmfit/

    curve_fitlmfit 和非线性最小二乘算法通常会找到优化问题的迭代解。即使我们必须提供起始值,在许多情况下,解决方案在包之间是相同的,直到收敛容差,例如1e-5 或 1e-6。 统计学和计量经济学中的许多标准模型都具有一个具有良好数据的全局最大值。但是,在混合模型等其他情况下,可能存在许多局部最优值,并且估计可能会收敛到其中之一。

    具体情况:

    consumption = A exp(B t)
    可以改写为
    consumption = exp(a + B t)

    所以这只是一个单指数模型或具有指数均值函数的广义线性模型。

    一般版本将因变量的期望作为解释变量线性组合的非线性函数:

    E(y | x) = g(x b)

    这可以使用带有 GLM 的 statsmodels 和家庭高斯和对数链接来估计。

    除此之外:在计量经济学中,有文献使用泊松准似然作为exp 模型的估计量,而不是取因变量的对数。 Poisson 通常使用上面的 log-link 函数。

    但是,使用 GLM 允许我们在任何受支持的分布系列中使用对数链接,即指数平均函数。主要区别在于基础方差假设。 Gaussian 假设方差恒定,Poisson 假设方差与均值成正比,Gamma 假设方差在均值中是二次方的。

    如果我们使用稳健的三明治协方差估计器进行参数推断,那么即使方差函数指定错误,标准误和推断也是正确的。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2019-10-09
      • 2015-04-06
      • 2019-03-27
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2019-03-27
      • 2017-12-15
      相关资源
      最近更新 更多