library(tidyverse)
library(tsibble)
library(ggplot2)
library(lubridate)
library(readxl)
library(gridExtra)
library(dplyr)
library(patchwork)
library(zoo)
library(fable)
library(feasts)
library(fabletools)
Lab_3_Kordyuk_Report
Лабораторна робота №3
<- as_tsibble(read_csv("TSLA.csv"), index = Date) %>%
tesla glimpse()
Rows: 965
Columns: 7
$ Date <date> 2019-01-02, 2019-01-03, 2019-01-04, 2019-01-07, 2019-01-0…
$ Open <dbl> 20.40667, 20.46667, 20.40000, 21.44800, 22.79733, 22.36667…
$ High <dbl> 21.00867, 20.62667, 21.20000, 22.44933, 22.93400, 22.90000…
$ Low <dbl> 19.92000, 19.82533, 20.18200, 21.18333, 21.80133, 22.09800…
$ Close <dbl> 20.67467, 20.02400, 21.17933, 22.33067, 22.35667, 22.56867…
$ `Adj Close` <dbl> 20.67467, 20.02400, 21.17933, 22.33067, 22.35667, 22.56867…
$ Volume <dbl> 174879000, 104478000, 110911500, 113268000, 105127500, 814…
# Заповнюємо пропуски
= tesla %>%
tesla fill_gaps() %>%
fill(Open, .direction = "down") %>%
fill(High, .direction = "down") %>%
fill(Low, .direction = "down") %>%
fill(Close, .direction = "down") %>%
fill(`Adj Close`, .direction = "down") %>%
fill(Volume, .direction = "down")
Візуалізація:
%>%
tesla autoplot(Volume)
%>%
tesla autoplot(High)
%>%
tesla autoplot(Low)
Середнє значення для кожної зміної та середньоквадратичне відхилення
<- function(x){
func <- mean(x, na.rm = TRUE)
m <- var(x, na.rm = TRUE)
v
return(c(avg = m, var = v ))
}
%>%
tesla features(Volume, list(~ func(.)))
# A tibble: 1 × 2
avg var
<dbl> <dbl>
1 133914809. 9.00e15
%>%
tesla features(High, list(~ func(.)))
# A tibble: 1 × 2
avg var
<dbl> <dbl>
1 162. 14729.
%>%
tesla features(Low, list(~ func(.)))
# A tibble: 1 × 2
avg var
<dbl> <dbl>
1 155. 13415.
Висновок: розрахували середнє знчаення та середньоквадратичне відхилення для трьох змінних. Можна зробити висновки, що середня кількість продажів акцій - 133914809, середня найвища ціна акції за день - 162, а середня найнижча ціна - 155.
Квантелі
%>%
tesla features(Volume, quantile)
# A tibble: 1 × 5
`0%` `25%` `50%` `75%` `100%`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 29401800 72903000 100254900 160054125 914082000
%>%
tesla features(High, quantile)
# A tibble: 1 × 5
`0%` `25%` `50%` `75%` `100%`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 12.4 25.7 196. 260. 414.
%>%
tesla features(Low, quantile)
# A tibble: 1 × 5
`0%` `25%` `50%` `75%` `100%`
<dbl> <dbl> <dbl> <dbl> <dbl>
1 11.8 23.8 182. 250. 406.
Висновок: перший квантиль (0%) та останній (100%), показують нам мінімальні та максимальні значення. 3-й квантиль (50%) - медіана. Можна побачити, що дані розподілені досить нерівномірно.
Коефіцієнт Херста
%>%
tesla features(Volume, list(coef_hurst))
# A tibble: 1 × 1
coef_hurst
<dbl>
1 0.999
%>%
tesla features(High, list(coef_hurst))
# A tibble: 1 × 1
coef_hurst
<dbl>
1 1.00
%>%
tesla features(Low, list(coef_hurst))
# A tibble: 1 × 1
coef_hurst
<dbl>
1 1.00
Висновок: у даному випадку, всі зачення знаходятся у проміжку від 0.5 до 1, це говорить про те, що часовий ряд характеризується ефектом довготривалої пам’яті та має можливість досліджувати тренд.
Показник автокореляції
%>%
tesla features(Volume, feat_acf)
# A tibble: 1 × 7
acf1 acf10 diff1_acf1 diff1_acf10 diff2_acf1 diff2_acf10 season_acf1
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.841 3.29 -0.0794 0.0539 -0.496 0.258 0.475
%>%
tesla features(High, feat_acf)
# A tibble: 1 × 7
acf1 acf10 diff1_acf1 diff1_acf10 diff2_acf1 diff2_acf10 season_acf1
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.998 9.80 0.117 0.0240 -0.389 0.184 0.987
%>%
tesla features(Low, feat_acf)
# A tibble: 1 × 7
acf1 acf10 diff1_acf1 diff1_acf10 diff2_acf1 diff2_acf10 season_acf1
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.998 9.78 0.0947 0.0121 -0.429 0.199 0.986
Висновок: найбільший показник автокореляції має найвища ціна акції за дент, що говорить тісний зв’язок між попереднім та наступним значенням. Найменший показник має об’єм проданих акцій за день.
Корелограма автокореляції
%>%
tesla ACF(Volume, lag_max = 1300) %>%
autoplot() + labs(title = "Корелограма автокореляцій (Об'єм проданих акцій за день)")
# З цього графіка візуально бачимо як попередні значення об'єма продажів впливають на наступні, присутній досить слабкий взаємозв'язок, можемо стверджувати, що, скоріш за все, сказати точно яким завтра буде об'єм продажів неможливо, бо це залжеить від дуже великої кількості факторів, а показник продажів за попередній день малоінформативний.
%>%
tesla ACF(High, lag_max = 1300) %>%
autoplot() + labs(title = "Корелограма автокореляцій (Найвища ціна акції за день)")
# З цього графіка візуально бачимо як попередні значення найвищої ціни впливають на наступні, присутній досить сильний взаємозв'язок, можемо стверджувати, що скоріш за все, якщо сьогодні була висока максимальна ціна, то і завтра вона різко низькою не буде, а буде схожою. Коефіцієнти автокореляції досить високі.
%>%
tesla ACF(Low, lag_max = 1300) %>%
autoplot() + labs(title = "Корелограма автокореляцій (Найнижча ціна акції за день)")
# З цього графіка візуально бачимо як попередні значення найнижчої ціни впливають на наступні, присутній досить сильний взаємозв'язок, можемо стверджувати, що скоріш за все, якщо сьогодні була висока мінімальна ціна, то і завтра вона різко низькою не буде, а буде схожою. Коефіцієнти автокореляції досить високі.
Розрахунок лямди Бокса-Кокса за методом Герреро
%>%
tesla features(Volume, guerrero)
# A tibble: 1 × 1
lambda_guerrero
<dbl>
1 -0.533
%>%
tesla features(High, guerrero)
# A tibble: 1 × 1
lambda_guerrero
<dbl>
1 0.117
%>%
tesla features(Low, guerrero)
# A tibble: 1 × 1
lambda_guerrero
<dbl>
1 0.0663
Тест Бокса-Пірса на наявність автокореляції
%>%
tesla features(Volume, box_pierce)
# A tibble: 1 × 2
bp_stat bp_pvalue
<dbl> <dbl>
1 988. 0
%>%
tesla features(High, box_pierce)
# A tibble: 1 × 2
bp_stat bp_pvalue
<dbl> <dbl>
1 1391. 0
%>%
tesla features(Low, box_pierce)
# A tibble: 1 × 2
bp_stat bp_pvalue
<dbl> <dbl>
1 1391. 0
Тест перевіряє загальну випадковість на основі кількох лагів. значення р = 0, що означає, що дані статистично значущі.
Декомпозиція
<- ts(tesla$Volume, start = c(2019, 1), end = c(2022, 10), frequency = 12)
tesla_ts
as_tsibble(tesla_ts) %>%
model(STL(value ~ trend(window = 12) + season(window = "periodic"))) %>%
components() %>%
autoplot() + theme_minimal() +
labs(x = "Year", title = "Декомпозиція часового ряду щомісячного об'єму продажів акцій")
<- ts(tesla$High, start = c(2019, 1), end = c(2022, 10), frequency = 12)
tesla_ts
as_tsibble(tesla_ts) %>%
model(STL(value ~ trend(window = 12) + season(window = "periodic"))) %>%
components() %>%
autoplot() + theme_minimal() +
labs(x = "Year", title = "Декомпозиція часового ряду щомісячної максимальної ціни")
<- ts(tesla$Low, start = c(2019, 1), end = c(2022, 10), frequency = 12)
tesla_ts
as_tsibble(tesla_ts) %>%
model(STL(value ~ trend(window = 12) + season(window = "periodic"))) %>%
components() %>%
autoplot() + theme_minimal() +
labs(x = "Year", title = "Декомпозиція часового ряду щомісячної мінамальної ціни")