ACF 图和操作数的问题
Problems with ACF plots and operands
这段代码过去 运行 很好,但由于未知原因现在不再适用了。它在绘制整个第二个 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 库,但我怀疑这是我出现问题的原因。提前谢谢你
问题在于,在绘制差分时间序列(具有 99 个观测值)的 ACF 时,您将滞后数设置为等于原始时间序列(具有 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()
这段代码过去 运行 很好,但由于未知原因现在不再适用了。它在绘制整个第二个 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 库,但我怀疑这是我出现问题的原因。提前谢谢你
问题在于,在绘制差分时间序列(具有 99 个观测值)的 ACF 时,您将滞后数设置为等于原始时间序列(具有 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()