如何绘制两个时间序列有一定滞后的相关图

时间:2019-04-05 12:18:02

标签: python python-3.x pandas plot correlation

我试图绘制两个时间序列之间的自相关,以寻找所需的滞后。 Python statsmodels.graphics.tsaplots库提供了plot_acf,用于调查时间序列对其自身的滞后影响。

我如何绘制这种滞后的相关性以探索一个影响另一个时间序列的时间序列,以了解应该选择哪个滞后时间?

2 个答案:

答案 0 :(得分:0)

为了明确起见,由于您正在尝试调查两个不同时间序列之间的相关性,因此您试图计算互相关性

没有“两个时间序列之间的自相关”之类的东西-自相关是指一个时间序列中跨独立滞后的相关。

让我们举个例子。假设有人希望检查某个位置的日照时间与最高温度之间的相互关系。此过程受季节滞后的影响,即最高温度将滞后于最大日照时间。

数据的互相关如下:

# Import Libraries
import numpy as np
import pandas as pd
import statsmodels
import statsmodels.tsa.stattools as ts
from statsmodels.tsa.stattools import acf, pacf
import matplotlib as mpl
import matplotlib.pyplot as plt
import quandl
import scipy.stats as ss

import os;
path="directory"
os.chdir(path)
os.getcwd()

#Variables
dataset=np.loadtxt("weather.csv", delimiter=",")
x=dataset[:,0]
y=dataset[:,1]
plt.xcorr(x, y, normed=True, usevlines=True, maxlags=365)
plt.title("Sunlight Hours versus Maximum Temperature")
plt.show()

计算最多365个滞后的互相关,这是数据图:

sunlight

在这种情况下,最大日照小时数与最高气温之间的最强相关性滞后了大约 40 天,也就是说,这是观察到两个时间序列之间最强的相关性。

在您的情况下,我建议绘制两个时间序列之间的互相关关系,以确定是否存在滞后,以及是否存在几个时间段。

答案 1 :(得分:0)

https://stackoverflow.com/users/7094244/michael-grogan感谢您对“自相关”和“互相关”的解释。我宁愿建议您以更“统计”的方式转换情节图像。例如,我做了这样的一个例子:

plt.xcorr(TS1, TS2, usevlines=True, maxlags=20, normed=True, lw=2)
plt.grid(True)
plt.axhline(0.2, color='blue', linestyle='dashed', lw=2)
plt.ylim([0, 0.3])
plt.title("Cross-correlation")

Cross-correlation plot image

从图中可以发现,我有一个非常特殊的情况,几乎没有相关性。理想情况下,您应该重写

plt.set_ylim([0, 0.3])

plt.set_ylim([0, 1]) 

查看所有相关范围。而且,通常,> = 0.2的相关被认为具有统计学意义。