从OLS获得一个简单的预测,与StatsModels的.6到.8不同

时间:2018-01-26 22:43:51

标签: python pandas statsmodels

很抱歉交叉发布此但无法通过它我无法从预测功能获得输出:

我有一个OLS模型,过去常常使用SM .6,现在不能使用.8而Pandas从19.2增加到20.3,这可能是问题吗?

我只是不明白我需要提供什么来预测方法。 所以我的模型创建看起来像:

def fit_line2(x, y):
X = sm.add_constant(x, prepend=True) #Add a column of ones to allow the calculation of the intercept
ols_test = sm.OLS(y, X,missing='drop').fit()
"""Return slope, intercept of best fit line."""
X = sm.add_constant(x)
return ols_test

这样工作正常,我得到一个模型,可以看到摘要很好。 我曾经这样做是为了通过使用我在SM中工作的最新值(我希望向前推进)来提前一个预测.6 预测称如下:

 yrahead=ols_test.predict(ols_input)

ols输入是从pandas DF创建的:

 ols_input=(sm.add_constant(merged2.lastqu[-1:], prepend=True))

 lastqu
 2018-12-31 13209.0  
 type:
 <class 'pandas.core.frame.DataFrame'>

将预测称为:

yrahead=ols_test.predict(ols_input)

这给了我一个错误:   ValueError:形状(1,1)和(2,)未对齐:1(暗淡1)!= 2(暗淡0)

我尝试通过将ols_input更改为:

来简单地输入数字
13209.0
Type: 
<class 'numpy.float64'>

这给了我一个类似的错误: ValueError:形状(1,1)和(2,)未对齐:1(暗淡1)!= 2(暗淡0)

不确定去哪里?

上面的基本DataFrame表(merged2)看起来如此,最后一行lastqu列包含我想要预测单位的值:

               Units      lastqu    Uperchg  lqperchg
2000-12-31  19391.000000      NaN      NaN       NaN
2001-12-31  35068.000000   5925.0    80.85       NaN
2002-12-31  39279.000000   8063.0    12.01     36.08
2003-12-31  47517.000000   9473.0    20.97     17.49
2004-12-31  51439.000000  11226.0     8.25     18.51
2005-12-31  59674.000000  11667.0    16.01      3.93
2006-12-31  58664.000000  14016.0    -1.69     20.13
2007-12-31  55698.000000  13186.0    -5.06     -5.92
2008-12-31  42235.000000  11343.0   -24.17    -13.98
2009-12-31  40478.333333   7867.0    -4.16    -30.64
2010-12-31  38721.666667   8114.0    -4.34      3.14
2011-12-31  36965.000000   8361.0    -4.54      3.04
2012-12-31  39132.000000   8608.0     5.86      2.95
2013-12-31  43160.000000   9016.0    10.29      4.74
2014-12-31  44520.000000   9785.0     3.15      8.53
2015-12-31  49966.000000  10351.0    12.23      5.78
2016-12-31  53752.000000  10884.0     7.58      5.15
2017-12-31  57571.000000  12109.0     7.10     11.26
2018-12-31           NaN  13209.0      NaN      9.08

所以我使用OLS来对抗2018年的项目单位

我坦白地承认没有真正理解为什么SM .6的工作方式如此,但确实如此!

1 个答案:

答案 0 :(得分:0)

在与Statsmodels的图书馆作者讨论之后,似乎有一个错误在这里看到了讨论https://groups.google.com/d/topic/pystatsmodels/a0XsXIiP5ro/discussion

请注意我的具体问题的最终解决方案是:

ols_input=np.array([1,merged2.lastqu[-1:].values])
yrahead=ols_test.predict(ols_input)

产生下一期的单位..