ó
âp7]c           @   så   d  Z  d d l m Z d d l Z d d l j Z d d l j Z	 d d l
 m Z d d l m Z d d l m Z d d l j j Z d d l j j j Z d d l j j j Z e j Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d S(   s   
Impulse reponse-related code
iÿÿÿÿ(   t   divisionN(   t   cache_readonly(   t	   chain_dot(   t   ranget   BaseIRAnalysisc           B   s˜   e  Z d  Z d d d e e d „ Z e e d „ Z d „  Z d „  Z e d d d d d e	 d d d d d	 „ Z
 e d d d d d e	 d d d d
 „
 Z RS(   sƒ   
    Base class for plotting and computing IRF-related statistics, want to be
    able to handle known and estimated processes
    i
   c         C   s¤  | |  _  | |  _ | j | j | j |  _ |  _ |  _ | |  _ | d  k rh | j	 } t
 j | ƒ } n  | |  _ | |  _ | j | ƒ |  _ | r­ | j | d | ƒ|  _ n | j | d | ƒ|  _ |  j j d d ƒ |  _ | rþ |  j j d d ƒ |  _ n |  j j d d ƒ |  _ | sm| j ƒ  |  _ | rOt j | j ƒ  | ƒ |  _ qmt j | j ƒ  | ƒ |  _ n  | r‹t j | j  ƒ |  _! n t j | j" ƒ |  _! d  S(   Nt   Pt   axisi    (#   t   modelt   periodst   neqst   k_art   nobst   lagst   Tt   ordert   Nonet   sigma_ut   lat   choleskyR   t   svart   ma_rept   irfst   svar_ma_rept	   svar_irfst   orth_ma_rept	   orth_irfst   cumsumt   cum_effectst   svar_cum_effectst   orth_cum_effectst   long_run_effectst
   lr_effectst   npt   dott   svar_lr_effectst   orth_lr_effectst   utilt   comp_matrixt   var_rept   _At   coefs(   t   selfR   R   R   R   R   t   vecmt   sigma(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   __init__   s2    		&		
		c         C   s%   | r |  j  S| r |  j S|  j Sd  S(   N(   R   R   R   (   R)   t   orthR   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   _choose_irfsQ   s
    c         O   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R)   t   argst   kwargs(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   covY   s    c         O   s
   t  ‚ d  S(   N(   R/   (   R)   R0   R1   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   cum_effect_cov\   s    gš™™™™™©?t   asymiè  c         C   só  |  j  } |  j } |  j } | r6 | r6 t d ƒ ‚ n  |  j | | ƒ } | rW d } n | rf d } n d } | t k r d } n2| d k rœ t d
 ƒ ‚ n| d k r½ |  j d | ƒ } n  | d k rö |  j d | d | d |	 d | d |
 ƒ } n  | d k r5|  j	 d | d | d |	 d | d |
 d | ƒ } n  | d k rt|  j
 d | d | d |	 d | d |
 d | ƒ } n  | d	 k r³|  j d | d | d |	 d | d |
 d | ƒ } n  t j | | | | |  j j | d | d | d | d | ƒ} | S(   se  
        Plot impulse responses

        Parameters
        ----------
        orth : bool, default False
            Compute orthogonalized impulse responses
        impulse : string or int
            variable providing the impulse
        response : string or int
            variable affected by the impulse
        signif : float (0 < signif < 1)
            Significance level for error bars, defaults to 95% CI
        subplot_params : dict
            To pass to subplot plotting funcions. Example: if fonts are too big,
            pass {'fontsize' : 8} or some number to your taste.
        plot_params : dict

        plot_stderr: bool, default True
            Plot standard impulse response error bands
        stderr_type: string
            'asym': default, computes asymptotic standard errors
            'mc': monte carlo standard errors (use rpl)
        repl: int, default 1000
            Number of replications for Monte Carlo and Sims-Zha standard errors
        seed: int
            np.random.seed for Monte Carlo replications
        component: array or vector of principal component indices
        s   For SVAR system, set orth=Falses"   Impulse responses (orthogonalized)s   Impulse responses (structural)s   Impulse responsesR4   t   mct   sz1t   sz2t   sz3s<   Error type must be either 'asym', 'mc','sz1','sz2', or 'sz3'R-   R   t   replt   signift   seedt	   componentt   subplot_paramst   plot_paramst   stderr_typeN(   R4   R5   R6   R7   R8   (   R   R   R   t
   ValueErrorR.   t   FalseR   R2   t
   errband_mct   err_band_sz1t   err_band_sz2t   err_band_sz3t   plottingt   irf_grid_plott   names(   R)   R-   t   impulset   responseR:   R>   R=   t   plot_stderrR?   R9   R;   R<   R   R   R   R   t   titlet   stderrt   fig(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   plot_   sT    !							c         C   sý   | r! d } |  j  } |  j } n d } |  j } |  j } | d k rT t d ƒ ‚ nT | d k ru |  j d | ƒ } n  | d k r¨ |  j d | d |	 d | d	 |
 ƒ } n  | s· d } n  t j	 | | | | |  j
 j | d | d
 | d | d | d | ƒ} | S(   s+  
        Plot cumulative impulse response functions

        Parameters
        ----------
        orth : bool, default False
            Compute orthogonalized impulse responses
        impulse : string or int
            variable providing the impulse
        response : string or int
            variable affected by the impulse
        signif : float (0 < signif < 1)
            Significance level for error bars, defaults to 95% CI
        subplot_params : dict
            To pass to subplot plotting funcions. Example: if fonts are too big,
            pass {'fontsize' : 8} or some number to your taste.
        plot_params : dict

        plot_stderr: bool, default True
            Plot standard impulse response error bands
        stderr_type: string
            'asym': default, computes asymptotic standard errors
            'mc': monte carlo standard errors (use rpl)
        repl: int, default 1000
            Number of replications for monte carlo standard errors
        seed: int
            np.random.seed for Monte Carlo replications

        s/   Cumulative responses responses (orthogonalized)s   Cumulative responsesR4   R5   s)   `stderr_type` must be one of 'asym', 'mc'R-   R9   R:   R;   t   hlinesR=   R>   R?   (   R4   R5   N(   R   R#   R   R   R@   R3   t   cum_errband_mcR   RF   RG   R   RH   (   R)   R-   RI   RJ   R:   R>   R=   RK   R?   R9   R;   RL   R   R   RM   RN   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   plot_cum_effects²   s.    "					N(   t   __name__t
   __module__t   __doc__R   RA   R,   R.   R2   R3   t   TrueRO   RR   (    (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR      s   2					P	t
   IRAnalysisc           B   s=  e  Z d  Z d d d e e d „ Z e d „ Z e e d d d d d „ Z e e d d d d d d „ Z e e d d d d d d	 „ Z	 e e d d d d d d
 „ Z
 d „  Z e d „  ƒ Z d „  Z e d „ Z e d d d d d „ Z e d „ Z e d „ Z e d „ Z e d „ Z d „  Z e d „  ƒ Z d „  Z RS(   sô   
    Impulse response analysis class. Computes impulse responses, asymptotic
    standard errors, and produces relevant plots

    Parameters
    ----------
    model : VAR instance

    Notes
    -----
    Using LÃ¼tkepohl (2005) notation
    i
   c         C   sh   t  j |  | d | d | d | d | d | ƒ| rC | j |  _ n | j |  _ | j |  _ i  |  _ d  S(   NR   R   R   R   R*   (   R   R,   t   cov_var_reprt   cov_at
   _cov_alphat
   _cov_sigmat   cov_sigt   _g_memo(   R)   R   R   R   R   R   R*   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR,   þ   s    c         C   sŸ   | r |  j  ƒ  S|  j |  j d ƒ } t j |  j d |  j d f ƒ | d <xK t d |  j d ƒ D]3 } |  j | d } t | |  j	 | j
 ƒ | | <qd W| S(   s°   
        Compute asymptotic standard errors for impulse response coefficients

        Notes
        -----
        LÃ¼tkepohl eq 3.7.5

        Returns
        -------
        i   i   i    (   t	   _orth_covt   _empty_covmR   R    t   zerosR	   R   t   GR   RY   R   (   R)   R-   t   covst   it   Gi(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR2     s    
' iè  gš™™™™™©?id   c   	      C   s„   |  j  } |  j } | rL | j d | d | d | d | d | d | d t ƒ S| j d | d | d | d | d | d | d t ƒ Sd S(	   s8   
        IRF Monte Carlo integrated error bands
        R-   R9   t   stepsR:   R;   t   burnt   cumN(   R   R   t   sirf_errband_mcRA   t   irf_errband_mc(	   R)   R-   R   R9   R:   R;   Rf   R   R   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRB   "  s    		c         C   sC  |  j  } |  j }	 |  j | | ƒ }
 |  j } | j d | d | d |	 d | d | ƒ } t j | ƒ } |  j | ƒ \ } } } | d
 k	 rý t	 j
 | ƒ | | f k rÌ t d t | ƒ d t | ƒ ƒ ‚ n  t	 j | ƒ | |	 k rô t d ƒ ‚ qý | } n  t	 j |
 ƒ } t	 j |
 ƒ } xt | ƒ D]} xt | ƒ D]ö } |
 d	 d
 … | | f | | | d
 d
 … | | | f f | t	 j | | | | | | f f ƒ | d	 d
 … | | f <|
 d	 d
 … | | f | | | d
 d
 … | | | f f | t	 j | | | | | | f f ƒ | d	 d
 … | | f <q;Wq(W| | f S(   sÁ  
        IRF Sims-Zha error band method 1. Assumes symmetric error bands around
        mean.

        Parameters
        ----------
        orth : bool, default False
            Compute orthogonalized impulse responses
        repl : int, default 1000
            Number of MC replications
        signif : float (0 < signif < 1)
            Significance level for error bars, defaults to 95% CI
        seed : int, default None
            np.random seed
        burn : int, default 100
            Number of initial simulated obs to discard
        component : neqs x neqs array, default to largest for each
            Index of column of eigenvector/value to use for each error band
            Note: period of impulse (t=0) is not included when computing
            principle component

        References
        ----------
        Sims, Christopher A., and Tao Zha. 1999. "Error Bands for Impulse
        Response". Econometrica 67: 1113-1155.
        R-   R9   Re   R;   Rf   s   Component array must be s    x s,   Atleast one of the components does not existi   N(   R   R   R.   R	   t	   irf_resimR$   t   norm_signif_levelt   _eigval_decomp_SZR   R    t   shapeR@   t   strt   argmaxt   copyR   t   sqrt(   R)   R-   R   R9   R:   R;   Rf   R<   R   R   R   R	   Rj   t   qt   Wt   eigvat   kt   lowert   upperRc   t   j(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRC   2  s*    			'	x€c         C   sÛ  |  j  } |  j }	 |  j | | ƒ }
 |  j } | j d | d | d |	 d | d d ƒ } |  j | ƒ \ } } } | d k	 rî t j | ƒ | | f k r½ t	 d t
 | ƒ d t
 | ƒ ƒ ‚ n  t j | ƒ | |	 k rå t	 d	 ƒ ‚ qî | } n  t j | |	 d
 | | f ƒ } x˜ t | ƒ D]Š } x t | ƒ D]s } xj t | ƒ D]\ } | | | | | | f d d … f | | d
 d … | | f | | d
 d … | | f <q@Wq-WqWt j | d d ƒ} t | d | ƒ d
 t d
 | d | ƒ d
 f } t j |
 ƒ } t j |
 ƒ } x¿ t | ƒ D]± } x¨ t | ƒ D]š } |
 d d … | | f | | d d d … | | f | d d … | | f <|
 d d … | | f | | d
 d d … | | f | d d … | | f <q/WqW| | f S(   sÖ  
        IRF Sims-Zha error band method 2.

        This method Does not assume symmetric error bands around mean.

        Parameters
        ----------
        orth : bool, default False
            Compute orthogonalized impulse responses
        repl : int, default 1000
            Number of MC replications
        signif : float (0 < signif < 1)
            Significance level for error bars, defaults to 95% CI
        seed : int, default None
            np.random seed
        burn : int, default 100
            Number of initial simulated obs to discard
        component : neqs x neqs array, default to largest for each
            Index of column of eigenvector/value to use for each error band
            Note: period of impulse (t=0) is not included when computing
            principle component

        References
        ----------
        Sims, Christopher A., and Tao Zha. 1999. "Error Bands for Impulse
        Response". Econometrica 67: 1113-1155.
        R-   R9   R   R;   Rf   id   s   Component array must be s    x s,   Atleast one of the components does not existi   NR   i    i   (   R   R   R.   R	   Rj   Rl   R   R    Rm   R@   Rn   Ro   R`   R   t   sortt   roundRp   (   R)   R-   R   R9   R:   R;   Rf   R<   R   R   R   R	   Rj   Rs   Rt   Ru   t   gammat   pRc   Rx   t
   gamma_sortt   indxRv   Rw   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRD   k  s6    			!	'	b4JRc         C   sk  |  j  } |  j }	 |  j | | ƒ }
 |  j } | j d | d | d |	 d | d d ƒ } t j | | |	 | f ƒ } xl t | ƒ D]^ } xU t | ƒ D]G } t j | | d d … d d … | f j	 ƒ | | | d d … f <q“ Wq€ Wt j | |	 | |	 | f ƒ } t j | |	 | |	 | f ƒ } t j | |	 | f ƒ } t j | ƒ } | d k	 rµt j | ƒ | k r„t d	 t | ƒ ƒ ‚ n  t j | ƒ | |	 k r¬t d
 ƒ ‚ qµ| } n  xY t | ƒ D]K } t j | | d d ƒ| | <t j | | ƒ \ | | <| | <| | <qÂWt j | |	 d | | f ƒ } xt | ƒ D]÷ } d } xè t | ƒ D]Ú } xÑ t | ƒ D]Ã } | | | | | |	 | d |	 … f | | d d … | | f | | d d … | | f <| | d k ri| | | | | |	 d … f | | d d … | | f | | d d … | | f <qiqiWqVWq=Wt j | d d ƒ} t | d | ƒ d t d | d | ƒ d f } t j |
 ƒ } t j |
 ƒ } x¿ t | ƒ D]± } x¨ t | ƒ D]š } |
 d d … | | f | | d d d … | | f | d d … | | f <|
 d d … | | f | | d d d … | | f | d d … | | f <q¿Wq¬W| | f S(   sÂ  
        IRF Sims-Zha error band method 3. Does not assume symmetric error bands around mean.

        Parameters
        ----------
        orth : bool, default False
            Compute orthogonalized impulse responses
        repl : int, default 1000
            Number of MC replications
        signif : float (0 < signif < 1)
            Significance level for error bars, defaults to 95% CI
        seed : int, default None
            np.random seed
        burn : int, default 100
            Number of initial simulated obs to discard
        component : vector length neqs, default to largest for each
            Index of column of eigenvector/value to use for each error band
            Note: period of impulse (t=0) is not included when computing
            principle component

        References
        ----------
        Sims, Christopher A., and Tao Zha. 1999. "Error Bands for Impulse
        Response". Econometrica 67: 1113-1155.
        R-   R9   R   R;   Rf   id   i   Ns"   Component array must be of length s,   Atleast one of the components does not existt   rowvari    R   i   (   R   R   R.   R	   Rj   R    R`   R   t   ravelR   R   t   sizeR@   Rn   Ro   R2   R$   t   eigval_decompRy   Rz   Rp   (   R)   R-   R   R9   R:   R;   Rf   R<   R   R   R   R	   Rj   t   stackR|   Rc   t	   stack_covRs   Rt   Ru   R{   t   cRx   R}   R~   Rv   Rw   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRE   «  sP    			!	I  	,Y`4JRc   
      C   sž  |  j  } |  j } t j | | | | f ƒ } xx t | ƒ D]j } xa t | ƒ D]S } t j | d d … d d … | | f d d ƒ| | | d d … d d … f <qM Wq: Wt j | | | | f ƒ } t j | | | d f ƒ } t j | | f ƒ }	 x› t | ƒ D] } x„ t | ƒ D]v } t j | | | d d … d d … f ƒ \ | | | d d … d d … f <| | | d d … d f <|	 | | f <qWq W| | |	 f S(   s¹   
        Returns
        -------
        W: array of eigenvectors
        eigva: list of eigenvalues
        k: matrix indicating column # of largest eigenvalue for each c_i,j

        Ni   R   i    (   R	   R   R    R`   R   R2   R$   R‚   (
   R)   Rj   R	   R   t   cov_holdRc   Rx   Rs   Rt   Ru   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRl   ü  s    			Uxc            sH   ˆ j  ‰  ‡  ‡ f d †  } g  t d ˆ j d ƒ D] } | | ƒ ^ q2 S(   Nc            s    d } x“ t  |  ƒ D]… } |  d | } | ˆ j k rF ˆ j | } n/ t j ˆ j j | ƒ } | ˆ   } | ˆ j | <t j | ˆ j | ƒ } | | } q W| S(   Ng        i   (	   R   R]   R   t   matrix_powerR'   R   R    t   kronR   (   Rc   Ra   t   mt   idxt   apowt   piece(   t   KR)   (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   _make_g  s    
i   (   R	   R   R   (   R)   RŽ   Rc   (    (   R   R)   s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRa     s    	c   
      C   s  t  j |  j ƒ } t  j |  j j | ƒ } |  j } |  j |  j d ƒ } x· t	 |  j d ƒ D]¢ } | d k rx d } n5 t  j
 | |  j | d ƒ } t | |  j | j ƒ } t  j
 t  j | |  j | ƒ | ƒ } t | |  j | j ƒ |  j }	 | |	 | | <q] W| S(   Ni   i    (   R    t   eyeR	   Rˆ   R   R   t   HR_   R   R   R!   Ra   R   RY   R   R\   (
   R)   t   Ikt   PIkR   Rb   Rc   t   apiecet   Cit   Cibart   bpiece(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR^   5  s    		%c         C   s~  t  j |  j ƒ } t  j |  j j | ƒ } d } |  j |  j d ƒ } x1t |  j d ƒ D]} | d k r„ | |  j	 | d } n  | r!| d k rŸ d } n* t  j
 | | ƒ } t | |  j | j ƒ } t  j
 t  j | |  j | ƒ |  j ƒ }	 t |	 |  j |	 j ƒ |  j }
 | |
 | | <qZ | d k rZt  j |  j d |  j d f ƒ | | <qZ n  t | |  j | j ƒ | | <qZ W| S(   s  
        Compute asymptotic standard errors for cumulative impulse response
        coefficients

        Parameters
        ----------
        orth : boolean

        Notes
        -----
        eq. 3.7.7 (non-orth), 3.7.10 (orth)

        Returns
        -------

        g        i   i    i   (   R    R   R	   Rˆ   R   R   R_   R   R   Ra   R!   R   RY   R   R   R\   R`   (   R)   R-   R‘   R’   t   FRb   Rc   R“   t   Bnt   BnbarR–   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR3   L  s(    	(' c         C   sF   |  j  } |  j } | j d | d | d | d | d | d | d t ƒ S(   sM   
        IRF Monte Carlo integrated error bands of cumulative effect
        R-   R9   R   R:   R;   Rf   Rg   (   R   R   Ri   RV   (   R)   R-   R9   R:   R;   Rf   R   R   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRQ   z  s    		c         C   sÜ   |  j  } t j t j | j |  j ƒ | ƒ } t j |  j ƒ } | rÂ t j t j |  j	 j t j |  j ƒ ƒ | ƒ } t j t j | | ƒ |  j
 ƒ } t | |  j | j ƒ t | |  j | j ƒ St | |  j | j ƒ Sd S(   s*   
        Returns
        -------

        N(   R   R    Rˆ   t   tileR   R   R   R	   R!   R   R   R   RY   R\   (   R)   R-   t   lret   FinftyR‘   t   Binft   Binfbar(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   lr_effect_cov„  s    	$0!c         C   sG   t  j g  |  j d | ƒ D]' } t j t  j t  j | ƒ ƒ ƒ ^ q ƒ S(   NR-   (   R    t   arrayR2   t   tsat   unvecRq   t   diag(   R)   R-   R…   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRM   —  s    	c         C   sG   t  j g  |  j d | ƒ D]' } t j t  j t  j | ƒ ƒ ƒ ^ q ƒ S(   NR-   (   R    R    R3   R¡   R¢   Rq   R£   (   R)   R-   R…   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   cum_effect_stderr›  s    	c         C   s1   |  j  d | ƒ } t j t j t j | ƒ ƒ ƒ S(   NR-   (   RŸ   R¡   R¢   R    Rq   R£   (   R)   R-   R2   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   lr_effect_stderrŸ  s    c         C   s*   t  j | |  j d |  j d f d t ƒS(   Ni   t   dtype(   R    R`   R	   t   float(   R)   R   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR_   £  s    #c         C   s˜   |  j  } t j | ƒ } t j | | ƒ } t j | ƒ } t | t j t j | |  j	 ƒ | ƒ t j |  j	 | ƒ | j
 ƒ } t j | j
 t j | ƒ ƒ S(   N(   R	   R¡   t   elimination_matrixt   commutation_matrixR    R   R   R!   Rˆ   R   R   t   Lt   inv(   R)   Ru   t   Lkt   KkkR‘   t   B(    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyR   §  s    	1c         C   s
   t  ‚ d  S(   N(   R/   (   R)   (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt
   fevd_table¹  s    N(   RS   RT   RU   R   RA   R,   R2   RB   RC   RD   RE   Rl   R   Ra   R^   R3   RQ   RŸ   RM   R¤   R¥   R_   R   R¯   (    (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyRW   ñ   s2   		8?P		.		(   RU   t
   __future__R    t   numpyR    t   numpy.linalgt   linalgR   t   scipy.linalgRª   t   statsmodels.tools.decoratorsR   t   statsmodels.tools.toolsR   t   statsmodels.compat.pythonR   t   statsmodels.tsa.tsatoolsR¡   t   tsatoolst"   statsmodels.tsa.vector_ar.plottingt	   vector_arRF   t   statsmodels.tsa.vector_ar.utilR$   R    t   matt   objectR   RW   (    (    (    s<   lib/python2.7/site-packages/statsmodels/tsa/vector_ar/irf.pyt   <module>   s   	Ù