Rodzaje danych

Przekrojowe = jednokrotny pomiar w tym samym momencie

Szeregi czasowe = wielokrotny pomiar powtarzany w pewnym stałym odstępie czasu (dane roczne, kwartalne, miesięczne, tygodniowe, dzienne itd)

W szeregu czasowym można zwykle wyróżnić długookresową tendencję (trend); powtarzalne wahania (sezonowość, np. liczba zgonów rośnie zimą, a spada latem); resztę traktuje się jako wartości przypadkowe. Reasumując:

\[TS = T + S + E\]

lub

\[TS = T \cdot S \cdot E\]

Pierwszy wariant nazywa się addytywny drugi multiplikatywny. W wariancie addytywnym zmiany (trendu/sezonowości) okres/okres są stałe; w wariancie multiplikatywnym tempo zmiany jest stałe, tj. zjawisko okres/okres rośnie/spada o x%. W jednostkach bezwzględnych oznacza to, że rośnie/spada coraz szybciej.

Celem statystycznej analizy szeregów czasowych jest opisanie oraz prognozowanie zmian wartości obserwowanych w czasie (na podstawie danych historycznych).

Generalnie jest to trudne zadanie, mówiąc oględnie :-) Ponieważ jest trudne, to metod i modeli jest multum. W tym dokumencie omówimy metody elementarne: wykres liniowy, średnie tempo zmian oraz trend liniowy

Pokażemy to na przykładach, ograniczając teorię do minimum.

Wykres liniowy

W przypadku szeregów czasowych wykres liniowy (ewentualnie punktowy lub słupkowy) jest najpopularniejszy. Przykład: z bazy danych WHO (https://www.who.int/data/gho) pobrano informacje nt odsetka osób dorosłych z nadwagą (BMI 30 i więcej; Prevalence of obesity among adults…) dla Polski w latach 1975–2016.

Uwaga: WHO podaje wskaźniki surowe (crude) i standaryzowane; pobrano surowe

Wykres liniowy

## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Interpretacja: czy zjawisko rośnie czy spada; jak szybko rośnie jak szybko spada.

Uwaga: można manipulować wykresem poprzez zmianę proporcji (współczynnika proporcji czyli po angielsku aspect ratio)

Teraz (optycznie) wolniej rośnie (proporcja wysokość/szerokość jest większa)…

Oraz (albo raczej pośrednio) zakresem na osi OY;

Jeżeli oś OY nie zaczyna się od zera to krzywa będzie bardziej stroma bo efektywnie wykres będzie miał większe proporcje wysokość/szerokość:

Puryści uważają że każdy wykres powinien zaczynać się od zera. Są przykłady zeznań przed komisją senacją w USA gdzie dowody prezentowane na wykresach z niezerową linią bazową były dyskwalifikowane jako manipulacja.

Słynna książka How to lie with statistics zawiera rozdział na temat zatytułowany The Gee-Whiz Graphs; https://en.wikipedia.org/wiki/Misleading_graph

Można umieścić wiele krzywych celem porównania:

Jeżeli krzywe się dobrze zachowują (czytaj: nie przecinają się) na to sens; w innym przypadku trudno jest porównać krzywe. Nie należy też przesadzać z liczbą krzywych na wykresie. Na pewno coś co wygląda jak splątany makaron będzie bezużyteczne…

Punktowy:

Nie uważam za dobry pomysł. Nie podkreśla ciągłości zjawisk w czasie

Słupkowy:

Jest OK. Ale wielosłupki zamiast wielu linii prowadzą do problemów:

Oba dla mnie nieczytelne a do tego ten drugi wykres daje mylne wrażenie że łącznie otyłych jest 3/4 ludności (jak ktoś nieuważnie czyta)

Roczna i miesięczna liczba zgonów

Liczba zgonów w Polsce (źródło: tabela demo_magec w bazie Eurostat) oraz miesięczna liczba zgonów w Polsce (źródło: tabela demo_mmonth w bazie Eurostat)

Dane miesięczne

Średnie tempo zmian

Wskaźniki dynamiki (indeksy) określają względną zmianę wartości szeregów czasowych (popularny procent zmiany), czyli \(y_t/y_0\). Jeżeli podstawą porównań jest okres poprzedni \(y_t/y_{t-1}\) to indeks nazywany jest łańcuchowym, jeżeli podstawa porównań jest stała, tj. \(y_t/y_{c}\), to indeks nazywany jest jednopodstawowy.

Indeks zwykle wyrażone są w procentach jeżeli \(y_t = 115\) a \(y_0 = 100\), to \(y_t/y_0 \cdot 100 =15\). Zjawisko ma o 15% wyższy poziom w roku \(t\).

Używamy średniej geometrycznej do obliczenia średniego tempa zmian zjawiska w czasie:

\[\bar y_g = \sqrt[n-1]{\frac{y_2}{y_1} \frac{y_3}{y_2} \cdots \frac{y_n}{y_{n-1}}} = \sqrt[n-1]{\frac{y_n}{y_1}} \]

Średnie tempo zmian liczby zgonów w Polsce w latach 2000–2024 wyniosło 0.435719, tj. przeciętnie w tym okresie zgony rosną o 0,4%. Wartość indeksu \(y_{2024}/y_{2000}\) wynosi 110.9983778%.

Trend liniowy

Trend liniowy jest opisany równaniem:

\[ y = \beta_0 + \beta_1 t + \epsilon \] gdzie: zmienna \(t\) to numer kolejnego okresu (np. \(t=1,\ldots,n\)) \(\epsilon\) oznacza składnik losowy.

Parametry \(\beta_0\) oraz \(\beta_1\) są szacowane metodą najmniejszych kwadratów. Ocena modelu: jak w przypadku modelu regresji liniowej: wielkość współczynnika determinacji + istotność parametru \(\beta_1\). Dla danych dotyczących liczby zgonów otrzymano następujące wyniki:

## 
## Call:
## lm(formula = zgony ~ t, data = z2)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -32023 -11450  -2498   2490  90381 
## 
## Coefficients:
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept) 345605.5    10713.3  32.260 < 0.0000000000000002 ***
## t             3796.9      720.7   5.269             0.000024 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25980 on 23 degrees of freedom
## Multiple R-squared:  0.5469, Adjusted R-squared:  0.5272 
## F-statistic: 27.76 on 1 and 23 DF,  p-value: 0.00002402

