ó
áp7]c           @   s„  d  d l  Z d  d l Z d  d l m Z m Z m Z d  d l m	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z d	 Z d
 Z d Z d d d d „ Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z e d k r€d  d l  j j! Z" d e" _# e" j$ ƒ  j% d	 ƒ Z& e e& d d d d ƒZ' e e& d d d d d d ƒZ( n  d S(   iÿÿÿÿN(   t	   iteritemst   string_typest   range(   t   OLS(   t   cache_readonly(   t   Bunch(   t   plotting(   t   util(   t	   var_modeli    i   i   c         C   s@  | t  k r d } n* | t k r* d } n | t k r? d } n  | d k rg | d k rg |  j d } n  | d k ry d n | } | d k r‘ d n | } | d k r© d n | } | d k rÄ | } n  | d k rß t d ƒ ‚ n  | j ƒ  } d | d <t ƒ  } | d k r’|  j ƒ  | j ƒ  j	 d ƒ B} |  j
 | }  | j
 | } t |  | ƒ j ƒ  } | j | d	 <| j | d
 <| j | d <| j | d <| S|  j } | j }	 |  j d }
 | j d } t j t j |
 | f ƒ d |	 d | ƒ} t j t j |
 ƒ d | ƒ} | j ƒ  j t j ƒ } | j ƒ  } | j ƒ  j t j ƒ } | d k rW| } n | } x˜t | |  j d d ƒ D]|} | d k r¯t d | | ƒ } t | | ƒ } n t | ƒ } |  | } | | } | j ƒ  | j ƒ  j	 d ƒ B} | j	 ƒ  r2| j ƒ  | k  rqxq2| j
 | } | j
 | } n  | j d | j d k rRqxn  | d k rq| j d rqqxn  t | | ƒ j ƒ  } t  | j! | d <| j | j! | d <| j | j! | d <t | j ƒ | j! | d <| j j! d | j! | d <qxW| j
 | | d	 <| j
 | | d
 <| j
 | | d <| j
 | | d <| S(   sÆ  
    Minimal replacement for pandas ols that provides the required features

    Parameters
    ----------
    y : pd.Series
        Endogenous variable
    x : pd.DataFrame
        Exogenous variables, always adds a constant
    window: {None, int}

    window_type : {str, int}
    min_periods : {None, int}

    Returns
    -------
    results : Bunch
        Bunch containing parameters (beta), R-squared (r2), nobs and
        residuals (resid)
    t   full_samplet   rollingt	   expandingi    i   s   Unknown window_typeg      ð?t	   interceptt   betat   r2t   nobst   residt   columnst   indexiÿÿÿÿ(   R
   R   N(   R	   R
   R   ("   t   FULL_SAMPLEt   ROLLINGt	   EXPANDINGt   Nonet   shapet
   ValueErrort   copyR   t   isnullt   anyt   locR   t   fitt   paramst   rsquaredR   R   R   R   t   pdt	   DataFramet   npt   zerost   Seriest   astypet   intt   boolR   t   maxt   slicet   sumt   valuest   Truet   iloc(   t   yt   xt   windowt   window_typet   min_periodst   buncht   missingt   resR   R   t   nt   kR   R   R   R   t   validt   startt   it   leftt   selt   _yt   _x(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   _window_ols   sŒ    				
					!

c         C   s{   |  t  t t f k r |  St |  t ƒ rg |  j ƒ  } | d k rD t  S| d k rT t S| d k rg t Sn  t d |  ƒ ‚ d  S(   Ns   FULL SAMPLER   R   R   s   Unrecognized window type: %s(   s   FULL SAMPLER   (   R   R   R   t
   isinstanceR   t   upperR   (   R1   t   window_type_up(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   _get_window_type   s    t
   DynamicVARc           B   sà   e  Z d  Z d d d d d d „ Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d d „ Z d d d „ Z e d „  ƒ Z e d „  ƒ Z RS(   sW  
    Estimates time-varying vector autoregression (VAR(p)) using
    equation-by-equation least squares

    Parameters
    ----------
    data : pandas.DataFrame
    lag_order : int, default 1
    window : int
    window_type : {'expanding', 'rolling'}
    min_periods : int or None
        Minimum number of observations to require in window, defaults to window
        size if None specified
    trend : {'c', 'nc', 'ct', 'ctt'}
        TODO

    Attributes
    ----------
    coefs : Panel
        items : coefficient names
        major_axis : dates
        minor_axis : VAR equation names
    i   R   t   cc         C   sÊ   | |  _  t | j ƒ |  _ t |  j ƒ |  _ | |  _ t | | ƒ |  _ d |  j d <t	 |  j |  j ƒ \ |  _
 |  _ |  _ |  _ |  _ | |  _  t j | ƒ |  _ |  j | | | ƒ t j d t ƒ d  S(   Ni   R   sT   DynamicVAR is deprecated and will be removed in a future version, use VAR or VARMAX.(   t	   lag_ordert   listR   t   namest   lent   neqst   _y_origt   _make_lag_matrixt   _x_origt   _filter_dataR.   R/   t
   x_filteredt   _indext   _time_has_obsR   t   get_trendordert
   trendordert   _set_windowt   warningst   warnt   DeprecationWarning(   t   selft   dataRF   R0   R1   t   trendR2   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   __init__¨   s    		3		c         C   s‹   t  | ƒ |  _ |  j rK | d  k r3 t d ƒ ‚ n  | d  k ro | } qo n$ t |  j ƒ } | d  k ro d } n  t | ƒ |  _ | |  _	 d  S(   Ns.   Must pass window when doing rolling regressioni   (
   RC   t   _window_typet   _is_rollingR   t	   ExceptionRI   R/   R&   t   _windowt   _min_periods(   RX   R1   R0   R2   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRT   Á   s    		c         C   s   t  |  j ƒ S(   s3   
        Number of time periods in results
        (   RI   t   result_index(   RX   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   TÓ   s    c         C   s,   t  d „  t |  j ƒ Dƒ ƒ } t j | ƒ S(   Nc         s   s$   |  ] \ } } | | j  f Vq d  S(   N(   R   (   t   .0t   eqt   r(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pys	   <genexpr>Ý   s    (   t   dictR    t	   equationsR    R!   (   RX   RY   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR   Ú   s    c         C   sg   i  } xZ t  |  j ƒ D]I \ } } t d | d |  j d |  j d |  j d |  j ƒ } | | | <q W| S(   NR.   R/   R0   R1   R2   (   R    R.   R?   R/   R_   R\   R`   (   RX   t   eqst   colt   tst   model(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRg   à   s    	c         C   sU   i  } x* t  |  j ƒ D] \ } } | j | | <q Wt j j | ƒ } | j d d ƒ S(   sA   
        Return dynamic regression coefficients as Panel
        t   itemst   minor(   R    Rg   R   R    t   Panelt   fromDictt   swapaxes(   RX   RY   Rd   t   resultt   panel(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   coefsì   s
    c         C   s
   |  j  j S(   N(   Rs   t
   major_axis(   RX   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRa   ú   s    c         C   sY   |  j  j ƒ  } | d =| j d d ƒ j } | j t | ƒ |  j |  j |  j f ƒ } | S(   s¬   
        Reshape coefficients to be more amenable to dynamic calculations

        Returns
        -------
        coefs : (time_periods x lag_order x neqs x neqs)
        R   Rl   t   major(   Rs   R   Rp   R+   t   reshapeRI   RF   RJ   (   RX   t
   coef_panelt   coef_values(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt
   _coefs_rawþ   s    	c         C   s   |  j  d j S(   s¡   
        Similar to _coefs_raw, return intercept values in easy-to-use matrix
        form

        Returns
        -------
        intercepts : (T x K)
        R   (   Rs   R+   (   RX   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   _intercepts_raw  s    
c         C   s@   i  } x* t  |  j ƒ D] \ } } | j | | <q Wt j | ƒ S(   N(   R    Rg   R   R    R!   (   RX   RY   Rd   Rq   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR     s    c         C   s  t  j |  j | |  j f ƒ } |  j j } t d „  t |  j j ƒ Dƒ ƒ } t d „  t |  j	 ƒ Dƒ ƒ } |  j
 } |  j } |  j	 | } xn t | ƒ D]` \ }	 }
 | |
 | } | |
 | } | |  } t j | | | | | | ƒ } | d | |	 <q˜ Wt j | d | d |  j ƒS(   s¥   
        Produce dynamic forecast

        Parameters
        ----------
        steps

        Returns
        -------
        forecasts : pandas.DataFrame
        c         s   s!   |  ] \ } } | | f Vq d  S(   N(    (   Rc   t   idxt   d(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pys	   <genexpr>4  s    c         s   s!   |  ] \ } } | | f Vq d  S(   N(    (   Rc   R{   R|   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pys	   <genexpr>5  s   iÿÿÿÿR   R   (   R"   t   emptyRb   RJ   R.   R+   Rf   t	   enumerateR   Ra   Ry   Rz   t   _modelt   forecastR    R!   RH   (   RX   t   stepst   outputt   y_valuest   y_index_mapt   result_index_mapRs   t
   interceptst
   forc_indexR:   t   dateR{   t
   result_idxt   y_slicet   forcs(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR€   %  s     "			
i
   c         C   s@  d d l  j } | j d | d |  j d t ƒ \ } } |  j d | ƒ } | j } |  j j | ƒ } xq t	 | j
 ƒ D]` \ }	 }
 | |	 } | |
 } | |
 } | j | | j d d d	 ƒ} | j | | j d
 ƒ } qs W| d | d f } d } | j | | ƒ | j ƒ  | j d | ƒ t j d d d d ƒ | j ƒ  d S(   s>  
        Plot h-step ahead forecasts against actual realizations of time
        series. Note that forecasts are lined up with their respective
        realizations.

        Parameters
        ----------
        steps : int
            default 1
        figsize : tuple[int, int]
            default (10, 10)
        iÿÿÿÿNt   figsizet   nrowst   sharexR   s   k.t   msi   s   k-i    t   Yt   Forecasts   Dynamic %d-step forecastt   bottomg333333Ã?R;   gš™™™™™¹?(   R   R‘   (   t   matplotlib.pyplott   pyplott   subplotsRJ   R,   R€   R   R.   t   reindexR~   R   t   plotR+   t   legendt   autofmt_xdatet   suptitleR   t   adjust_subplotst   draw_if_interactive(   RX   R   RŒ   t   pltt   figt   axest   forct   datest	   y_overlayR:   Ri   t   axt   y_tst   forc_tst   y_handlet   forc_handlet   linest   labels(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   plot_forecastK  s&    	



c         C   s   |  j  t k S(   N(   R\   R   (   RX   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR]   v  s    c         C   s,   t  d „  t |  j ƒ Dƒ ƒ } t j | ƒ S(   s   Returns the r-squared values.c         s   s$   |  ] \ } } | | j  f Vq d  S(   N(   R   (   Rc   Rd   Re   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pys	   <genexpr>}  s    (   Rf   R    Rg   R    R!   (   RX   RY   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR   z  s    N(   i
   i
   (   t   __name__t
   __module__t   __doc__R   R[   RT   R   Rb   t   propertyR   Rg   Rs   Ra   Ry   Rz   R   R€   Rª   R]   R   (    (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRD      s    		&+t   DynamicPanelVARc           B   s&   e  Z d  Z d d d d d d „ Z RS(   s‚   
    Dynamic (time-varying) panel vector autoregression using panel ordinary
    least squares

    Parameters
    ----------
    i   R   RE   c         C   s¸   | |  _  t | j ƒ |  _ | |  _ t | | ƒ |  _ d |  j d <t |  j |  j ƒ \ |  _ |  _	 |  _
 |  _ |  _ | |  _  t j | ƒ |  _ |  j | | | ƒ t j d t ƒ d  S(   Ni   R   sY   DynamicPanelVAR is deprecated and will be removed in a future version, use VAR or VARMAX.(   RF   RI   R   RJ   RK   RL   RM   RN   R.   R/   RO   RP   RQ   R   RR   RS   RT   RU   RV   RW   (   RX   RY   RF   R0   R1   RZ   R2   (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR[   Š  s    		3		N(   R«   R¬   R­   R   R[   (    (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyR¯     s   	c         C   s  d „  } | | ƒ } | j  ƒ  s. | | } n | } |  j j | j ƒ } | j | j ƒ so | j |  j ƒ rœ | j | ƒ } |  j | ƒ }  | | ƒ } n  | |  ƒ } | | @} | j  ƒ  sì | j | } | j | ƒ }	 |  j | ƒ }
 n | |  }	 }
 |
 |	 | | | f S(   s¢   
    Data filtering routine for dynamic VAR

    lhs : DataFrame
        original data
    rhs : DataFrame
        lagged variables

    Returns
    -------

    c         S   s(   t  j |  j ƒ j d ƒ t |  j ƒ k S(   Ni   (   R"   t   isfiniteR+   R*   RI   R   (   t   df(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   _has_all_columns®  s    (   t   allR   t   uniont   equalsR–   (   t   lhst   rhsR²   t	   rhs_validt   pre_filtered_rhsR   t	   lhs_validR8   t
   filt_indext   filtered_rhst   filtered_lhs(    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRN   ¡  s$    	&
c            s‹   i  } g  } xi t  d d | ƒ D]T } d | ‰  |  j | ƒ j d ‡  f d †  ƒ } | j | j ƒ | j | j ƒ q  Wt j | d | ƒS(   Ni   s   L%d.R   c            s   ˆ  |  S(   N(    (   RE   (   t   lagstr(    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   <lambda>Ð  t    (	   R   t   shiftt   renamet   updatet   _seriest   extendR   R    R!   (   R/   t   lagsRY   R   R:   t   lag(    (   R¾   s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyRL   Ë  s    
$t   __main__iô  RF   R1   R   R0   i
   R
   ()   t   numpyR"   t   pandasR    t   statsmodels.compat.pythonR    R   R   t#   statsmodels.regression.linear_modelR   t   statsmodels.tools.decoratorsR   t   statsmodels.tools.toolsR   t   statsmodels.tsa.vector_arR   R   R   R   RU   R   R   R   R   R?   RC   t   objectRD   R¯   RN   RL   R«   t   pandas.util.testingt   testingt   ptestt   Nt   makeTimeDataFramet   cumsumRY   t   vart   var2(    (    (    s@   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/dynamic.pyt   <module>   s2   k	ò 	*		