【发布时间】:2016-07-02 12:35:36
【问题描述】:
我正在计算股票收益的自相关函数。为此,我测试了两个函数,即 Pandas 内置的 autocorr 函数和 statsmodels.tsa 提供的 acf 函数。这是在以下 MWE 中完成的:
import pandas as pd
from pandas_datareader import data
import matplotlib.pyplot as plt
import datetime
from dateutil.relativedelta import relativedelta
from statsmodels.tsa.stattools import acf, pacf
ticker = 'AAPL'
time_ago = datetime.datetime.today().date() - relativedelta(months = 6)
ticker_data = data.get_data_yahoo(ticker, time_ago)['Adj Close'].pct_change().dropna()
ticker_data_len = len(ticker_data)
ticker_data_acf_1 = acf(ticker_data)[1:32]
ticker_data_acf_2 = [ticker_data.autocorr(i) for i in range(1,32)]
test_df = pd.DataFrame([ticker_data_acf_1, ticker_data_acf_2]).T
test_df.columns = ['Pandas Autocorr', 'Statsmodels Autocorr']
test_df.index += 1
test_df.plot(kind='bar')
我注意到他们预测的值并不相同:
造成这种差异的原因是什么,应该使用哪些值?
【问题讨论】:
-
查看文档默认滞后是
1用于 pandas 版本和40用于 statsmodel -
尝试
unbiased=True作为 statsmodels 版本的选项。 -
您颠倒了图中的标签,我认为
unbiased=True应该使自相关系数更大。 -
autocorr来自pandas正在调用numpy.corrcoef而acf来自statsmodels正在调用numpy.correlate。我认为挖掘这些有助于找到输出差异的根源。 -
这里的第一条评论是对问题的回答吗?能解决这个问题就太好了
标签: python pandas statsmodels