【问题标题】:Forecasting using Pandas OLS使用 Pandas OLS 进行预测
【发布时间】:2012-03-30 13:22:40
【问题描述】:

我一直在使用 scikits.statsmodels OLS predict 函数来预测拟合数据,但现在想改用 Pandas。

文档refers to OLS 以及一个名为y_predict 的函数,但我找不到任何关于如何正确使用它的文档。

举例:

exogenous = {
    "1998": "4760","1999": "5904","2000": "4504","2001": "9808","2002": "4241","2003": "4086","2004": "4687","2005": "7686","2006": "3740","2007": "3075","2008": "3753","2009": "4679","2010": "5468","2011": "7154","2012": "4292","2013": "4283","2014": "4595","2015": "9194","2016": "4221","2017": "4520"}
endogenous = {
    "1998": "691", "1999": "1580", "2000": "80", "2001": "1450", "2002": "555", "2003": "956", "2004": "877", "2005": "614", "2006": "468", "2007": "191"}

import numpy as np
from pandas import *

ols_test = ols(y=Series(endogenous), x=Series(exogenous))

但是,虽然我可以产生合身:

>>> ols_test.y_fitted
1998     675.268299
1999     841.176837
2000     638.141913
2001    1407.354228
2002     600.000352
2003     577.521485
2004     664.681478
2005    1099.611292
2006     527.342854
2007     430.901264

预测没有什么不同:

>>> ols_test.y_predict
1998     675.268299
1999     841.176837
2000     638.141913
2001    1407.354228
2002     600.000352
2003     577.521485
2004     664.681478
2005    1099.611292
2006     527.342854
2007     430.901264

在 scikits.statsmodels 中可以执行以下操作:

import scikits.statsmodels.api as sm
...
ols_model = sm.OLS(endogenous, np.column_stack(exogenous))
ols_results = ols_mod.fit()
ols_pred = ols_mod.predict(np.column_stack(exog_prediction_values))

如何在 Pandas 中将内生数据预测到外生数据的极限?

更新:感谢 Chang,新版本的 Pandas (0.7.3) 现在将这个功能作为标准功能。

【问题讨论】:

  • 嗨,你介意举个例子来说明如何使用 ols.predict 吗?假设你有三个自变量,因此三个 beta[b1, b2, b3] 现在你想使用 [x1, x2, x3] 来预测一个 y

标签: python pandas scikits


【解决方案1】:

您的问题是如何获得回归的预测 y 值?或者是如何使用回归系数来获得外生变量的不同样本集的预测 y 值? pandas y_predict 和 y_fitted 应该为您提供相同的值,并且两者都应该为您提供与 scikits.statsmodels 中的 predict 方法相同的值。

如果您正在寻找回归系数,请执行 ols_test.beta

【讨论】:

  • 我想预测 2008 到 2017 年的 y 值,我可以通过 scikits.statsmodels predict 获得,但我不知道如何通过 Pandas 获得。
  • 明白了。如果你想使用 pandas 的 ols 功能,你现在可以做 (ols_result.beta['x'] * exog_2008_2017).sum() + ols_result.beta['intercept']。
  • 我在这里打开了一个关于它的 Github 问题:github.com/pydata/pandas/issues/1008 以提供一个复制 statsmodels 功能的函数
  • 从长远来看,我们计划将 pandas OLS 代码(具有 NA 处理和移动窗口功能)移动到 statsmodels 中并提供一致的接口
  • 谢谢大家,这太棒了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-07-22
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2020-06-14
  • 2013-11-28
相关资源
最近更新 更多