U
    Ãmœd�Á  ã                   @   s  d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
ZddlZddlmZmZ ddlmZ ddlmZ ej ej e¡¡Zej dd	¡Ze ej ee¡¡Zej dd
¡Ze ej ee¡¡ZG dd„ dƒZG dd„ deƒZ G dd„ de ƒZ!G dd„ de ƒZ"G dd„ de ƒZ#G dd„ de ƒZ$G dd„ de ƒZ%G dd„ de ƒZ&G dd„ de ƒZ'G dd„ deƒZ(G dd „ d e(ƒZ)G d!d"„ d"e(ƒZ*d#d$„ Z+d%d&„ Z,d'd(„ Z-d)d*„ Z.d+d,„ Z/d-d.„ Z0d/d0„ Z1d1d2„ Z2ej3 4d3d4d5d6g¡ej3 4d7d8d9g¡d:d;„ ƒƒZ5d<d=„ Z6d>d?„ Z7d@dA„ Z8dBdC„ Z9dS )DzF
Tests for VARMAX models

Author: Chad Fulton
License: Simplified-BSD
é    N)Úassert_equalÚassert_allcloseÚassert_raises)ÚvarmaxÚsarimax)Úforgé   )Úresults_varmaxÚresultszresults_var_stata.csvzresults_varmax_stata.csvc                   @   sl   e Zd ZdZdd„ Zejjdd„ ƒZejjdd„ ƒZ	dd	„ Z
d
d„ Zdd„ Zddd„Zddd„Zdd„ ZdS )ÚCheckVARMAXz´
    Test Vector Autoregression against Stata's `dfactor` code (Stata's
    `var` function uses OLS and not state space / MLE, so we cannot get
    equivalent log-likelihoods)
    c              	   C   s€   t jdd��j t  d¡ | jjddd�}d| j_d| j_| jj|jdddd	�}d| j_d| j_t|j	| j
j	d
d� W 5 Q R X d S )NT©ÚrecordÚalwayséd   F)ÚmaxiterÚdispÚnmiè  )Úmethodr   r   çñhãˆµøä>©Zrtol)ÚwarningsÚcatch_warningsÚsimplefilterÚmodelÚfitÚenforce_stationarityÚenforce_invertibilityÚparamsr   Úllfr
   )Úselfr
   © r    úe/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_varmax.pyÚtest_mle%   s    
ÿzCheckVARMAX.test_mlec                 C   s‚   | j }| |j¡ t|jƒt|jƒks*t‚| | |j¡¡}t||jƒ d|_	d|_
| | |j¡¡}d|_	d|_
t||jƒ d S )NFT)r   ÚfilterÚstart_paramsÚlenÚparam_namesÚAssertionErrorZtransform_paramsZuntransform_paramsr   r   r   )r   r   Úactualr    r    r!   Útest_params4   s    
ÿ
ÿzCheckVARMAX.test_paramsc                    sø   | j  ¡  | j‰ˆjdkrtt | j jˆj ¡}| ˆj	ˆj	ˆj ¡‰ t ‡ ‡fdd„t
ˆjƒD ƒ¡}t| j j|ƒ nt| j jd ƒ ˆjdkræt | j jˆj ¡}| ˆj	ˆj	ˆj ¡‰ t ‡ ‡fdd„t
ˆjƒD ƒ¡}t| j j|ƒ nt| j jd ƒ d S )Nr   c                    s2   g | ]*}ˆ d ˆj …|ˆj  |d ˆj  …f ‘qS ©Nr   ©Úk_endog©Ú.0Úi©Zcoefficientsr   r    r!   Ú
<listcomp>Y   s
   þ
 ÿz,CheckVARMAX.test_results.<locals>.<listcomp>c                    s2   g | ]*}ˆ d ˆj …|ˆj  |d ˆj  …f ‘qS r*   r+   r-   r0   r    r!   r1   g   s
   þ
 ÿ)r
   Úsummaryr   Úk_arÚnpÚarrayr   Z
_params_arÚreshaper,   Úranger   Zcoefficient_matrices_varZk_maZ
_params_maZcoefficient_matrices_vma)r   Z	params_arZcoefficient_matricesZ	params_mar    r0   r!   Útest_resultsM   s4    


ÿýÿ

ÿýÿzCheckVARMAX.test_resultsc                 C   s   t | jj| jd dd� d S )NZloglikeç�íµ ÷Æ°>r   )r   r
   r   Útrue©r   r    r    r!   Útest_loglikeq   s    zCheckVARMAX.test_loglikec                 C   s   t | jj| jd dd� d S )NÚaicé   ©Úatol)r   r
   r=   r:   r;   r    r    r!   Útest_aict   s    zCheckVARMAX.test_aicc                 C   s   t | jj| jd dd� d S )NÚbicr>   r?   )r   r
   rB   r:   r;   r    r    r!   Útest_bicx   s    zCheckVARMAX.test_bicr9   c                 K   s*   t | jjf d|i|—Ž| jd |d� d S )NÚendÚpredictr?   ©r   r
   rE   r:   )r   rD   r@   Úkwargsr    r    r!   Útest_predict|   s
    ýzCheckVARMAX.test_predictc                 K   s,   t | jjf ||dœ|—Ž| jd |d� d S )N©rD   ÚdynamicÚdynamic_predictr?   rF   )r   rD   rJ   r@   rG   r    r    r!   Útest_dynamic_predictƒ   s
    ýz CheckVARMAX.test_dynamic_predictc                 C   s&   | j j}d | j _| j j}t||ƒ d S ©N)r
   Ústandardized_forecasts_errorZ_standardized_forecasts_errorr   )r   Z
