matplotlib中的自相关和pandas.tools.plotting中的自相关有什么区别?
在matplotlib中计算自相关和在其他库(比如pandas.tools.plotting、sm.graphics.tsa.plot_acf等)中计算自相关有什么不同呢?
从下面的代码可以看出,这两个库返回的自相关值是不同的。matplotlib返回的是所有大于零的自相关值,而pandas.tools.plotting则返回了一些负的自相关值(除了置信区间和负的x轴)。
import matplotlib.pyplot as plt
import statsmodels.api as sm
import pandas as pd
from pandas.tools.plotting import autocorrelation_plot
dta = sm.datasets.sunspots.load_pandas().data
dta.index = pd.Index(sm.tsa.datetools.dates_from_range('1700', '2008'))
del dta["YEAR"]
plt.acorr(dta['SUNACTIVITY'],maxlags = len(dta['SUNACTIVITY']) -1, linestyle = "solid", usevlines = False, marker='')
plt.show()
autocorrelation_plot(dta['SUNACTIVITY'])
plt.show()
1 个回答
2
在使用pandas绘图和statsmodel图形时,自动相关性计算之前会对数据进行标准化处理。这些库会先减去数据的平均值,然后再用标准差来除以数据。
使用标准化时,它们假设你的数据是按照高斯分布生成的,也就是有一个特定的平均值和标准差。但实际上,这种情况不一定成立。
相关性是很敏感的。这两个库(matplotlib和pandas绘图)都有各自的缺点。
用下面的代码生成的图形,使用matplotlib和pandas绘图或statsmodels图形,结果是一样的。
dta['SUNACTIVITY_2'] = dta['SUNACTIVITY']
dta['SUNACTIVITY_2'] = (dta['SUNACTIVITY_2'] - dta['SUNACTIVITY_2'].mean()) / (dta['SUNACTIVITY_2'].std())
plt.acorr(dta['SUNACTIVITY_2'],maxlags = len(dta['SUNACTIVITY_2']) -1, linestyle = "solid", usevlines = False, marker='')
plt.show()
源代码: