代码之家  ›  专栏  ›  技术社区  ›  dartdog

从OLS得到一个不同于的简单预测。6至。8个StatsModels

  •  1
  • dartdog  · 技术社区  · 7 年前

    很抱歉交叉发布此消息,但无法通过。我无法从预测函数中获得输出:

    我有一个用于SM的OLS模型。现在不在工作。8大熊猫从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输入是从熊猫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)
    

    这给了我一个错误: 值错误:形状(1,1)和(2,)未对齐:1(尺寸1)!=2(尺寸0)

    我尝试通过将ols_输入更改为:

    13209.0
    Type: 
    <class 'numpy.float64'>
    

    这给了我一个类似的错误: 值错误:形状(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 回复  |  直到 7 年前
        1
  •  0
  •   dartdog    7 年前

    在与Statsmodels的库作者进行了一些讨论之后,似乎有一个bug请参见此处的讨论 https://groups.google.com/d/topic/pystatsmodels/a0XsXIiP5ro/discussion

    注:我针对具体问题的最终解决方案是:

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

    从而得出下一期的单位。。