cython_sfeZ
python_sfer    r    r!   Ú!test_standardized_forecasts_errorŠ   s    z-CheckVARMAX.test_standardized_forecasts_errorN)r9   )r9   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   ÚpytestÚmarkZsmoker)   r8   r<   rA   rC   rH   rL   rO   r    r    r    r!   r      s   

#

r   c                       s@   e Zd Zeddddgfdd„ƒZ‡ fdd„Z‡ fd	d
„Z‡  ZS )ÚCheckLutkepohlÚapproxÚdln_invÚdln_incÚdln_consumpc           
      K   s´   || _ tjtjdddgtjdddd�d�}t |d ¡ ¡ |d	< t |d ¡ ¡ |d
< t |d ¡ ¡ |d< |j	dd…|f }	t
j|	f|||dœ|—Ž| _| jj|d |d�| _d S )NÚinvÚincÚconsumpú
1960-01-01ú
1982-10-01ÚQS©Úfreq©ÚcolumnsÚindexrX   rY   rZ   z
1960-04-01ú
1978-10-01©ÚorderÚtrendÚerror_cov_typer   ©Úcov_type)r:   ÚpdÚ	DataFramer	   Úlutkepohl_dataÚ
date_ranger4   ÚlogÚdiffÚlocr   ÚVARMAXr   Úsmoothr
   )
Úclsr:   rh   ri   rj   rl   Úincluded_varsrG   ÚdtaÚendogr    r    r!   Úsetup_class’   s      þÿÿzCheckLutkepohl.setup_classc                    s   t t| ƒjf ddi|—Ž d S )NrD   r_   ©ÚsuperrV   rH   ©r   rG   ©Ú	__class__r    r!   rH   §   s    zCheckLutkepohl.test_predictc                    s    t t| ƒjf dddœ|—Ž d S )Nr_   z
1961-01-01rI   )r|   rV   rL   r}   r~   r    r!   rL   ª   s
    ÿþz#CheckLutkepohl.test_dynamic_predict)rP   rQ   rR   Úclassmethodrz   rH   rL   Ú__classcell__r    r    r~   r!   rV   ‘   s   ÿrV   c                       s8   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestVARc                    s^   t j ¡ }tjdd … dddg |d< tjdd … dddg |d	< tt| ƒj|d
ddd� d S )Nr   Z	predict_1Z	predict_2Z	predict_3rE   Zdyn_predict_1Zdyn_predict_2Zdyn_predict_3rK   ©r   r   ÚnÚunstructuredrg   )r	   Zlutkepohl_var1ÚcopyÚvar_resultsÚilocr|   r‚   rz   ©rv   r:   r~   r    r!   rz   ±   s    
þ
þ

  þzTestVAR.setup_classc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S ©Nç      à?é   Úvar_oimç-Cëâ6?r?   ©r
   Z_cov_params_approxÚdiagonalr   r:   ©r   Zbser    r    r!   Útest_bse_approx¾   s    zTestVAR.test_bse_approxc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S ©Nr‹   rŒ   r�   ç{®Gáz„?r?   ©r
   Z_cov_params_oimr�   r   r:   r‘   r    r    r!   Útest_bse_oimÂ   s    zTestVAR.test_bse_oimc           	      C   st  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD ]¦}|| jj	 }||d  }| jj
| }t d| |¡s€t‚t| d¡ƒd	ks–t‚t d
||d   |¡s²t‚t d||d   |¡sÎt‚t d||d   |¡sDt‚qD|d }t d|¡�st‚t| d¡ƒdk�st‚|| jj }| jj| jj }tt|ƒƒD ](}t d|| || f |¡�sFt‚�qFd S )Nc                 S   s   g | ]}t |ƒ‘qS r    ©Ústr©r.   Útabler    r    r!   r1   È   s     z(TestVAR.test_summary.<locals>.<listcomp>r   úModel:.*VAR\(1\)r   rŒ   úResults for equation %sÚ
é   úL1.dln_inv +%.4fúL1.dln_inc +%.4fr   úL1.dln_consump +%.4féÿÿÿÿúError covariance matrixé   ú%s +%.4f©r
   r2   Útablesr:   ÚreÚsearchr'   r7   r   r,   Úendog_namesr%   ÚsplitÚ_params_state_covr&   ©	r   r2   r§   r   r/   Úoffsetrš   ÚnameÚnamesr    r    r!   Útest_summaryÆ   s,    

ÿ
zTestVAR.test_summary©	rP   rQ   rR   r€   rz   r’   r–   r±   r�   r    r    r~   r!   r‚   °   s
   r‚   c                       s8   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestVAR_diagonalc                    s^   t j ¡ }tjdd … dddg |d< tjdd … dddg |d	< tt| ƒj|d
ddd� d S )Nr   Úpredict_diag1Úpredict_diag2Úpredict_diag3rE   Údyn_predict_diag1Údyn_predict_diag2Údyn_predict_diag3rK   rƒ   r„   r�   rg   )r	   Zlutkepohl_var1_diagr†   r‡   rˆ   r|   r³   rz   r‰   r~   r    r!   rz   ì   s    
þ
þ

  þzTestVAR_diagonal.setup_classc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S )Nr‹   rŒ   r�   r   r?   r�   r‘   r    r    r!   r’   ù   s    z TestVAR_diagonal.test_bse_approxc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S r“   r•   r‘   r    r    r!   r–   ý   s    zTestVAR_diagonal.test_bse_oimc           	      C   st  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD ]¦}|| jj	 }||d  }| jj
