ó
áp7]c           @` s  d  Z  d d l m Z m Z m Z d d l m Z d d l Z d d l Z	 d d l
 m Z m Z d d l Z d d l 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 e j ƒ  j Z e j d d d d d d ƒ e _ d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d  „  Z. d! „  Z/ d" „  Z0 d# „  Z1 e j2 j3 d$ „  ƒ Z4 d% „  Z5 d& „  Z6 d' „  Z7 d( „  Z8 d) „  Z9 d* „  Z: d+ „  Z; d, „  Z< d S(-   sV   
Tests for structural time series models

Author: Chad Fulton
License: Simplified-BSD
i    (   t   divisiont   absolute_importt   print_function(   t   PY3N(   t   assert_equalt   assert_allclose(   t	   macrodata(   t   SpecificationWarning(   t
   structural(   t   UnobservedComponents(   t   results_structuralt   starts
   1959-01-01t   ends
   2009-07-01t   freqt   QSc      
   C` s'  t  t |  ƒ } x| d D]} | j ƒ  } | j | d ƒ t j ƒ  } | j d d  ƒ } | d  k	 r‘ t j d d d t	 t ƒ d | ƒ | _
 n  d | k rß t j | d ƒ } | d d	 k rÒ | j j ƒ  } n  | | d <n  t | d
 |  } | j | j | j | j ƒ ƒ } t | j | ƒ | j | d ƒ }	 | d  k	 rM| d n | j
 j d }
 d | k rv| d } nZ |
 d k r‹d  } nE |
 d k r¦d! d" f } n* |
 d k rÁd# d$ f } n d t j f } t | j d t j | d d t j | d f ƒ | j d d ƒ } | j d d ƒ } t |	 j | d d | d | ƒy^ d d  l j } y d d l m } | ƒ  Wn t  k
 rˆn X| j! ƒ  } |	 j" d | ƒ Wn t  k
 r¹n Xt# j$ d t% ƒ Q | j& d d ƒ } | j | d k rt | j | d d d ƒn  | j' ƒ  Wd  QXq Wd  S(%   Nt   modelst   kwargsR   R   s
   1959-01-01t   periodst   exogt   realgdpt   numpyt   unempt   paramsi    t   cycle_period_boundst   Ag      ø?i   t   Qi   t   Mi   i   t   rtolgH¯¼šò×z>t   atolt   llf(   t   register_matplotlib_converterst   figt   recordt   dispiÿÿÿÿg-Cëâ6?(   g      ø?i   g      @i0   g      2@i   ((   t   getattrR
   t   copyt   updatet   dtat   popt   Nonet   pdt
   date_ranget   lent   indext   npt   logt   valuest   squeezeR	   t   start_paramst   transform_paramst   untransform_paramsR   t   filtert   freqstrt   infR   t   cycle_frequency_boundt   pit   getR   t   matplotlib.pyplott   pyplott   pandas.plottingR   t   ImportErrort   figuret   plot_componentst   warningst   catch_warningst   Truet   fitt   summary(   t   namet   truet   modelR   R.   R   R   t   modt	   roundtript   res_trueR4   R   R   R   t   pltR   R   t   res(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   run_ucm   sh    &		 c         C` s   t  d ƒ d  S(   Nt	   irregular(   RL   (   t   close_figures(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_irregularu   s    c         C` sW   i  t  _ t r t n d  } t r' d n d  } t j | d | ƒ t d ƒ Wd  QXd  S(   Ns    Specified model does not containt   matcht   fixed_intercept(   R   t   __warningregistry__R   R   R'   t   pytestt   warnsRL   (   RN   t   warningRP   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_fixed_intercepty   s
    	c         C` s   t  d ƒ d  S(   Nt   deterministic_constant(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_deterministic_constant‚   s    c         C` s   t  d ƒ d  S(   Nt   random_walk(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_random_walk†   s    c         C` s   t  d ƒ d  S(   Nt   local_level(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_local_levelŠ   s    c         C` sN   t  r t n d  } t  r d n d  } t j | d | ƒ t d ƒ Wd  QXd  S(   Ns   irregular component addedRP   t   fixed_slope(   R   R   R'   RS   RT   RL   (   RN   RU   RP   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_fixed_slopeŽ   s    c         C` sW   i  t  _ t r t n d  } t r' d n d  } t j | d | ƒ t d ƒ Wd  QXd  S(   Ns   irregular component addedRP   R]   (   R   RR   R   R   R'   RS   RT   RL   (   RN   RU   RP   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_fixed_slope_warn•   s
    	c         C` s   t  d ƒ d  S(   Nt   deterministic_trend(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_deterministic_trendŸ   s    c         C` s   t  d ƒ d  S(   Nt   random_walk_with_drift(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_random_walk_with_drift£   s    c         C` s   t  d ƒ d  S(   Nt    local_linear_deterministic_trend(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt%   test_local_linear_deterministic_trend§   s    c         C` s   t  d ƒ d  S(   Nt   local_linear_trend(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_local_linear_trend«   s    c         C` s   t  d ƒ d  S(   Nt   smooth_trend(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_smooth_trend¯   s    c         C` s   t  d ƒ d  S(   Nt   random_trend(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_random_trend³   s    c         C` s   t  d ƒ d  S(   Nt   cycle(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt
   test_cycle·   s    c         C` s   t  d ƒ d  S(   Nt   seasonal(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_seasonal»   s    c         C` s   t  d ƒ d  S(   Nt   freq_seasonal(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_freq_seasonal¿   s    c         C` s   t  d ƒ d  S(   Nt   reg(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_regÃ   s    c         C` s   t  d ƒ d  S(   Nt
   rtrend_ar1(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_rtrend_ar1Ç   s    c         C` s   t  d ƒ d  S(   Nt   lltrend_cycle_seasonal_reg_ar1(   RL   (   RN   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt#   test_lltrend_cycle_seasonal_reg_ar1Ë   s    c          C` s  t  j d ƒ d }  |  d } |  d  d  d … c d 7<|  d d  d … c d 8<t j d t ƒ e t |  d t d | d	 t ƒ} | j d
 d ƒ } t |  d t d | d	 t ƒ} | j d
 d ƒ } Wd  QXt | j	 j
 d d d d ƒt | j d d d d ƒd  S(   Nid   g      ð?i   g{®Gáz„?i   R    RM   R   t   mle_regressionR!   iÿÿÿÿi    g      à?R   gñhãˆµøä>(   i    iÿÿÿÿ(   R,   t   arangeR?   R@   RA   R	   t   FalseRB   R   t   regression_coefficientst   filteredR   (   t   endogR   t   mod1t   res1t   mod2t   res2(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_mle_regÐ   s    
c          C` s¦  i  t  _ d d g }  t r! t n d  } t r3 d n d  } t j | d | ƒ! t |  ƒ } t | j	 d ƒ Wd  QXt j
 t ƒ  t |  d ƒ Wd  QXt r  t n d  } t r² d n d  } t j | d | ƒ- t |  d t d t ƒ} t | j	 d	 ƒ Wd  QXd d d
 d g } xk | D]c } i t | 6} t r4t n d  } t rFd n d  } t j | d | ƒ t |  d	 |  Wd  QXqWt j
 t ƒ  t |  d d ƒWd  QXd  S(   Ni   i   s   irregular component addedRP   RM   s   invalid specs!   Trend component specified withoutt   trends   deterministic trendt   stochastic_levelt   stochastic_trends    may be overridden when the trendRn   (   R   RR   R   R   R'   RS   RT   R	   R   t   trend_specificationt   raisest
   ValueErrorRA   (   R}   RU   RP   RG   t   trend_attributest	   attributeR   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_specificationsæ   s0    			c          C` s8  t  d ƒ }  t j d } t j d } t j j d ƒ t j t j |  ƒ t j |  ƒ d f } t j j d |  ƒ } t j	 |  d	 ƒ } xM t
 d
 |  ƒ D]< } | d | | | d
 | | d
 | | | | d
 <q— W| d	 } | t j | | ƒ 7} t | d | d d	 ƒ} t | j d d d d d g d d ƒd  S(   Ng     ˆÃ@i
   iþÿÿÿg      à?gš™™™™™¹?iÒ  g      ð?t   sizei   i   i    R   t   autoregressiveR   (   i
   iþÿÿÿ(   g      à?gš™™™™™¹?(   t   intR,   t   r_t   randomt   seedt   c_t   onesRy   t   normalt   zerost   ranget   dotR	   R   R0   (   t   nobst   betat   phiR   t   epsR}   t   tRG   (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_start_params  s    ):
c          C` s³   t  j d ƒ d }  t  j d ƒ } t |  d | d d d d ƒ} | j d d	 d
 g ƒ } | j d d t  j d d ƒ d  d  … t  j f ƒ} t  j d d ƒ d } t | | ƒ d  S(   Ni2   i
   R   t   levelt	   dconstantRn   i   gVçž¯Ò<i    i   i<   (   R,   Ry   R	   t   smootht   forecastt   newaxisR   (   R}   R   RG   RK   t   actualt   desired(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_forecast+  s    4c          C` s	  d }  d } t  j j d ƒ t  j j d |  | f ƒ } t  j | d  d … d f <t  j j d |  d f ƒ } t  j j d |  d f ƒ } t j d d	 d
 d |  ƒ} t j | d | ƒ} t j | j	 ƒ  d | ƒ} t j | d | ƒ} t
 | d d | ƒt
 | d d | ƒt
 | d d | ƒt
 | d d | ƒt
 | d d | ƒt
 | d d | ƒg }	 xx|	 D]p}
 |
 j |
 j d t ƒ } | j ƒ  | j ƒ  | j d t ƒ | j ƒ  t  j j d d |
 j f ƒ } | j d d d | ƒ | j d d d | ƒ t  j j d d ƒ } t j t ƒ  | j d d d | ƒ Wd  QXt  j j d d |
 j f ƒ } t j t ƒ  | j d d d | ƒ Wd  QXt  j j d d |
 j d f ƒ } t j t ƒ  | j d d d | ƒ Wd  QXq_Wt j t ƒ ! t
 | d d t  j d ƒ ƒWd  QXd  S(   Ni   i   i¸  RŒ   i   i    i   s
   1970-01-01R   R   R   R+   t   llevelR   R!   t   dynamict   stepsi
   (   i
   i   (   R,   R   R‘   R”   t   nanR(   R)   t	   DataFramet   SeriesR/   R	   R0   RB   Rz   RC   t   predictRA   t   get_predictiont   k_exogR¡   t   get_forecastRS   R‡   Rˆ   R•   (   R˜   t   k_endogR}   t   exog1t   exog2R+   t   endog_pdt   exog1_pdt   exog2_pdR   RG   RK   t   oos_exog(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_misc_exog7  sL    


" c          C` sœ   t  j j d ƒ t j t  j j d d ƒ ƒ }  t j |  d ƒ } | j | j	 ƒ } | j
 d d d d d d	 g ƒ } t | j j t j d	 g ƒ ƒ t ƒ d  S(
   Niç RŒ   i2   R¦   R   i   R   R+   t   a(   R,   R   R‘   R(   Rª   R”   R   R	   R    R0   R¬   R   R+   t   equalst   IndexRA   (   R}   RG   RK   t   out(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   test_predict_custom_indexn  s    !c          C` sZ  t  j ƒ  }  t |  d d d d i d d 6i d d 6d d	 6g d
 t d d d g d t d t t g d t ƒ} d d d d d d t j d d g } | j | ƒ t | j	 d! ƒ t | j
 d$ ƒ t | j d' ƒ t | j j d* ƒ t | j t | ƒ ƒ t j d d g d d d d g d d d d d d g d d g f j d d ƒ } t | j j d  d  … d  d  … d f | ƒ t t j d d g d d g g ƒ t j d d d d g d d d d g d d d d g d d d d g g ƒ t j t j d t j d d ƒ t j d t j d d ƒ d d d d g t j d t j d d ƒ t j d t j d d ƒ d d d d g d d t j d t j d d ƒ t j d t j d d ƒ d d g d d t j d t j d d ƒ t j d t j d d ƒ d d g d d d d t j d t j d ƒ t j d t j d ƒ g d d d d t j d t j d ƒ t j d t j d ƒ g g ƒ t j d t j d t j d ƒ d t j d t j d ƒ g d t j d t j d ƒ d t j d t j d ƒ g g ƒ g ƒ } t | j j d  d  … d  d  … d f | d d ƒt j d d+ f ƒ } t j d ƒ | d d … d d … f <t j d ƒ | d d … d d … f <t j d ƒ | d d  … d d  … f <t | j j d  d  … d  d  … d f | ƒ t t j | d d !ƒ t j d ƒ | d t j d ƒ | d g ƒ } t | j j d  d  … d  d  … d f | ƒ d  S(,   NR   Rž   t   lltrendRp   i   t   periodi	   i   t	   harmonicsRl   R   i   i   t   damped_cyclet   stochastic_freq_seasonalt   stochastic_cyclei   i   i   g      >@gÍÌÌÌÌÌì?i    i   iÿÿÿÿg      "@g      @gÍÌÌÌÌÌì¿R   gH¯¼šò×z>iþÿÿÿi   i   i   i   i   i   i   i   i   i   i   i   i   (   R%   R#   R	   RA   Rz   R,   R7   R$   R   t   k_statest   k_state_covt   loglikelihood_burnR   t   ssmt   k_posdeft   k_paramsR*   R   t   reshapet   designt   __direct_sumt   arrayt   cost   sint
   transitionR•   t   eyet	   selectiont   diagt	   state_cov(   R.   RF   R   t   expected_designt   expected_transitiont   expected_selectiont   expected_state_cov(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt(   test_matrices_somewhat_complicated_modelw  sh    
	,KFEF=D?H/%%%,c         C` s¤   t  j g  |  D] } | j ^ q d d ƒ} t  j | ƒ } d } x] |  D]U } | j \ } } | | k sn t ‚ | | | | | … | | | … f <| | 7} qG W| S(   sL   Compute the matrix direct sum of an iterable of square numpy 2-d arrays
    t   axisi    (   R,   t   sumt   shapeR•   t   AssertionError(   t   square_matricest   mt	   new_shapet	   new_arrayt   offsett   rowst   cols(    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyRË   ¿  s    +$(=   t   __doc__t
   __future__R    R   R   t   statsmodels.compatR   R?   R   R,   t   numpy.testingR   R   t   pandasR(   RS   t   statsmodels.datasetsR   t   statsmodels.tools.sm_exceptionsR   t   statsmodels.tsa.statespaceR   t%   statsmodels.tsa.statespace.structuralR	   t(   statsmodels.tsa.statespace.tests.resultsR
   t   load_pandast   dataR%   R)   R+   RL   RO   RV   RX   RZ   R\   R^   R_   Ra   Rc   Re   Rg   Ri   Rk   Rm   Ro   Rq   Rs   Ru   t   markt   slowRw   R‚   R‹   R   R¥   R·   R¼   RØ   RË   (    (    (    sO   lib/python2.7/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyt   <module>   sT   !	Y								
													+			7			H