
    'YHh                     l   d Z ddlZddlmZ ddZddZedk(  rdZdZ	d	Z
 ej                   ej                  e      ge	z        Z ej                  e
e	e	f      Zddgddgdd
ggeddddd
f<    eee      Z e ej$                  ee
ddf    ej&                  edddf    ej                  e
            dz  k(               dZdZ	dZd	Z
d
Z ej                   ej                  e      ge	z        Z ej                  e
e	e	f      Zddgddgdd
ggeddddd
f<    ej,                  ee	e	f      Z eeee      Z eeeee      \  ZZ e ej$                  eek(                e ej$                  ee
ddf    ej&                  edddf    ej                  e
            dz  ez   k(               ded<    eeee      \  ZZej:                   ej,                  e
e	f      ef   Z eeee      \  ZZd
ed<   ddgddgdd
ggeddddd
f<    eeee      \  Z Z! ej                   ej                  e      d ej                  e      z  g      Z" ej                  e
e	f      edddddf<    ej                  e
e	f      eddddd
f<   ded<    ee"e      Z# ej&                  e"edddddf         Z$ ej&                  e"eddddd
f         Z% e ej$                   ej&                  e"edddddf   d      dddf   e#e
ddf   k(                e ej$                   ej&                  e"eddddd
f   d      dddf   e#e
dd
f   k(               ddl&m'Z'm(Z(  e'edddf         Z) ee)d    ejT                  edddf         k(          e(edddf         Z+yy)aJ  VAR and VARMA process

this does not actually do much, trying out a version for a time loop

alternative representation:
* textbook, different blocks in matrices
* Kalman filter
* VAR, VARX and ARX could be calculated with signal.lfilter
  only tried some examples, not implemented

TODO: try minimizing sum of squares of (Y-Yhat)

Note: filter has smallest lag at end of array and largest lag at beginning,
    be careful for asymmetric lags coefficients
    check this again if it is consistently used


changes
2009-09-08 : separated from movstat.py

Author : josefpkt
License : BSD
    N)signalc                 6   |j                   d   }| j                   d   }t        j                  | j                         }t        ||      D ]L  }|| ||z
  |ddt        j                  f   |z  j                  d      j                  d      z   ||ddf<   N |S )a   multivariate linear filter

    Parameters
    ----------
    x: (TxK) array
        columns are variables, rows are observations for time period
    B: (PxKxK) array
        b_t-1 is bottom "row", b_t-P is top "row" when printing
        B(:,:,0) is lag polynomial matrix for variable 1
        B(:,:,k) is lag polynomial matrix for variable k
        B(p,:,k) is pth lag for variable k
        B[p,:,:].T corresponds to A_p in Wikipedia
    const : float or array (not tested)
        constant added to autoregression

    Returns
    -------
    xhat: (TxK) array
        filtered, predicted values of x array

    Notes
    -----
    xhat(t,i) = sum{_p}sum{_k} { x(t-P:t,:) .* B(:,:,i) }  for all i = 0,K-1, for all t=p..T

    xhat does not include the forecasting observation, xhat(T+1),
    xhat is 1 row shorter than signal.correlate

    References
    ----------
    https://en.wikipedia.org/wiki/Vector_Autoregression
    https://en.wikipedia.org/wiki/General_matrix_notation_of_a_VAR(p)
    r   N   axis)shapenpzerosrangenewaxissum)xBconstpTxhatts          V/var/www/html/planif/env/lib/python3.12/site-packages/statsmodels/sandbox/tsa/varma.pyVARr       s    B 	

A	
A88AGGD1QZ N
 Qqs1uQrzz121499q9AEE1EMMQqS	N K    c                 d   |j                   d   }|j                   d   }| j                   d   }t        j                  | j                         }t        j                  | j                         }t        ||      }	t	        |	|      D ]  }
|| |
|z
  |
ddt        j
                  f   |z  j                  d      j                  d      z   ||
|z
  |
ddt        j
                  f   |z  j                  d      j                  d      z   ||
ddf<   | |
ddf   ||
ddf   z
  ||
ddf<    ||fS )z multivariate linear filter

    x (TxK)
    B (PxKxK)

    xhat(t,i) = sum{_p}sum{_k} { x(t-P:t,:) .* B(:,:,i) } +
                sum{_q}sum{_k} { e(t-Q:t,:) .* C(:,:,i) }for all i = 0,K-1

    r   Nr   r   )r   r	   r
   maxr   r   r   )r   r   Cr   PQr   r   estartr   s              r   VARMAr   M   s+    	

A	
A	
A88AGGD
A!HE5^ $
 a!Aa

 23A5:::BFFAFNN!Aa

*+A-222:>>A>FGQqS	1Q3$qs)#!A#$ 7Nr   __main__         r   )r   g      ?)r   r   r   valid)acovfacf)r   ),__doc__numpyr	   scipyr   r   r   __name__r   Kr   column_stackaranger   onesr   r   printall	correlater   r   r
   r   xhat1xhat2err2xhat3err3r_xhat4err4xhat5err5x0xhat0xcorr00xcorr01statsmodels.tsa.stattoolsr&   r'   aavvaraac r   r   <module>rF      s  0  *Z6 z 	A	A	A1q()A1QA1qeQqE"Aa!eHq8D	&"&&abd\R\\!CRCE(72771:>q@@
AB 	A	A	A	AE1q()A1QA1qeQqE"Aa!eH!AaA!5!E!AU+KE4	&"&&%
 !	&"&&qr!tQss1uXgbggaj A! CE II
JKAeH!A,KE4
hbhh!uoa A!A,KE4AeH1qeQqE"Aa!eH!A,KE4 
)"))A,)"))A,7	8Brww!u~Aa!eHrww!u~Aa!eHAeH1IEfr!AaE(+Gfr!AaE(+G	&"&&!!!"Qq1uXg6ss1u=uQRT{J
KL	&"&&!!!"Qq1uXg6ss1u=uQRT{J
KL 5
!A#-C	#a&FBFF1QqS6N
"#
a!f+CI r   