| }t d| |¡s€t‚t| d¡ƒd	ks–t‚t d
||d   |¡s²t‚t d||d   |¡sÎt‚t d||d   |¡sDt‚qD|d }t d|¡�st‚t| d¡ƒd	k�st‚|| jj }| jj| jj }tt|ƒƒD ](}t d|| || f |¡�sFt‚�qFd S )Nc                 S   s   g | ]}t |ƒ‘qS r    r—   r™   r    r    r!   r1     s     z1TestVAR_diagonal.test_summary.<locals>.<listcomp>r   r›   r   rŒ   rœ   r�   rž   rŸ   r    r   r¡   r¢   r£   r¥   r¦   r­   r    r    r!   r±     s,    

ÿ
zTestVAR_diagonal.test_summaryr²   r    r    r~   r!   r³   ë   s
   r³   c                       s\   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚTestVAR_measurement_erroraÝ  
    Notes
    -----
    There does not appear to be a way to get Stata to estimate a VAR with
    measurement errors. Thus this test is mostly a smoke test that measurement
    errors are setup correctly: it uses the same params from TestVAR_diagonal
    and sets the measurement errors variance params to zero to check that the
    loglike and predict are the same.

    It also checks that the state-space representation with positive
    measurement errors is correct.
    c                    s–   t j ¡ }tjdd … dddg |d< tjdd … dddg |d	< tt| ƒj|d
dddd� dddg| _t	j
|d d d… | jf }| j |¡| _d S )Nr   r´   rµ   r¶   rE   r·   r¸   r¹   rK   rƒ   r„   r�   T)rh   ri   rj   Úmeasurement_errorç      ð?ç       @g      @r   éýÿÿÿ)r	   Zlutkepohl_var1_diag_measr†   r‡   rˆ   r|   rº   rz   Ú true_measurement_error_variancesr4   Úr_r   ru   Úresults2)rv   r:   r   r~   r    r!   rz   3  s*    
þ
þ

   þÿz%TestVAR_measurement_error.setup_classc                 C   s   d S rM   r    r;   r    r    r!   r"   F  s    z"TestVAR_measurement_error.test_mlec                 C   s   d S rM   r    r;   r    r    r!   r’   K  s    z)TestVAR_measurement_error.test_bse_approxc                 C   s   d S rM   r    r;   r    r    r!   r–   P  s    z&TestVAR_measurement_error.test_bse_oimc                 C   s   d S rM   r    r;   r    r    r!   rA   T  s    z"TestVAR_measurement_error.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   Y  s    z"TestVAR_measurement_error.test_bicc                 C   s~   | j jj ¡ D ]j}|dkrq|dkrZ| jjj}t | j	¡d d …d d …tj
f }t||ƒ qtt| jj|ƒt| jj|ƒƒ qd S )NZobsÚobs_cov)r   ÚssmZshapesÚkeysrÁ   Zfilter_resultsrÂ   r4   Zdiagr¿   Únewaxisr   Úgetattrr
   )r   r¯   r(   Údesiredr    r    r!   Útest_representation^  s    
ÿÿÿz-TestVAR_measurement_error.test_representationc           	      C   s’  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD ]Ä}|| jj	 }||d  }| jj
| }t d| |¡s€t‚t| d¡ƒd	ks–t‚t d
||d   |¡s²t‚t d||d   |¡sÎt‚t d||d   |¡sêt‚t d||d    |¡sDt‚qD|d }t d|¡�s$t‚t| d¡ƒdk�s<t‚|| jj }| jj| jj }tt|ƒƒD ](}t d|| || f |¡�sdt‚�qdd S )Nc                 S   s   g | ]}t |ƒ‘qS r    r—   r™   r    r    r!   r1   o  s     z:TestVAR_measurement_error.test_summary.<locals>.<listcomp>r   r›   r   rŒ   rœ   r�   é	   rŸ   r    r   r¡   zmeasurement_variance +%.4gr¢   r£   rž   r¥   r¦   r­   r    r    r!   r±   m  s2    

ÿÿ
z&TestVAR_measurement_error.test_summary)rP   rQ   rR   rS   r€   rz   r"   r’   r–   rA   rC   rÈ   r±   r�   r    r    r~   r!   rº   &  s   rº   c                       s@   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Zd	d
„ Z‡  Z	S )ÚTestVAR_obs_interceptc                    sd   t j ¡ }tjdd … dddg |d< tjdd … dddg |d	< tt| ƒj|d
dd|d d� d S )Nr   Zpredict_int1Zpredict_int2Zpredict_int3rE   Zdyn_predict_int1Zdyn_predict_int2Zdyn_predict_int3rK   rƒ   r„   r�   Úobs_intercept)rh   ri   rj   rË   )r	   Zlutkepohl_var1_obs_interceptr†   r‡   rˆ   r|   rÊ   rz   r‰   r~   r    r!   rz   •  s     
þ
þ

   þz!TestVAR_obs_intercept.setup_classc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S rŠ   r�   r‘   r    r    r!   r’   ¢  s    z%TestVAR_obs_intercept.test_bse_approxc                 C   s.   | j  ¡  ¡ d }t|d | jd dd� d S r“   r•   r‘   r    r    r!   r–   ¦  s    z"TestVAR_obs_intercept.test_bse_oimc                 C   s   d S rM   r    r;   r    r    r!   rA   ª  s    zTestVAR_obs_intercept.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   ¯  s    zTestVAR_obs_intercept.test_bic)
