【发布时间】: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