ó
áp7]c           @  su  d  Z  d d l m Z d d l Z d d l m Z d d „ Z d d „ Z e	 d k rqd	 Z
 d
 Z d Z e j e j e
 ƒ g e ƒ 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
 k ƒ ƒ d	 Z
 d
 Z d
 Z d Z d Z e j e j e
 ƒ g e ƒ 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 d e ƒZ e e e e d 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
 e 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
 ƒ 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 j, e d d … d f ƒ k ƒ e* e d d … d f ƒ Z- n  d S(   sI  VAR and VARMA process

this doesn't 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
iÿÿÿÿ(   t   print_functionN(   t   signali    c         C  s    | j  d } |  j  d } t j |  j  ƒ } xm t | | ƒ D]\ } | |  | | | … d d … t j f | j d d ƒ j d d ƒ | | d d … f <q< W| S(   sé   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
    ----------
    http://en.wikipedia.org/wiki/Vector_Autoregression
    http://en.wikipedia.org/wiki/General_matrix_notation_of_a_VAR(p)
    i    Nt   axisi   (   t   shapet   npt   zerost   ranget   newaxist   sum(   t   xt   Bt   constt   pt   Tt   xhatt   t(    (    s<   lib/python2.7/site-packages/statsmodels/sandbox/tsa/varma.pyt   VAR!   s    !Zc         C  sN  | j  d } | j  d } |  j  d } t j |  j  ƒ } t j |  j  ƒ } t | | ƒ }	 xç t |	 | ƒ D]Ö }
 | |  |
 | |
 … d d … t j f | j d d ƒ j d d ƒ | |
 | |
 … d d … t j f | j d d ƒ j d d ƒ | |
 d d … f <|  |
 d d … f | |
 d d … f | |
 d d … f <qj W| | f S(   sÄ    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

    i    NR   i   (   R   R   R   t   maxR   R   R   (   R	   R
   t   CR   t   Pt   QR   R   t   et   startR   (    (    s<   lib/python2.7/site-packages/statsmodels/sandbox/tsa/varma.pyt   VARMAN   s    
CS>t   __main__i   i   i   i   R   g      à?t   valid(   t   acovft   acf(   i   i   i   (   i   i   i   (   i   i   i   (.   t   __doc__t
   __future__R    t   numpyR   t   scipyR   R   R   t   __name__R   t   KR   t   column_stackt   arangeR	   t   onesR
   R   t   printt   allt	   correlateR   R   R   R   t   xhat1t   xhat2t   err2t   xhat3t   err3t   r_t   xhat4t   err4t   xhat5t   err5t   x0t   xhat0t   xcorr00t   xcorr01t   statsmodels.tsa.stattoolsR   R   t   aavt   vart   aac(    (    (    s<   lib/python2.7/site-packages/statsmodels/sandbox/tsa/varma.pyt   <module>   s^   -:R:V
"
:+..
++aa-