Skip to content

5. Statistické testy

Klíčové Statistické Metriky

Log Likelihood (Logaritmická Věrohodnost)

  • Co to je: Míra pravděpodobnosti daná modelem.
  • Kde Najít: Uvedeno přímo v tabulce jako Log Likelihood.
  • Jak Interpretovat: Vyšší hodnoty značí lepší shodu modelu s daty.

Informační Kritéria: AIC, BIC a HQIC

  • Co to jsou: Kritéria hodnotící kvalitu modelu.
  • Kde Najít: V horní části tabulky, uvedeno jako AIC, BIC a HQIC.
  • Jak Interpretovat: Nižší hodnoty naznačují lepší model.

Koeficienty Modelu a P>|z| {Coefficients and P>|z|}

  • Co to je: Hodnoty parametrů modelu a jejich statistická významnost.
  • Kde Najít: V části tabulky s koeficienty, pod názvy coef a P>|z|.
  • Jak Interpretovat: Koeficienty s nízkými p-hodnotami jsou statisticky významné.

Interval Spolehlivosti

  • Co to je: Rozsah hodnot pro koeficienty modelu.
  • Kde Najít: U koeficientů, pod sloupci [0.025 a 0.975].
  • Jak Interpretovat: Pokud interval nezahrnuje nulu, koeficient je významný. Jistě, mohu upravit popisy statistických testů tak, aby zahrnovaly hypotézy H₀ (nulovou hypotézu) a Hₐ (alternativní hypotézu). Zde jsou upravené verze:

Ljung-Box (Q) Test

  • Co to je: Test nezávislosti reziduálních chyb.
  • Hypotézy:
  • H_0: Rezidua jsou nezávislá.
  • H_a: Rezidua nejsou nezávislá.
  • Kde Najít: V dolní části tabulky, pod Ljung-Box (Q) a Prob(Q).
  • Jak Interpretovat: Vysoká p-hodnota naznačuje, že nelze zamítnout H₀, tedy že rezidua jsou nezávislá.
  • Běžná Chyba: P-hodnota Ljung-Box testu je uvedena v tabulce pod Prob(Q), nikoli pod hodnotou Ljung-Box (Q), která představuje skóre testu.

Jarque-Bera (JB) Test

  • Co to je: Test normálnosti reziduálních chyb.
  • Hypotézy:
  • H_0: Rezidua mají normální rozdělení.
  • H_a: Rezidua nemají normální rozdělení.
  • Kde Najít: V dolní části tabulky, pod Jarque-Bera (JB) a Prob(JB).
  • Jak Interpretovat: Vysoká p-hodnota naznačuje, že nelze zamítnout H₀, tedy že rezidua mají normální rozdělení.
  • Běžná Chyba: P-hodnota Jarque-Bera testu je uvedena v tabulce pod Prob(JB), nikoli pod hodnotou Jarque-Bera (JB), která představuje skóre testu.

Heteroskedasticita (H)

  • Co to je: Test konzistence rozptylu reziduálních chyb.
  • Hypotézy:
  • H_0: Rozptyl reziduálních chyb je konzistentní (homoskedasticita).
  • H_a: Rozptyl reziduálních chyb je nekonzistentní (heteroskedasticita).
  • Kde Najít: V dolní části tabulky, pod Heteroskedasticity (H) a Prob(H).
  • Jak Interpretovat: Nízká p-hodnota naznačuje, že nelze zamítnout H_a, tedy že existuje heteroskedasticita.

Šikmost a Kurtóza

  • Co to jsou: Míry tvaru rozdělení reziduí.
  • Kde Najít: Často uvedeno v dolní části tabulky pod Skew a Kurtosis.
  • Jak Interpretovat: Hodnoty blízké očekávaným naznačují normální rozdělení.
    • Kurtóza blízká hodnotě 3 naznačuje, že rozdělení je podobné normálnímu rozdělení.
    • Šikmost blízká 0 značí, že rezidua jsou symetrická. Pro normální rozdělení by šikmost měla být právě nula.

Směrodatná Odchylka a Variance

  • Co to jsou: Míry rozptylu dat nebo reziduí.
  • Kde Najít: sigma2 v části tabulky s koeficienty.
  • Jak Interpretovat: Vyšší hodnoty značí větší rozptyl.
  • Běžná Chyba: Nedorozumění mezi variancí (sigma2) a směrodatnou odchylkou. Pro získání směrodatné odchylky se musí odmocnit hodnota variance.

Sezónní Diference a Periodicita

  • Co to je: Způsob, jakým model zahrnuje sezónní efekty.
  • Kde Najít: V popisu modelu, například jako SARIMAX(0, 1, 1)x(0, 1, 1, 12).
  • Jak Interpretovat:
    • První trojice čísel v SARIMAX(0, 1, 1) reprezentuje nesezónní část modelu, kde:
      • První číslo (0) označuje řád autoregresní složky (AR).
      • Druhé číslo (1) označuje řád diferencování.
      • Třetí číslo (1) označuje řád klouzavých průměrů (MA).
    • Druhá trojice čísel v (0, 1, 1, 12) reprezentuje sezónní část modelu, kde:
      • První číslo (0) označuje řád sezónní autoregresní složky.
      • Druhé číslo (1) označuje řád sezónního diferencování.
      • Třetí číslo (1) označuje řád sezónních klouzavých průměrů.
      • Čtvrté číslo (12) označuje periodicitu sezónnosti (například měsíční data s roční sezónností).
  • Běžná Chyba: Častým nedorozuměním je interpretace čísla uvedeného v sezónní části modelu (např. 12 v SARIMAX(0, 1, 1)x(0, 1, 1, 12)) jako řádu sezónní diference. Ve skutečnosti toto číslo označuje periodicitu sezónní složky, což znamená interval, po kterém se sezónní vzory opakují. Například 12 v tomto kontextu obvykle značí měsíční data s roční sezónností. Jinými slovy, číslo 12 neznamená, že se používá 12. řád diferencování, ale že model zahrnuje sezónní efekty, které se opakují každých 12 časových jednotek (například každý měsíc v ročních datech).