W latach 2000–2024 przeciętny roczny wzrost liczby zgonów wynosił około 3,8 tysiąca osób. Wielkość ta jest istotna statystycznie a wartość współczynnika determinacji wynosi 54%.

Przypatrując się wykresowi dostrzeżemy bez trudu, że obserwacje z lat 2020–22 mocno nie leżą na linii trendu i wiemy dlaczego. Takie zjawisko nazywa się uczenie zaburzeniem strukturalnym. Można poprawić model dodając do niego drugą sztuczną (dummy) zmienną, której wartości będą się równać 1 dla lat 2020–2022 oraz zero w pozostałych latach.

Taką zmienną nazywa się też często zmienną zero-jedynkową

\[ y = \beta_0 + \beta_1 t + \beta_2 \textrm{covid} + \epsilon \]

gdzie: \(\textrm{covid}=1\) w latach 2020–2022 oraz 0 w pozostałych

## 
## Call:
## lm(formula = zgony ~ t + covid, data = z3)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -35545  -3981  -1063   2472  37744 
## 
## Coefficients:
##             Estimate Std. Error t value             Pr(>|t|)    
## (Intercept) 356997.5     5390.6  66.225 < 0.0000000000000002 ***
## t             2219.5      396.2   5.602         0.0000124230 ***
## covid        75946.6     8791.5   8.639         0.0000000161 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12680 on 22 degrees of freedom
## Multiple R-squared:  0.8968, Adjusted R-squared:  0.8875 
## F-statistic: 95.62 on 2 and 22 DF,  p-value: 0.00000000001409

Po uwzględnieniu efektu COVID, liczba zgonów w okresie 2000–2024 rosła średnio o ok. 2,2 tys. rocznie. W latach 2020–2022 liczba zgonów była przeciętnie wyższa o ok. 75 tys. rocznie w porównaniu do poziomu wynikającego z trendu.

Oba współczynniki są istotne statystycznie, a wartość współczynnika determinacji wynosi prawie 90% (poprzednio 54%).

Sezonowość

Prosty model trendu dla danych miesięcznych będzie — z oczywistych względów — słabo dopasowany do danych.

## 
## Call:
## lm(formula = zgony ~ t, data = z2m)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7153.5 -2311.3  -781.5   939.6 29093.7 
## 
## Coefficients:
##              Estimate Std. Error t value            Pr(>|t|)    
## (Intercept) 29168.300    473.043  61.661 <0.0000000000000002 ***
## t              24.303      2.645   9.188 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4148 on 307 degrees of freedom
## Multiple R-squared:  0.2157, Adjusted R-squared:  0.2131 
## F-statistic: 84.41 on 1 and 307 DF,  p-value: < 0.00000000000000022