rP   rQ   rR   r€   rz   r’   r–   rA   rC   r�   r    r    r~   r!   rÊ   ”  s   rÊ   c                       sl   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	‡ fdd„Z
dd„ Zdd„ Zdd„ Z‡  ZS )ÚTestVAR_exogc              	      sˆ   t j ¡ }tjdd… dddg |d< d|d jdd d …f< tjdd … dd	d
g |d< t d¡d }tt| ƒj	|ddd|ddd� d S )Nr   éL   Zpredict_exog1_1Zpredict_exog1_2Zpredict_exog1_3rE   r   Zfcast_exog1_dln_invZfcast_exog1_dln_incZfcast_exog1_dln_consumpÚfcastéK   rŒ   rƒ   r„   r…   Úapproximate_diffuse©rh   ri   rj   ÚexogZinitializationÚloglikelihood_burn)
r	   Zlutkepohl_var1_exogr†   r‡   rˆ   r4   Úaranger|   rÌ   rz   ©rv   r:   rÒ   r~   r    r!   rz   ¸  s(    
þ
þ

    ýzTestVAR_exog.setup_classc                 C   s   d S rM   r    r;   r    r    r!   r"   È  s    zTestVAR_exog.test_mlec                 C   s   d S rM   r    r;   r    r    r!   rA   Ë  s    zTestVAR_exog.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   Ï  s    zTestVAR_exog.test_bicc                 C   s6   | j  ¡  ¡ d }t|d d… d | jd dd� d S ©Nr‹   iúÿÿÿrŒ   r�   r   r?   r�   r‘   r    r    r!   r’   Ó  s    zTestVAR_exog.test_bse_approxc                 C   s6   | j  ¡  ¡ d }t|d d… d | jd dd� d S rÖ   r•   r‘   r    r    r!   r–   Ø  s    zTestVAR_exog.test_bse_oimc                    s   t t| ƒjddd� d S ©Nrf   gü©ñÒMbP?©rD   r@   r{   r;   r~   r    r!   rH   Ý  s    zTestVAR_exog.test_predictc                 C   s   d S rM   r    r;   r    r    r!   rL   à  s    z!TestVAR_exog.test_dynamic_predictc                 C   sF   t  dd¡d d d …t jf }| jjd|d�}t|| jd dd� d S )	NrÏ   é[   rŒ   é   ©ZstepsrÒ   rÎ   r9   r?   )r4   rÔ   rÅ   r
   Úforecastr   r:   ©r   rÒ   rÇ   r    r    r!   Útest_forecastä  s    zTestVAR_exog.test_forecastc           	      C   sœ  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD ]Î}|| jj	 }||d  }| jj
| }t d| |¡s€t‚t| d¡ƒd	ks–t‚t d
||d   |¡s²t‚t d||d   |¡sÎt‚t d||d   |¡sêt‚t dt|| jj | dd� |¡sDt‚qD|d }t d|¡�s.t‚t| d¡ƒdk�sFt‚|| jj }| jj| jj }tt|ƒƒD ](}t d|| || f |¡�snt‚�qnd S )Nc                 S   s   g | ]}t |ƒ‘qS r    r—   r™   r    r    r!   r1   ø  s     z-TestVAR_exog.test_summary.<locals>.<listcomp>r   zModel:.*VARX\(1\)r   rŒ   rœ   r�   rÉ   rŸ   r    r   r¡   z	beta.x1 +é   ©Úprecr¢   r£   r¤   r¥   )r
   r2   r§   r:   r¨   r©   r'   r7   r   r,   rª   r%   r«   r   Z_params_regressionr¬   r&   r­   r    r    r!   r±   ö  s:    

 ÿÿý
zTestVAR_exog.test_summary)rP   rQ   rR   r€   rz   r"   rA   rC   r’   r–   rH   rL   rÞ   r±   r�   r    r    r~   r!   rÌ   µ  s   rÌ   c                       sd   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	‡ fdd„Z
dd„ Zdd„ Z‡  ZS )ÚTestVAR_exog2c              	      s¦   t j ¡ }tjdd… dddg |d< d|d jdd d …f< tjdd … dd	d
g |d< tjt d¡t d¡d d d …tj	f f }t
t| ƒj|ddd|ddd� d S )Nr   rÍ   Zpredict_exog2_1Zpredict_exog2_2Zpredict_exog2_3rE   r   Zfcast_exog2_dln_invZfcast_exog2_dln_incZfcast_exog2_dln_consumprÎ   )rÏ   r   rÏ   rŒ   rƒ   r„   r…   rÐ   rÑ   )r	   Zlutkepohl_var1_exog2r†   r‡   rˆ   r4   Úc_ÚonesrÔ   rÅ   r|   râ   rz   rÕ   r~   r    r!   rz   $  s(    
þ
þ
,
    ýzTestVAR_exog2.setup_classc                 C   s   d S rM   r    r;   r    r    r!   r"   4  s    zTestVAR_exog2.test_mlec                 C   s   d S rM   r    r;   r    r    r!   rA   7  s    zTestVAR_exog2.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   :  s    zTestVAR_exog2.test_bicc                 C   s   d S rM   r    r;   r    r    r!   r’   =  s    zTestVAR_exog2.test_bse_approxc                 C   s   d S rM   r    r;   r    r    r!   r–   @  s    zTestVAR_exog2.test_bse_oimc                    s   t t| ƒjddd� d S r×   r{   r;   r~   r    r!   rH   C  s    zTestVAR_exog2.test_predictc                 C   s   d S rM   r    r;   r    r    r!   rL   F  s    z"TestVAR_exog2.test_dynamic_predictc                 C   sV   t jt  d¡t  dd¡d d d …t jf f }| jjd|d�}t|| jd dd	� d S )
N)rÚ   r   rÏ   rÙ   rŒ   rÚ   rÛ   rÎ   r9   r?   )	r4   rã   rä   rÔ   rÅ   r
   rÜ   r   r:   rÝ   r    r    r!   rÞ   J  s
    ÿzTestVAR_exog2.test_forecast)rP   rQ   rR   r€   rz   r"   rA   rC   r’   r–   rH   rL   rÞ   r�   r    r    r~   r!   râ     s   râ   c                       s8   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestVAR2c                    s`   t j ¡ }tjdd … ddg |d< tjdd … ddg |d< tt| ƒj|dd	d
