matplotlib中的自相关和pandas.tools.plotting中的自相关有什么区别?

4 投票
1 回答
1946 浏览
提问于 2025-04-17 22:06

在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()

源代码:

Matplotlib

Pandas

撰写回答