如何在Python中指定consumption=Aexp(Bt)型非线性回归模型
计量经济学作业建模问题求助
我目前正在修读计量经济学课程,想试着用Python替代作业指定的商用软件STATA和EVIEWS来完成建模任务。手里有一份时间序列消费数据,需要用两种方法建模:
- 第一种是拟合非线性回归模型:
consumption = A*exp(Bt) - 第二种是对模型两边取对数后做普通最小二乘(OLS)回归,也就是
log(consumption) = alpha + Bt,这个方法我已经掌握了。
但在实现第一种非线性回归模型时,我遇到了不少麻烦:
- statsmodels的问题:我对时间数据做了归一化后进行指数变换,结果得到的却是
consumption = A*exp(t) + B形式的模型,这根本不是我想要的——我需要能自定义参数位置的建模方式。 - sklearn的局限:sklearn只支持多项式回归,没有直接的指数回归功能,没法满足需求。
- scipy.curve_fit的两个棘手问题:
- 这个方法依赖参数的初始猜测,这意味着我的结果可能和商用软件的输出不一致,但我觉得指数回归属于标准模型,不应该依赖迭代初始值;
- 每次运行代码,返回的参数值居然就是我设定的初始猜测值,完全没有迭代优化的效果。
我的scipy代码如下:
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--',)
内容的提问来源于stack exchange,提问作者riemann_lebesgue
相关产品推荐
相关产品推荐