ddgd� d S )Nr   Zpredict_var2_1Zpredict_var2_2rE   Zdyn_predict_var2_1Zdyn_predict_var2_2rK   )rŒ   r   r„   r…   rX   rY   )rh   ri   rj   rw   )r	   Zlutkepohl_var2r†   r‡   rˆ   r|   rå   rz   r‰   r~   r    r!   rz   T  s    
ÿ
ÿ

   þzTestVAR2.setup_classc                 C   s>   | j  ¡  ¡ d }t|d d… d | jd d d… dd� d S )Nr‹   r¾   rŒ   r�   r   r?   r�   r‘   r    r    r!   r’   _  s    zTestVAR2.test_bse_approxc                 C   s>   | j  ¡  ¡ d }t|d d… d | jd d d… dd� d S )Nr‹   r¾   rŒ   r�   r”   r?   r•   r‘   r    r    r!   r–   d  s    zTestVAR2.test_bse_oimc           	      C   s˜  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD ]Ê}|| jj	 | jj
 }||d  }| jj| }t d| |¡sˆt‚t| d¡ƒd	ksžt‚t d
||d   |¡sºt‚t d||d   |¡sÖt‚t d||d   |¡sòt‚t d||d   |¡sDt‚qD|d }t d|¡�s*t‚t| d¡ƒdk�sBt‚|| jj }| jj| jj }tt|ƒƒD ](}t d|| || f |¡�sjt‚�qjd S )Nc                 S   s   g | ]}t |ƒ‘qS r    r—   r™   r    r    r!   r1   k  s     z)TestVAR2.test_summary.<locals>.<listcomp>r   zModel:.*VAR\(2\)r   rŒ   rœ   r�   rÉ   rŸ   r    r   zL2.dln_inv +%.4fzL2.dln_inc +%.4fr>   r¢   r£   rž   r¥   )r
   r2   r§   r:   r¨   r©   r'   r7   r   r,   r3   rª   r%   r«   r¬   r&   r­   r    r    r!   r±   i  s*    

zTestVAR2.test_summaryr²   r    r    r~   r!   rå   S  s
   
rå   c                   @   s   e Zd Zeddd„ƒZdS )ÚCheckFREDManufacturingrW   c              	   K   sÖ   || _ tj tdd¡}t|dƒ�}t |¡}	W 5 Q R X tj|	j	dd�|	_
|	d  ¡ |	d< |	d  ¡ |	d	< |	jd
d …dd	gf }
tjdd��, t d¡ tj|
f|||dœ|—Ž| _W 5 Q R X | jj|d |d�| _d S )Nr
   zmanufac.dtaÚrbZMSra   Z	lncaputilZ
dlncaputilZlnhoursZdlnhoursz
1972-02-01Tr   r   rg   r   rk   )r:   ÚosÚpathÚjoinÚcurrent_pathÚopenrm   Z
read_stataZDatetimeIndexÚmonthre   rr   rs   r   r   r   r   rt   r   ru   r
   )rv   r:   rh   ri   rj   rl   rG   ré   Z	test_datarx   ry   r    r    r!   rz   �  s     
ÿÿz"CheckFREDManufacturing.setup_classN)rW   )rP   rQ   rR   r€   rz   r    r    r    r!   ræ   Ž  s   ræ   c                       s„   e Zd ZdZe‡ fdd„ƒZdd„ Zej 	d¡dd„ ƒZ
ej 	d¡d	d
„ ƒZdd„ Zdd„ Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )Ú	TestVARMAúN
    Test against the sspace VARMA example with some params set to zeros.
    c                    sZ   t j ¡ }tjdd … ddg |d< tjdd … ddg |d< tt| ƒj|dd	d
d� d S )Nr   Zpredict_varma11_1Zpredict_varma11_2rE   Zdyn_predict_varma11_1Zdyn_predict_varma11_2rK   ©r   r   r„   r�   rg   )r	   Zfred_varma11r†   Úvarmax_resultsrˆ   r|   rî   rz   r‰   r~   r    r!   rz   ª  s    
ÿ
 ÿ

   ÿzTestVARMA.setup_classc                 C   s   d S rM   r    r;   r    r    r!   r"   µ  s    zTestVARMA.test_mleú,Known failure: standard errors do not match.c                 C   s   d S rM   r    r;   r    r    r!   r’   »  s    zTestVARMA.test_bse_approxc                 C   s   d S rM   r    r;   r    r    r!   r–   À  s    zTestVARMA.test_bse_oimc                 C   s   d S rM   r    r;   r    r    r!   rA   Å  s    zTestVARMA.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   Ë  s    zTestVARMA.test_bicc                    s   t t| ƒjddd� d S ©Nú
2009-05-01rŽ   rØ   )r|   rî   rH   r;   r~   r    r!   rH   Ñ  s    zTestVARMA.test_predictc                    s   t t| ƒjddd� d S ©Nrô   ú
2000-01-01rI   )r|   rî   rL   r;   r~   r    r!   rL   Ô  s    ÿzTestVARMA.test_dynamic_predictc           
   	   C   sÞ  | j  ¡ }dd„ |jD ƒ}| jd }t d|d ¡s8t‚t| jj	ƒD �]}|| jj	 }| jj	d | jj
 || jj	  }||d  }| jj| }t d| |¡s¢t‚t| d¡ƒd	ks¸t‚t d
