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

Я хотел бы определить, насколько хороший ряд трендов B оценивает ряд трендов A. Я попробовал это с помощью OLS, но очевидно, что остатки автокоррелированы. Я попытался исправить с помощью Кокрановской процедуры Оркатта (https://onlinecourses.science.psu.edu/stat501/node/360), но это не устранило автокорреляцию. Я попробовал GSLAR-функцию statsmodels python с разными значениями rho, но также безуспешно.

Что мне не хватает? Является ли регрессионный анализ правильным аналитическим подходом? Что такое альтернативы?

Это данные:

import pandas as pd
dataA = [0.02921, 0.02946, 0.02971, 0.02996, 0.03021, 0.03042, 0.03063, 
0.03083, 0.031, 0.03117, 0.03129, 0.03142, 
0.0315, 0.03146, 0.03142, 0.03142, 0.03138, 0.03129, 0.03117, 0.03104,
0.03096, 0.03083, 0.03067, 0.0305, 0.03042, 0.03042, 0.03042, 0.03042, 
0.03046, 0.03058, 0.03075, 0.03087, 0.031, 0.03117, 0.03137, 0.03158, 
0.03175, 0.03196, 0.03221, 0.03242, 0.03258, 0.03271, 0.03279, 0.03292, 
0.03304, 0.03312]

dataB = [0.28416, 0.28756, 0.29716, 0.30777, 0.31047, 0.30262, 0.29666, 
0.28918, 0.28008, 0.28037, 0.27909, 0.2738, 0.28378, 0.29538, 0.2927, 
0.29232, 0.28845, 0.27793, 0.27858, 0.29067, 0.29573, 0.29336, 0.28964, 
0.28601, 0.273, 0.26278, 0.26786, 0.27156, 0.27272, 0.28691, 0.30556, 
0.3109, 0.31243, 0.31083, 0.31534, 0.32455, 0.33221, 0.33714, 0.33397, 
0.32347, 0.31899, 0.31567, 0.30213, 0.29288, 0.29132, 0.29346]

daterange = pd.date_range(start='2012-07-31', end='2016-04-30',freq='M')
A = pd.Series(dataA, daterange)
B = pd.Series(dataB, daterange)

данные A и данные B были получены из сезонной декомпозиции (аддитивная модель):

from statsmodels.tsa.seasonal import seasonal_decompose
ADecomp = seasonal_decompose(ARaw) 
dataA = ADecomp.trend
BDecomp = seasonal_decompose(BRaw) 
dataB = BDecomp.trend

person drosophilus    schedule 28.12.2016    source источник
comment
Вы можете получить более подробную информацию на stats.stackexchange.com.   -  person Paul H    schedule 01.01.2017
comment
спасибо за подсказку. Я думаю, что вы полностью правы!   -  person drosophilus    schedule 02.01.2017


Ответы (1)


Я предполагаю, что это больше вопрос эконометрики, чем вопрос Python.

Первое, что нужно сделать, это проверить, являются ли оба ряда стационарными.

Если стационарно: вы можете регрессировать их через OLS, чтобы получить оценку. Стационарный ряд — это ряд, в котором дисперсия наименьшая в порядке разности.

Если не стационарно: 1) Проведите тест на коинтеграцию по методу Энгла Грейнджера. Два нестационарных ряда могут быть совместно стационарными. Вы также можете запустить OLS здесь. 2) Если они не коинтегрированы, вам придется взять ряд разностей n-го порядка, где они стационарны, а затем запустить МНК, чтобы получить предикторы.

Надеюсь, что это ответ на ваш вопрос.

person Oxymoron88    schedule 28.12.2016
comment
спасибо за ваше предложение! Вы дали мне необходимую информацию, чтобы найти правильный подход. - person drosophilus; 02.01.2017