Изучение моделирования временных рядов

Как анализировать несколько переменных временных рядов

Моделирование временных рядов с помощью кода Python

Добро пожаловать назад! Это 3-й пост в серии постов, посвященный анализу и моделированию данных временных рядов с помощью кода Python. В 1-м посте мы обсудили фундаментальную статистику: Моделирование временных рядов с помощью кода Python: фундаментальная статистика. Вторая публикация посвящена анализу одной переменной временного ряда: Моделирование временных рядов с помощью кода Python: как анализировать единственную переменную временного ряда.

В этом посте мы продолжим изучать, как анализировать несколько переменных временных рядов.

1. Скользящая ковариация

Ковариация - это мера совместной линейной изменчивости двух случайных величин. Саму ковариацию сложно интерпретировать, так как она зависит от переменной величины. Для нормализации ковариации часто используется коэффициент корреляции. Обычно используются два коэффициента корреляции: коэффициент корреляции Пирсона и коэффициент корреляции ранжирования Спирмена.

Значение коэффициента корреляции Пирсона находится в диапазоне от -1 до 1, где -1 означает сильную отрицательную линейную зависимость, 0 означает отсутствие линейной зависимости, а 1 означает сильную положительную линейную зависимость.

Значение рейтингового коэффициента корреляции Спирмена также находится между -1 и 1. Однако коэффициент ранжирования Спирмена измеряет монотонность между двумя переменными, где -1 означает сильную отрицательную монотонную взаимосвязь, 0 означает отсутствие монотонной взаимосвязи и 1 означает сильную положительную монотонные отношения. Чтобы понять монотонность между двумя переменными, мы можем подумать о том, как (y₁¹-y₁²) изменяется с (y₂¹-y₂²): если они изменяются в одном направлении, то две переменные являются положительно монотонными; в противном случае они отрицательно монотонны.

Следующее моделирование показывает разницу между коэффициентом корреляции Пирсона и коэффициентом корреляции ранжирования Спирмена. Когда y1 и y2 показывают линейную зависимость, коэффициент корреляции Пирсона и коэффициент корреляции ранжирования Спирмена близки к 1. Однако, когда y1 и y2 показывают монотонную связь, коэффициент корреляции Пирсона становится меньше, чем коэффициент ранжированной корреляции Спирмена.

import numpy as np
from scipy.stats import spearmanr
from scipy.stats import pearsonr
import matplotlib.pyplot as plt
N=20
x = np.linspace(1,N,num=N)
y1 = x*5 + np.random.normal(0, 3, N)
y2 = np.exp(0.3*x) + np.random.normal(0, 3, N)
#y2 = y1 + np.random.normal(0, 3, N)
plt.scatter(x,y1,color='r',label='y1 = x*5 + np.random.normal(0, 3, N)')
plt.scatter(x,y2,color='b',label='y2 = y1 + np.random.normal(0, 3, N)')
plt.legend(loc='upper left')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,N)
plt.ylim(min(min(y1),min(y2)),max(max(y1),max(y2)))

2. Ложные отношения и скользящая коинтеграция

Чтобы смоделировать данные временного ряда y с использованием данных временного ряда x, мы обычно требуем, чтобы и x, и y были стационарным процессом I (0). Если вы не знакомы с тестом стационарности одной переменной временного ряда, обратитесь к моему предыдущему сообщению: Моделирование временных рядов с помощью кода Python: как анализировать единственную переменную временного ряда .

Когда обе переменные временного ряда нестационарны, они могут показывать сильную корреляцию, даже если лежащие в основе процессы генерации не имеют случайных связей. Эта сильная корреляция может быть вызвана исключительно тем фактом, что две переменные временного ряда имеют непостоянное среднее. Это явление называется ложными отношениями.

Однако при особых обстоятельствах мы можем моделировать данные временного ряда y, используя данные временного ряда x, когда x и y оба являются процессами I (1) и коинтегрированы. По сути, коинтеграция означает, что существует усиливающий эффект между x и y. В любой момент мы всегда можем умножить x на тот же параметр, чтобы получить значение, близкое к y. Таким образом, невязка - это I (0) процесс.

Коинтеграцию можно легко протестировать с помощью библиотеки statsmodels.

import numpy as np
from statsmodels.tsa.stattools import coint
N=20
x = np.linspace(1,N,num=N)
y1 = x*5 + np.random.normal(0, 3, N)
y2 = np.exp(0.3*x) + np.random.normal(0, 3, N)
print(f'P value is {coint(y1,y2)[1]}')

Выход:

Значение P составляет 0,9859002580259643

Поскольку значение P превышает уровень значимости 0,05, мы не можем отклонить нулевую гипотезу об отсутствии коинтеграции.

Резюме

В этом посте мы рассмотрели, как анализировать ковариацию и коинтеграцию нескольких переменных временных рядов. В следующем посте мы продвинемся на один шаг дальше, чтобы изучить, как использовать линейную регрессию для моделирования данных временных рядов. Пожалуйста, не переключайтесь!