t||d  dd� |¡sÜt‚t dt||d  dd� |¡�st‚t dt||d  dd� |¡�s(t‚t dt||d  dd� |¡sDt‚qD|d }t d|¡�sht‚t| d¡ƒdk�s€t‚|| jj }| jj| jj }	tt|	ƒƒD ]0}t d|	| t|| dd�f |¡�s¨t‚�q¨d S )Nc                 S   s   g | ]}t |ƒ‘qS r    r—   r™   r    r    r!   r1   Ú  s     z*TestVARMA.test_summary.<locals>.<listcomp>r   zModel:.*VARMA\(1,1\)r   rŒ   rœ   r�   rÉ   zL1.dlncaputil +rß   rà   zL1.dlnhours +r   zL1.e\(dlncaputil\) +zL1.e\(dlnhours\) +r¢   r£   é   z%s +%s)r
   r2   r§   r:   r¨   r©   r'   r7   r   r,   r3   rª   r%   r«   r   r¬   r&   )
r   r2   r§   r   r/   Z	offset_arZ	offset_marš   r¯   r°   r    r    r!   r±   Ø  sL    


ÿþþ
þ
þ
ÿzTestVARMA.test_summary)rP   rQ   rR   rS   r€   rz   r"   rT   rU   Úskipr’   r–   rA   rC   rH   rL   r±   r�   r    r    r~   r!   rî   ¥  s   




rî   c                       s|   e Zd ZdZe‡ fdd„ƒZdd„ Zej 	d¡dd„ ƒZ
ej 	d¡d	d
„ ƒZdd„ Zdd„ Z‡ fdd„Z‡ fdd„Z‡  ZS )ÚTestVMA1rï   c                    sZ   t j ¡ }tjdd … ddg |d< tjdd … ddg |d< tt| ƒj|dd	d
d� d S )Nr   Zpredict_vma1_1Zpredict_vma1_2rE   Zdyn_predict_vma1_1Zdyn_predict_vma1_2rK   ©r   r   r„   r�   rg   )r	   Z	fred_vma1r†   rñ   rˆ   r|   rù   rz   r‰   r~   r    r!   rz     s    
ÿ
 ÿ

   ÿzTestVMA1.setup_classc                 C   s   d S rM   r    r;   r    r    r!   r"     s    zTestVMA1.test_mlerò   c                 C   s   d S rM   r    r;   r    r    r!   r’     s    zTestVMA1.test_bse_approxc                 C   s   d S rM   r    r;   r    r    r!   r–   #  s    zTestVMA1.test_bse_oimc                 C   s   d S rM   r    r;   r    r    r!   rA   (  s    zTestVMA1.test_aicc                 C   s   d S rM   r    r;   r    r    r!   rC   .  s    zTestVMA1.test_bicc                    s   t t| ƒjddd� d S ró   )r|   rù   rH   r;   r~   r    r!   rH   4  s    zTestVMA1.test_predictc                    s   t t| ƒjddd� d S rõ   )r|   rù   rL   r;   r~   r    r!   rL   7  s    ÿzTestVMA1.test_dynamic_predict)rP   rQ   rR   rS   r€   rz   r"   rT   rU   rø   r’   r–   rA   rC   rH   rL   r�   r    r    r~   r!   rù     s   




rù   c                  C   sZ   t  d¡ dd¡} t  d¡}tj|tjdddd�d�}tj| |d	d
� tj| |d	d
� d S )Né   é
   rŒ   rö   z
2009-01-01ZASra   ©re   rƒ   ©rÒ   rh   )r4   rÔ   r6   rm   ÚSeriesrp   r   rt   )ry   rÒ   Úexog2r    r    r!   Útest_specifications<  s    
ÿ
r  c               	   C   s  i t _t d¡ dd¡} t t¡� t j| ddd� W 5 Q R X t t¡� t j| ddd� W 5 Q R X t t¡� t j| dd	� W 5 Q R X t	j
d
d��}t	 d¡ t j| dd	� W 5 Q R X t	j
d
d��8}t	 d¡ t j| dd	� d}t|d jƒ|ksøt‚W 5 Q R X t	 ¡  d S )Nrû   rü   rŒ   rƒ   Ú ©rh   ri   )rh   rj   )r   r   ©rh   Tr   r   rð   zcEstimation of VARMA(p,q) models is not generically robust, due especially to identification issues.r   )r   Ú__warningregistry__r4   rÔ   r6   rT   ÚraisesÚ
ValueErrorrt   r   r   r   r˜   Úmessager'   Úresetwarnings)ry   Úwr  r    r    r!   Útest_misspecificationsJ  s"    

 r  c               
   C   sü  d} d}t j d¡ t jj| |fd�}t j|d d…df< t j|dd…df< t jj| dfd�}t jj| dfd�}tjd	d
