Lab_3_Kordyuk_Report

Author

Kordyuk Mykyta

Лабораторна робота №3

library(tidyverse)
library(tsibble)
library(ggplot2)
library(lubridate)
library(readxl)
library(gridExtra)
library(dplyr)
library(patchwork)
library(zoo)
library(fable)
library(feasts)
library(fabletools)
tesla <- as_tsibble(read_csv("TSLA.csv"), index = Date) %>%
  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)

Середнє значення для кожної зміної та середньоквадратичне відхилення

func <- function(x){
  m <- mean(x, na.rm = TRUE)
  v <- var(x, na.rm = TRUE)

  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, що означає, що дані статистично значущі.

Декомпозиція

tesla_ts <- ts(tesla$Volume, start = c(2019, 1), end = c(2022, 10), frequency = 12)

as_tsibble(tesla_ts) %>%
  model(STL(value  ~ trend(window = 12) + season(window = "periodic"))) %>%
  components() %>% 
  autoplot() + theme_minimal() +
  labs(x = "Year", title = "Декомпозиція часового ряду щомісячного об'єму продажів акцій")

tesla_ts <- ts(tesla$High, start = c(2019, 1), end = c(2022, 10), frequency = 12)

as_tsibble(tesla_ts) %>%
  model(STL(value  ~ trend(window = 12) + season(window = "periodic"))) %>%
  components() %>% 
  autoplot() + theme_minimal() +
  labs(x = "Year", title = "Декомпозиція часового ряду щомісячної максимальної ціни")

tesla_ts <- ts(tesla$Low, start = c(2019, 1), end = c(2022, 10), frequency = 12)

as_tsibble(tesla_ts) %>%
  model(STL(value  ~ trend(window = 12) + season(window = "periodic"))) %>%
  components() %>% 
  autoplot() + theme_minimal() +
  labs(x = "Year", title = "Декомпозиція часового ряду щомісячної мінамальної ціни")