Моделирование нескольких переменных временных рядов с ежедневными наблюдениями менее 2 периодов (менее 2 лет) - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь использовать переменную объема твиттера в день и переменную частоты трендов Google в день, чтобы предсказать цену нестабильной криптовалюты. В частности, я пытаюсь воспроизвести модель в Abraham, J., Higdon, D., Nelson, J., & Ibarra, J. (2018). Прогнозирование цен на криптовалюту с использованием количества твитов и анализа настроений. Обзор SMU Data Science, 1 (3), 1. Вот ссылка на эту статью Монета довольно новая, и у меня есть данные только за 605 дней. Я хочу одно: определить соответствие различных моделей (например, если включение одной переменной является более предсказуемой, чем другая), и два: какой подход лучше всего прогнозировать через несколько дней. Я пробовал использовать ARIMA для нескольких временных рядов, а также функцию tslm (), хотя я не могу разложить свои данные, и есть проблемы, потому что период (лет) меньше двух, что затрудняет перевод моих данных в стационарный . Вдобавок некоторые из моих переменных, похоже, имеют более экспоненциальный тренд, чем линейный. Ниже приведены три мои переменные ts ().

price <- ts(df[, 4], start = c(2018, 342), end=c(2020, 214), frequency=365)
tweetvol <- ts(df[, 3], start = c(2018, 342), end=c(2020, 214), frequency=365)
googletrend <- ts(df[, 2], start = c(2018, 342), end=c(2020, 214), frequency=365) 

Вот график трех переменных без каких-либо преобразований. Я взял журнал () каждой переменной, чтобы все они были видны на одном графике. Имейте в виду, что это сгладило большую часть тенденции.

autoplot(cbind(log(price), log(tweetvol), log(googletrend)))

Ссылка на график в Google Документах

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

model <- lm(price ~ vol + trendvalue, df)
summary(model)
Call:
lm(formula = price ~ vol + trendvalue, data = df)

Residuals:
       Min         1Q     Median         3Q        Max 
-0.0082747 -0.0012608 -0.0003695  0.0009277  0.0109091 

Coefficients:
                Estimate   Std. Error t value            Pr(>|t|)    
(Intercept)  0.004348434  0.000131397  33.094 <0.0000000000000002 ***
vol          0.000004993  0.000000315  15.854 <0.0000000000000002 ***
trendvalue  -0.000007426  0.000016745  -0.443               0.658    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.002311 on 600 degrees of freedom
Multiple R-squared:  0.4044,    Adjusted R-squared:  0.4025 
F-statistic: 203.7 on 2 and 600 DF,  p-value: < 0.00000000000000022

Я думаю, что функция tslm () будет моим лучшим выбором в отличие от ARIMA, если я могу обойти стационарные проблемы (мне может потребоваться изменять мои данные ежедневно и еженедельно, чтобы периоды были больше 2), поскольку я не уверен в предположениях о причинно-следственной связи в ARIMA. Я также изучал подходы машинного обучения (H2O), но похоже, что методы черного ящика - не лучший инструмент для прогнозирования временных рядов. Я открыт для новых идей и подходов и хотел бы немного пощупать, прежде чем погрузиться в работу ARIMA или tslm (), если это не лучший инструмент для работы. Спасибо всем, что нашли время прочитать этот объемный пост. Я аспирант по промышленной организационной психологии и хочу улучшить свои навыки работы с данными - у меня очень мало опыта работы с переменными временных рядов или прогнозирования рыночных цен, и я ценю любое направление, которое вы все можете предоставить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...