W latach 2000–2024 przeciętny miesięczny wzrost liczby zgonów wynosił około 24 osoby. Wielkość ta jest istotna statystycznie a wartość współczynnika determinacji wynosi zaledwie 21%.

Dodajmy zmienną covid:

## 
## Call:
## lm(formula = zgony ~ t + covid, data = z3m)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7417.5 -2063.2  -561.7  1211.3 24323.0 
## 
## Coefficients:
##              Estimate Std. Error t value             Pr(>|t|)    
## (Intercept) 29933.648    430.542  69.525 < 0.0000000000000002 ***
## t              14.506      2.602   5.576         0.0000000542 ***
## covid        6464.295    723.324   8.937 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3700 on 306 degrees of freedom
## Multiple R-squared:  0.378,  Adjusted R-squared:  0.3739 
## F-statistic: 92.98 on 2 and 306 DF,  p-value: < 0.00000000000000022

Po uwzględnieniu efektu COVID, liczba zgonów w okresie 2000–2024 rosła średnio o ok. 15 osób miesięcznie. W latach 2020–2022 liczba zgonów była przeciętnie wyższa o ok. 6,5 tys. miesięcznie w porównaniu do poziomu wynikającego z trendu.

Efekt sezonowości może zostać dodany do równania w postaci \(k-1\) zmiennych sztucznych \(M_i\), z których każda przyjmuje wartość 1 jeżeli obserwacja pochodzi z \(i\)-tego miesiąca, a zero w pozostałych miesiącach. W ten sposób model oszacuje wpływ danego miesiąca na wielkość zmiennej \(y\).

## 
## Call:
## lm(formula = zgony ~ t + covid + factor(month), data = z3m)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7598.0 -1202.1   -73.1   759.7 23827.9 
## 
## Coefficients:
##                   Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)      34026.371    635.647  53.530 < 0.0000000000000002 ***
## t                   15.137      2.036   7.434 0.000000000001147501 ***
## covid             6373.598    565.932  11.262 < 0.0000000000000002 ***
## factor(month)M02 -3836.137    802.721  -4.779 0.000002783737846158 ***
## factor(month)M03 -1550.390    802.729  -1.931               0.0544 .  
## factor(month)M04 -4155.488    802.742  -5.177 0.000000418697423100 ***
## factor(month)M05 -5345.703    802.760  -6.659 0.000000000134455312 ***
## factor(month)M06 -7018.147    802.783  -8.742 < 0.0000000000000002 ***
## factor(month)M07 -6280.708    802.811  -7.823 0.000000000000092310 ***
## factor(month)M08 -6836.883    802.845  -8.516 0.000000000000000858 ***
## factor(month)M09 -7041.213    802.884  -8.770 < 0.0000000000000002 ***
## factor(month)M10 -3589.488    810.725  -4.428 0.000013439950307856 ***
## factor(month)M11 -3665.345    810.740  -4.521 0.000008923380100224 ***
## factor(month)M12  -662.323    810.760  -0.817               0.4146    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2894 on 295 degrees of freedom
## Multiple R-squared:  0.633,  Adjusted R-squared:  0.6168 
## F-statistic: 39.14 on 13 and 295 DF,  p-value: < 0.00000000000000022
## # A tibble: 12 × 2
##    month      m
##    <chr>  <dbl>
##  1 M01   37048.
##  2 M02   33226.
##  3 M03   35527.
##  4 M04   32937.
##  5 M05   31762.
##  6 M06   30105.
##  7 M07   30858.
##  8 M08   30317.
##  9 M09   30127.
## 10 M10   33533.
## 11 M11   33472.
## 12 M12   36490.

Te sztuczne zmienne na wydruku noszą cokolwiek barokowe nazwy factor(month)M02factor(month)M012. Zmiennych jest 11 ($k-1) a nie 12 i nie jest to błąd. Brakująca zmienna jest bazą porównań, np. w lutym umierało przeciętnie około 3836 mniej niż w styczniu. Podobnie interpretuje się inne wspóczynniki.

Można też interpretować współczynniki względem średniego poziomu zmiennej \(y\) w roku. Wymaga to obliczenia wartości średniej wskaźników:

\[\bar M = M_2 + \cdots + M_{12}\]

teraz dla każdego wskaźnika \(M_1, \ldots, M_{12}\) należy wykonać \(S_i=M_i - \bar M\) (przypominamy, że \(M_1 = 0\)).

Koniec