Příklad tabulek

                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                 1000
Model:                 ARIMA(1, 0, 1)   Log Likelihood               -1457.867
Date:                Tue, 11 Feb 2025   AIC                           2921.734
Time:                        23:37:49   BIC                           2936.457
Sample:                             0   HQIC                          2927.329
                               - 1000                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1          0.3066      0.475      0.645      0.519      -0.625       1.238
ma.L1         -0.3616      0.469     -0.771      0.440      -1.280       0.557
sigma2         1.0810      0.050     21.832      0.000       0.984       1.178
===================================================================================
Ljung-Box (L1) (Q):                   0.01   Jarque-Bera (JB):                 1.64
Prob(Q):                              0.92   Prob(JB):                         0.44
Heteroskedasticity (H):               1.16   Skew:                             0.09
Prob(H) (two-sided):                  0.18   Kurtosis:                         2.93
===================================================================================
from scipy.stats import norm
import statsmodels.api as sm

ndat = 1000  
x = norm.rvs(size=ndat)  
model = sm.tsa.arima.ARIMA(x, order=(1,0,1), trend='n').fit()  

# Get the summary as a string
summary_str = model.summary().as_text()

# Remove the line containing the warning
filtered_summary = '\n'.join([line for line in summary_str.split('\n') 
                              if not line.startswith('Warnings:') and
                              not line.startswith('[1]')])

# Print the modified summary
print(f"```\n{filtered_summary}\n```")
                            AutoReg Model Results                             
==============================================================================
Dep. Variable:                      y   No. Observations:                  500
Model:                     AutoReg(2)   Log Likelihood                -352.004
Method:               Conditional MLE   S.D. of innovations              0.491
Date:                Tue, 11 Feb 2025   AIC                            712.007
Time:                        23:37:49   BIC                            728.849
Sample:                             2   HQIC                           718.617
                                  500                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const          0.0805      0.023      3.572      0.000       0.036       0.125
y.L1          -0.6023      0.043    -13.958      0.000      -0.687      -0.518
y.L2           0.2846      0.043      6.589      0.000       0.200       0.369
                                    Roots                                    
=============================================================================
                  Real          Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
AR.1           -1.0943           +0.0000j            1.0943            0.5000
AR.2            3.2105           +0.0000j            3.2105            0.0000
-----------------------------------------------------------------------------
from scipy.stats.distributions import norm
from config.base_python_functions import tsplot
import numpy as np
from statsmodels.tsa.ar_model import AutoReg  

# Model definition for AR(2)
ndat = 500  
x = np.zeros(ndat)  
x[0] = 0.1  
x[1] = -0.1  
sigma = .5  
c = 0.1  
phi = [-.6, .3]  
c_phi = np.insert(phi, 0, c)  
for i in range(1, ndat):  
    x[i] = np.dot(c_phi, [1, x[i-1], x[i-2]]) + norm.rvs(scale=sigma)  

# Creation of AutoReg model for AR(2)
res = AutoReg(x, lags = 2, trend='c').fit()  

print(f"```\n{res.summary()}\n```")
                                        SARIMAX Results                                         
================================================================================================
Dep. Variable:                                        y   No. Observations:                 1000
Model:             ARIMA(1, 1, 2)x(0, 1, [1, 2, 3], 12)   Log Likelihood               -1420.753
Date:                                  Tue, 11 Feb 2025   AIC                           2855.506
Time:                                          23:38:10   BIC                           2889.769
Sample:                                               0   HQIC                          2868.537
                                                 - 1000                                         
Covariance Type:                                    opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.1863      0.508     -0.366      0.714      -1.183       0.810
ma.L1         -0.8743      0.512     -1.707      0.088      -1.878       0.130
ma.L2         -0.1248      0.513     -0.243      0.808      -1.131       0.881
ma.S.L12      -0.9818      0.620     -1.585      0.113      -2.196       0.232
ma.S.L24      -0.0502      0.046     -1.088      0.276      -0.141       0.040
ma.S.L36       0.0327      0.033      0.982      0.326      -0.033       0.098
sigma2         0.9762      0.611      1.598      0.110      -0.221       2.174
===================================================================================
Ljung-Box (L1) (Q):                   0.00   Jarque-Bera (JB):                 1.28
Prob(Q):                              1.00   Prob(JB):                         0.53
Heteroskedasticity (H):               0.90   Skew:                             0.08
Prob(H) (two-sided):                  0.34   Kurtosis:                         2.95
===================================================================================
from scipy.stats import norm
import statsmodels.api as sm

ndat = 1000  
x = norm.rvs(size=ndat)  
model = sm.tsa.arima.ARIMA(x, order=(1,1,2), seasonal_order=(0,1,3,12), trend='n').fit()  

# Get the summary as a string
summary_str = model.summary().as_text()

# Remove the line containing the warning
filtered_summary = '\n'.join([line for line in summary_str.split('\n') 
                              if not line.startswith('Warnings:') and
                              not line.startswith('[1]')])

# Print the modified summary
print(f"```\n{filtered_summary}\n```")