3

我想在股票图表上绘制 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)
4

2 回答 2

9

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

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

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.ewma 这里

于 2012-12-09T12:49:00.953 回答
1

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

于 2012-12-10T14:54:44.667 回答