这段代码过去运行得很好,但是由于未知原因,它不再可用了。以某种方式绘制整个第二个acf图存在问题。
import numpy as np, pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})
# Import data
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv',
names=['value'], header=0)
# Original Series
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.value); axes[0, 0].set_title('Original Series')
plot_acf(df.value, ax=axes[0, 1], lags = np.arange(len(df)))
# 1st Differencing
axes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.value.diff().dropna(), ax=axes[1, 1], lags = np.arange(len(df)))
plt.show()
Output: ValueError: operands could not be broadcast together with shapes (98,) (97,) (98,)
有人知道如何解释此输出吗?我想dropna函数会产生问题,但是我不确定这是否是问题的根源。就像我说的那样,它过去工作正常,数据仍然相同。我已经更新了statsmodels库,但是我怀疑这是造成我问题的原因。预先谢谢你
问题是,在绘制差异时间序列的ACF(具有99个观测值)时,您将滞后次数设置为等于原始时间序列中的观测值(具有100个观测值),即滞后大于观察次数。
要解决该问题,您需要在第二个ACF图中将lags = np.arange(len(df))
替换为lags = np.arange(len(df) - 1)
。
请注意,当您计算时间序列的第一个差异时,您会丢失一个观测值,该观测值设置为NaN(特别是,第一个观测值设置为NaN)。因此,用dropna()
删除丢失的值后,您的观察结果减少了一个。
import numpy as np, pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})
# Import data
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/wwwusage.csv', names=['value'], header=0)
# Original Series
fig, axes = plt.subplots(2, 2, sharex=True)
axes[0, 0].plot(df.value); axes[0, 0].set_title('Original Series')
plot_acf(df.value, ax=axes[0, 1], lags=np.arange(len(df)))
# 1st Differencing
axes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.value.diff().dropna(), ax=axes[1, 1], lags=np.arange(len(df) - 1))
plt.show()