Получение неожиданного p-значения 1,0 при сравнении двух идентичных временных рядов в тесте причинности Грейнджера с Python - PullRequest
0 голосов
/ 27 мая 2020

У меня есть два временных ряда, которые я хочу статистически проверить, один связан с другим с учетом некоторого неизвестного временного интервала. Я новичок в сравнении временных рядов, поэтому я следую этому учебнику .

В моем коде ниже у меня есть df с x и y, которые являются числовыми ценности. Однако, поскольку значения в y со временем в 100-1000 раз больше, чем x, я не ожидал бы, что статистический тест покажет, что они похожи или идентичны.

import numpy as np
from statsmodels.tsa.stattools import grangercausalitytests

maxlag = 10
test = 'ssr_ftest' # options are 'params_ftest', 'ssr_ftest', 'ssr_chi2test', and 'lrtest'

df = df[['date', 'x', 'y']]
df['x_v2'] = df['x'] + 1

var_pair_p1 = ['x', 'x']
var_pair_p2 = ['x', 'x_v2']
var_pair_p3 = ['x', 'y']

test_result_p1 = grangercausalitytests(df_merged[var_pair_p1], maxlag=maxlag, verbose=False)
test_result_p2 = grangercausalitytests(df_merged[var_pair_p2], maxlag=maxlag, verbose=False)
test_result_p3 = grangercausalitytests(df_merged[var_pair_p3], maxlag=maxlag, verbose=False)

p_values_p1 = [round(test_result_p1[i+1][0][test][1], 4) for i in range(maxlag)]
min_p_value_p1 = np.min(p_values_p1)
max_p_value_p1 = np.max(p_values_p1)
mean_p_value_p1 = np.mean(p_values_p1)

p_values_p2 = [round(test_result_p2[i+1][0][test][1], 4) for i in range(maxlag)]
min_p_value_p2 = np.min(p_values_p2)
max_p_value_p2 = np.max(p_values_p2)
mean_p_value_p2 = np.mean(p_values_p2)

p_values_p3 = [round(test_result_p3[i+1][0][test][1], 4) for i in range(maxlag)]
min_p_value_p3 = np.min(p_values_p3)
max_p_value_p3 = np.max(p_values_p3)
mean_p_value_p3 = np.mean(p_values_p3)

print('p-value of {}: min={}, max={}, mean={}'.format(test, min_p_value_p1, max_p_value_p1, mean_p_value_p1))
print('p-value of {}: min={}, max={}, mean={}'.format(test, min_p_value_p2, max_p_value_p2, mean_p_value_p2))
print('p-value of {}: min={}, max={}, mean={}'.format(test, min_p_value_p3, max_p_value_p3, mean_p_value_p3))

Выход

 p-value of ssr_ftest: min=1.0, max=1.0, mean=1.0
 p-value of ssr_ftest: min=1.0, max=1.0, mean=1.0
 p-value of ssr_ftest: min=0.0, max=0.0257, mean=0.00413

Насколько я понимаю, значение p <0,05 указывает, что один временной ряд по Грейнджеру вызывает другой. Или, как я понимаю, два временных ряда схожи или идентичны, если задержка не является фактором. </p>

Если это так, почему я не получаю p-value <0,05 для <code>var_pair_p1 = ['x', 'x'] и var_pair_p1 = ['x', 'x_v2']? И наоборот, почему я получаю значение p <0,05 для <code>var_pair_p3 = ['x', 'y'], тогда как ожидается, что x и y не связаны?

...