| d�}tj||d�}tj| 	¡ |d�}tj||d�}t
j||dd�t
j||dd�t
j||dd�t
j||dd�g}	|	D ]Þ}
|
j |
jdd�}| ¡  | ¡  |jdd� | ¡  t jjd|
jfd�}|jd|d� |jd|d� t jjd|
jfd�}t t¡� |jd|d� W 5 Q R X t jjd|
jd fd�}t t¡� |jd|d� W 5 Q R X qìt t¡� t
j|t  d¡dd� W 5 Q R X d S )Nrû   rŒ   i¸  ©Úsizerß   r   é   r   z
1970-01-01r`   )rb   Zperiodsrý   rƒ   rþ   F)r   T)rJ   rÛ   )rü   rß   )r4   ÚrandomÚseedÚnormalÚnanrm   rp   rn   rÿ   Zsqueezer   rt   r$   r   r2   rE   Zget_predictionZk_exogrÜ   Zget_forecastrT   r  r  Úzeros)Únobsr,   ry   Zexog1r   re   Zendog_pdZexog1_pdZexog2_pdÚmodelsÚmodÚresZoos_exogr    r    r!   Útest_misc_exogm  sF    ür  c                  C   sh   t j d¡ t t jjdd�¡} tj| dd�}| |j	¡}|j
dddgd�}|j t dg¡¡sdt‚d S )	Niç )é2   rŒ   r  rƒ   r  r   Úa)ÚstartrD   re   )r4   r  r  rm   rn   r  r   rt   ru   r$   rE   re   ÚequalsÚIndexr'   )ry   r  r  Úoutr    r    r!   Útest_predict_custom_indexŸ  s    r  c            	   	   C   s4  d} t  | df¡d }t  | ¡}tj|d|dd�}| t jdgd ddd	dd	f ¡}d
}t  d	¡}t  d¡}t|jd	|d�dƒ t|jd	|d�dƒ t|jd	|d�dƒ d}t  |¡}t  |d	f¡}t|j||d�dƒ t|j||d�dƒ tt	|j|d
d� tt	|j|d	dgd� tt	|j|t  |df¡d� d S )Nr   rŒ   r½   rƒ   r„   )rh   rÒ   ri   r   rß   r   r¼   rð   ©rÒ   rü   )
r4   rä   r   rt   ru   rÀ   r   rÜ   r   r  )	r  ry   rÒ   r  r  Zexog_fcast_scalarZexog_fcast_1dimZexog_fcast_2dimÚhr    r    r!   Útest_forecast_exog¨  s&    
"


r"  c                 C   s†   dddddddg}dd	d
ddddddddg}|D ]}t t||ƒt| |ƒƒ q0|D ]}t t|j|ƒt| j|ƒƒ qPt | ¡ |  ¡ ƒ d S )Nrh   ri   rj   r»   r   r   Zk_paramsr  r,   Zk_statesZk_posdefrË   ZdesignrÂ   Ústate_interceptZ
transitionZ	selectionZ	state_cov)r   rÆ   rÃ   Ú_get_init_kwds)r  Úmod2ÚattrsZ	ssm_attrsÚattrr    r    r!   Úcheck_equivalent_modelsÈ  s2         þ         þr(  c               
   C   sð   d} t  | df¡d }t  | ¡}ddg}ddg}dd	g}d
dg}d
dg}d
dg}dd l}	ddddddg}
|	 ||||||¡D ]n}tt|
|ƒƒ}tjd
d��@ t d¡ t	j
|fd|i|—Ž}t	j
|fd|i| ¡ —Ž}W 5 Q R X t||ƒ q|d S )Nr   r>   r½   rƒ   rð   Útr„   r�   r…   FTr   rh   ri   rj   r»   r   r   r   ÚignorerÒ   )r4   rä   Ú	itertoolsÚproductÚdictÚzipr   r   r   r   rt   r$  r(  )r  ry   rÒ   ZordersZtrendsZerror_cov_typesZmeasurement_errorsZenforce_stationaritiesZenforce_invertibilitiesr+  r°   ÚelementrG   r  r%  r    r    r!   Útest_recreate_modelÚ  s2    
 ÿ
ý
$r0  c            	      C   s&  t  d¡ dd¡} t  d¡}ddddddd	d
d	dd	g}tj| dd|d�}| |¡}tj| d d… dd|d d… d�}| |¡}|j| dd … |dd … d�}t|j	|j	ƒ t
|j|jƒ dD ]}tt||ƒt||ƒƒ q¼dD ]}tt||ƒt||ƒƒ qÜt
|jdt  d¡d�|jdt  d¡d�ƒ d S )NéÈ   r   rŒ   çš™™™™™¹?çš™™™™™É?r‹   çš™™™™™¹¿ç        r¼   r½   rƒ   r)  ©rh   ri   rÒ   r  r   ©r  r   Úllf_obsrÓ   ©Úfiltered_stateÚfiltered_state_covÚpredicted_stateÚpredicted_state_covÚ	forecastsÚforecasts_errorÚforecasts_error_covrN   Zforecasts_error_diffuse_covZpredicted_diffuse_state_covÚscaled_smoothed_estimatorÚscaled_smoothed_estimator_covÚsmoothing_errorÚsmoothed_stateÚsmoothed_state_covÚsmoothed_state_autocovÚ smoothed_measurement_disturbanceÚsmoothed_state_disturbanceÚ$smoothed_measurement_disturbance_covÚsmoothed_state_disturbance_covrü   )r4   rÔ   r6   rä   r   rt   ru   Úappendr   Úspecificationr   Úcov_params_defaultrÆ   rÜ   ©	ry   rÒ   r   Úmod1Úres1r%  Úres2Úres3r'  r    r    r!   Útest_append_resultsö  s6    
      ý
"
ÿrS  ri   r„   ÚcÚctrÜ   TFc              	   C   s$  t  d¡ dd¡}g }| dkr&ddg}| dkr:dddd	g}t j|d
ddddddf }tj|d| d�}| |¡}|rz| ¡  | |d d… ¡}| |¡}|r¢| ¡  | 	|dd … ¡}	t
|	j|jdd … ƒ dD ]:}
t||
ƒ}|d k	rô|ddd …f }t
t|	|
ƒ|dd� qÎt
|	 d¡| d¡ƒ d S )Nr1  r   rŒ   rT  r2  r3  rU  r¼   r½   r‹   r4  r5  rƒ   r  r  )r:  r;  r<  r=  r>  r?  r@  rN   rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  .gê-�™—q=r?   rü   )r4   rÔ   r6   rÀ   r   rt   ru   rÜ   ÚcloneÚextendr   r8  rÆ   )ri   rÜ   ry   Ztrend_paramsr   rO  rP  r%  rQ  rR  r'  rÇ   r    r    r!   Útest_extend_results  s>         þ


rX  c            
      C   s  t  d¡ dd¡} t  d¡}ddddddd	d
d	dd	g}tj| dd|d�}| |¡}tj| d d… dd|d d… d�}| |¡}|j| dd … |dd … d�}t|j	|j	dd … ƒ dD ]6}t
||ƒ}	|	d k	rÜ|	ddd …f }	tt
||ƒ|	ƒ q¶t|jdt  d¡d�|jdt  d¡d�ƒ d S )Nr1  r   rŒ   r2  r3  r‹   r4  r5  r¼   r½   rƒ   r)  r6  r  r   r9  .rü   )r4   rÔ   r6   rä   r   rt   ru   rW  r   r8  rÆ   r   rÜ   )
ry   rÒ   r   rO  rP  r%  rQ  rR  r'  rÇ   r    r    r!   Útest_extend_results_exogP  s6    
      ý
"

ÿrY  c            	      C   s6  t  d¡ dd¡} t  d¡}ddddddd	d
d	dd	g}tj| d d… dd|d d… d�}| |¡}tj| dd … dd|dd … d�}| |¡}|j| d d… |d d… d�}t|j	|j	ƒ t
|j|jƒ dD ]}tt||ƒt||ƒƒ qÌdD ]}tt||ƒt||ƒƒ qìt
|jdt  d¡d�|jdt  d¡d�ƒ d S )Nr1  r   rŒ   r2  r3  r‹   r4  r5  r¼   r½   r  rƒ   r)  r6  r   r7  r9  rü   )r4   rÔ   r6   rä   r   rt   ru   Úapplyr   rL  r   rM  rÆ   rÜ   rN  r    r    r!   Útest_apply_resultsw  s6    
      ý"
"
ÿr[  c                  C   s„  t jtjdddgt jdddd�d�} t | ¡ ¡ jd	d … } | jd d …d d
…f }| jd d …d
f }ddddg}ddddg}|d |d |d
 dd|d
 |d	 |d	 |d |d g
}t	j
||ddd�}|j ¡  | |¡}|j}tt|ƒt|jƒƒ tj|jd d …df |ddd�}	|	j ¡  tj|jd d …d	f |ddd�}
|
j ¡  |	 |¡}|
 |¡}t|jd
d … |j|j d
d … ƒ d S )Nr[   r\   r]   r^   r_   r`   ra   rc   r   rŒ   g{®Gáz„¿gffffffö?g333333Ó¿gü©ñÒMb`?gü©ñÒMbp?gš™™™™™é?ç      à¿rŽ   r   r>   rú   r�   )rÒ   rh   rj   )r   r   r   rT  )rÒ   rh   ri   )rm   rn   r	   ro   rp   r4   rq   rr   rˆ   r   rt   rÃ   Zinitialize_diffuseru   r$   r   r%   r&   r   ZSARIMAXr   r8  )rx   ry   rÒ   Z
ma_params1Z
ma_params2Z
vma_paramsZmod_vmaZres_mvaÚspZmod_ma1Zmod_ma2Zres_ma1Zres_ma2r    r    r!   Útest_vma1_exog   sP     þ    ü
ÿ

ÿ
ÿ


ÿr^  c                  C   s  t  d¡} dddddddg}d	d
d
ddddg}tj| ddd�}|}t|j|ƒ tj| ddgd�}ddg| }t|j|ƒ | ddg| ¡ t|d ddgƒ tj| dddgd�}ddddg| }t|j|ƒ | dd
dd
g| ¡ t|d dƒ t|d dƒ | d
dd
dg| ¡ t|d t  dd¡ƒ t|d dt  dd¡ ƒ | ddddg| ¡ t|d dt  dd¡ ƒ t|d ddt  dd¡  ƒ tj| dd
dgd�}ddg| }t|j|ƒ | ddg| ¡ t|d t  dd¡ƒ t|d dt  dd¡ ƒ tj| ddd
dgd�}ddddg| }t|j|ƒ | dd
dd
g| ¡ t|d dƒ t|d dƒ | d
dd
dg| ¡ t|d t  dd¡d ƒ t|d dt  dd¡d  ƒ | ddddg| ¡ t|d dt  dd¡d  ƒ t|d ddt  dd¡d   ƒ d S ) N)r>   rŒ   zL1.y1.y1zL1.y2.y1zL1.y1.y2zL1.y2.y2zsqrt.var.y1zsqrt.cov.y1.y2zsqrt.var.y2r‹   r   gš™™™™™Ù?r¼   r5  rƒ   r„   r  r   zintercept.y1zintercept.y2g333333ó?r\  r#  zdrift.y1zdrift.y2)r#  r   )r#  r   gš™™™™™ñ?rŒ   é   z
trend.2.y1z
trend.2.y2)	r4   r  r   rt   r   r&   Úupdater   rÔ   )ry   Z
base_namesZbase_paramsr  rÇ   r    r    r!   Útest_param_names_trendÌ  sn    
  ÿ ÿÿ ÿÿra  ):rS   rè   r¨   r   Únumpyr4   Znumpy.testingr   r   r   Zpandasrm   rT   Zstatsmodels.tsa.statespacer   r   Zstatsmodels.iolib.summaryr   r
   r	   ré   ÚdirnameÚabspathÚ__file__rë   rê   Zvar_pathZread_csvr‡   Zvarmax_pathrñ   r   rV   r‚   r³   rº   rÊ   rÌ   râ   rå   ræ   rî   rù   r  r  r  r  r"  r(  r0  rS  rU   ZparametrizerX  rY  r[  r^  ra  r    r    r    r!   Ú<module>   sT   s;;n!j4;c4#2	 (0'),