【问题标题】:Regression on stock data using pandas and matplotlib使用 pandas 和 matplotlib 对股票数据进行回归
【发布时间】:2012-11-26 23:54:34
【问题描述】:

我想在股票图表上绘制 Excel 所称的“指数趋势/回归”。当我在 IPython 笔记本中运行下面的代码时,它只是说“内核已经死了,你想重新启动它吗?”。关于如何解决它的任何想法?此外,这只是尝试进行线性回归,我不太确定如何对指数数据进行回归。

import datetime
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas.io.data import DataReader

sp500 = DataReader("AGG", "yahoo", start=datetime.datetime(2000, 1, 1)) # returns a DataFrame
sp500["regression"] = sm.OLS(sp500["Adj Close"], sp500.index).fit().fittedvalues()
top = plt.subplot2grid((3,1), (0, 0), rowspan=2)
top.plot(sp500.index, sp500["Adj Close"], 'b-', sp500.index, sp500["regression"], 'r-')
bottom = plt.subplot2grid((3,1), (2,0))
bottom.bar(sp500.index, sp500.Volume)
plt.gcf().set_size_inches(18,8)

【问题讨论】:

  • ipython --pylab 存在分段错误
  • 到分段错误(另请参见第二个答案):这是由 numpy 1.6.2 中的点函数中的错误引起的,该版本添加了日期时间数组并且仍然存在一些问题。这已在 numpy 1.7.0 的 beta 版本中得到修复。我从中得到的信息是,我们应该小心使用日期时间数组,直到对这个新功能的 numpy 支持失去了它的尖角。

标签: python matplotlib pandas statsmodels


【解决方案1】:

我又看了一遍,意识到我之前的答案很不合适,因为它不包括截距。我已经更新了我的答案。

段错误来自于尝试将日期时间索引作为外生变量。而是尝试:

import datetime
import matplotlib.pyplot as plt
import statsmodels.api as sm
import pandas
from pandas.io.data import DataReader

sp500 = DataReader("AGG", "yahoo", start=datetime.datetime(2000, 1, 1)) # returns a DataFrame
sp500["regression"] = sm.OLS(sp500["Adj Close"],
    sm.add_constant(range(len(sp500.index)),
    prepend=True)).fit().fittedvalues

请注意,您不需要将 statsmodels 的拟合值作为函数调用。 如果您的数据点都是等间距的,则此模型将给出与使用实际索引相同的结果。

对于您的第二个问题,pandas 作为内置的指数加权移动平均线,您可能想要查看:pandas.ewmahere

【讨论】:

  • 欢迎来到 StackOverflow!为熊猫的 ewma +1
  • 感谢您的帮助。如果您对此有任何想法,我实际上确实想要回归而不是移动平均线。
  • 我想我弄清楚了第二部分: sp500["regression"] = exp(sm.OLS(log(sp500["Adj Close"]), sm.add_constant(range(len(sp500. index)), prepend=True)).fit().fittedvalues)
【解决方案2】:

您将需要发布更多信息 - 版本号以及您如何构建 pandas - 也许回溯也有助于缩小范围。在有或没有 pylab 的 IPython 中,我无法在 64 位 linux 上使用 pandas 0.9.1 复制段错误。您可能还想报告关于 github 问题而不是堆栈溢出的错误。在那里更容易引起开发者的注意。

【讨论】:

  • 我也无法复制。
  • 0.9.1 64bit 出现段错误
  • 我打开了问题586(我创建了statsmodels标签,所以可能是我的错,在这里报告了;-()。
  • 我在 Ubuntu 12.04 上使用 pip 安装所有东西。这是我的版本号:ipython==0.13.1,numpy==1.6.2,pandas==0.9.1,scipy==0.11.0,statsmodels==0.5.0,tables==2.4.0
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多