U
    Ãmœd;J  ã                   @   s¶  d 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 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mZmZ ddlmZ ej ej  e!¡¡Z"dej# d Z$e	 %e"ej# e$ ¡Z&dej# d Z'e	 %e"ej# e' ¡Z(e )¡ j*Z+e	j,dddd�e+_-e+d Z.ee+d ƒZ/dd„ Z0dd„ Z1d4dd„Z2dd„ Z3dd„ Z4d d!„ Z5e
j6j7d"d#„ ƒZ8d$d%„ Z9d&d'„ Z:d(d)„ Z;d*d+„ Z<d,d-„ Z=d.d/„ Z>d0d1„ Z?d2d3„ Z@dS )5zW
Tests for recursive least squares models

Author: Chad Fulton
License: Simplified-BSD
é    N)Úassert_allcloseÚassert_equalÚassert_raises)Únorm)Ú	macrodata)ÚGLM)ÚOLS)ÚRecursiveLS)Úrecursive_olsresiduals)Úadd_constant)ÚaicÚbic)ÚValueWarningÚresultszresults_rls_R.csvzresults_rls_stata.csvz
1959-01-01z
2009-07-01ZQS)ÚstartÚendÚfreqÚcpiÚm1c                  C   sv   t tjtjƒ} |  ¡ }tttƒ}| ¡ }t|j|jƒ t ttd jƒ} |  ¡ }tttd ƒ}| ¡ }t|j|jƒ d S )Nr   )	r	   ÚendogÚvaluesÚexogÚfitr   r   ÚparamsÚdta©ÚmodÚresÚmod_olsÚres_ols© r    úg/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/regression/tests/test_recursive_ls.pyÚ
test_endog'   s    
r"   c            
      C   s\  t ttd ƒ} |  ¡ }tttd ƒ}| ¡ }t|j|jƒ t|j|jƒ t|jj	d |j
ƒ | jd d …df tj| ddd d …d d …f |j dd� }t||jƒ |j|j|j
d�}t|j|ƒ t |jddd …f |jj	d d  d	 ¡| j }t tj|jd|d d
�¡ ¡ }t||jƒ |jdt d¡d�}t|| t d¡¡ƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j|jƒ t|j |j ƒ t|j!|j!ƒ t|j"|j"ƒ | #d¡}| #d¡}t|j$|j$ƒ t|j%|j%dd� | &d¡}| &d¡}t|j$|j$ƒ t|j%|j%dd� t'||j(|j)ƒ}t||j'ƒ t*||j(|j)ƒ}	t|	|j*ƒ d S )Nr   ©r   r   r   Údesign©Zaxis©Úscaleé   ç      à?é   ©Úlocr'   é
   )r(   r(   r-   ©r$   )r-   r(   úm1 = 0çVçž¯Ò<©Úatol)+r	   r   r   r   r   r   r   ÚbseÚfilter_resultsÚobs_covr'   ÚnpÚsumÚsmoothed_stateZresidÚloglikeÚllf_recursiveÚstandardized_forecasts_errorÚnobsÚlogr   ÚpdfÚresid_recursiveÚllfÚforecastÚonesÚpredictZessZssrZcentered_tssZuncentered_tssZrsquaredZ	mse_modelZ	mse_residZ	mse_totalÚt_testÚ	statisticÚpvalueÚf_testr   Únobs_effectiveÚdf_modelr   )
r   r   r   r   ÚactualÚdesiredÚscale_alternativeÚllf_alternativeÚ
actual_aicZ
actual_bicr    r    r!   Útest_ols:   s^    &ÿÿþþÿ



rO   c                 C   s:  t j}tt ddg ƒ}t||| d�}| ¡ }t||ƒ}| d krH| ¡ }n|j| d�}t|j|jƒ t|j	|j	dd� t|j
jd |jƒ t|jd |jƒ |jd d …df tj|d	dd d …d d …f |j dd
� }t||jdd� |j|j|jd�}t|j|ƒ t |jddd …f |j
jd d  d ¡|j }	t tj|jd|	d d�¡ ¡ }
t|
|jƒ | d k�ršt d¡}|jd|d�}t|| t d¡¡ƒ nt d¡}t t!|jd|d� | "d¡}| "d¡}t|j#|j#ƒ t|j$|j$dd� | %d¡}| %d¡}t|j#|j#ƒ t|j$|j$ƒ t&|
|j'|jƒ}t||j&ƒ d S )NÚunempr   ©Úconstraintsç�íµ ÷Æ°>r1   r#   r(   r   r$   r%   gH¯¼šò×z>r&   r)   r*   r+   )r(   é   r-   r-   r.   )r-   rT   )r*   rT   r-   r/   r0   )(r   Úinflr   r	   r   r   Úfit_constrainedr   r   r3   r4   r5   r'   r   rI   r   r6   r7   r8   Zresid_responser9   r:   r;   r<   r=   r   r>   r?   r@   rB   rA   rC   r   ÚNotImplementedErrorrD   rE   rF   rG   r   rH   )rR   r   r   r   r   Zmod_glmZres_glmrJ   rK   rL   rM   r$   rN   r    r    r!   Útest_glmˆ   s\    

&ÿÿþþÿ






rX   c                   C   s   t dd� d S )Núm1 + unemp = 1rQ   )rX   r    r    r    r!   Útest_glm_constrainedÜ   s    rZ   c                  C   s6   t ttƒ} |  ¡ }tttƒ}| ¡ }t|j|jƒ d S )N)r	   r   r   Úfilterr   r   r   r   r   r    r    r!   Útest_filterà   s
    

r\   c                  C   sÜ   t ttƒ} |  ¡ }t| jdƒ t|jjd d …dd…f j	t
jd d… ddg dd� t|jjd d …d	d
…f j	t
jdd… ddg ƒ t|jjd d …dd …f j	t
jdd … ddg ƒ tttƒ}| ¡ }t|j|jƒ d S )Nr   r*   r-   é   Zbeta1Zbeta2çñhãˆµøä>©Úrtolé	   é   é   é   é   é   )r	   r   r   r   r   Zstart_paramsr   Zrecursive_coefficientsÚfilteredÚTÚ	results_RÚilocr   r   r   r    r    r!   Útest_estimatesë   s     
 ÿÿÿ
rk   c                 C   sÞ   t tddg ƒ}tt|ƒ}| ¡ }zddlm} |ƒ  W n tk
rL   Y nX | ¡ }|jdgd�}|jdddgd�}| 	¡ }dD ]}|j	|d�}q‚t
t|j	dd� | ¡ }ttj|jƒ}| ¡ }| ¡ }| 	¡ }| ¡ }d S )	Nr   Úpopr   )Úregister_matplotlib_converters)Ú	variables)ç{®Gáz„?çš™™™™™¹?©Úalphaç°rh‘í|¿?)r   r   r	   r   r   Zpandas.plottingrm   ÚImportErrorZplot_recursive_coefficientZ
plot_cusumr   Ú
ValueErrorZplot_cusum_squaresr   )Zclose_figuresr   r   r   rm   Zfigrr   r    r    r!   Ú
test_plots  s*    

rv   c               	   C   sX   t jtdd�� tjdtd�} W 5 Q R X |  ¡ }tjdtd�}| ¡ }t|j	|j	ƒ d S )NzNo frequency information©Úmatchzcpi ~ m1)Údata)
ÚpytestÚwarnsr   r	   Zfrom_formular   r   r   r   r   r   r    r    r!   Útest_from_formula2  s    r|   c                  C   sä   t ttƒ} |  ¡ }t|jdd… jtjd d… d ƒ t|jdd… jtjdd… d ƒ t|jd	d … jtjd
d … d ƒ t|jdd … t	jdd … d ddd� t
ttƒ}| ¡ }t|ƒd dd … }t|jdd … |ƒ d S )Nr*   r-   r]   Z	rec_residra   rb   rc   rd   re   rf   rT   Úrrr^   ©r2   r`   é   )r	   r   r   r   r   r?   rh   ri   rj   Úresults_statar   r
   )r   r   r   r   Zdesired_resid_recursiver    r    r!   Útest_resid_recursive>  s(    
ÿÿÿ  ÿ
r�   c              	   C   sž   ddl m} tj d¡}| ¡ }td|jd ƒD ],}||  dd||d    ||  7  < q0||dd … dd	d
� ¡ }t	j
tdd�� t|ƒ W 5 Q R X d S )Nr   )ÚARIMAéú   r(   rp   gš™™™™™é?rb   )r(   r   r   Úc)ÚorderZtrendz!res a regression results instancerw   )Zstatsmodels.tsa.arima.modelr‚   r6   ÚrandomZstandard_normalÚcopyÚrangeÚshaper   rz   ÚraisesÚ	TypeErrorr
   )Zreset_randomstater‚   ÚeÚyÚir   r    r    r!   Ú%test_recursive_olsresiduals_bad_inputU  s    *r�   c            	      C   sL  t ttƒ} |  ¡ }|j}|jtj|j|d … dd� }||j| 8 }|tj|j|d d … dd� }|dd … }t	|t
jdd … d ddd� tttƒ}| ¡ }t|ƒd dd … }t	|j|dd	� |jd
dt |d |j¡d�}t
jdd … ddg j}t	||dd	� |jd
dt ||j¡d�}t|ƒd }t	||ƒ tt|jdd� d S )Nr(   )ÚddofrT   ÚcusumrS   r^   r~   éþÿÿÿr_   çš™™™™™©?©rr   r�   ÚpointsÚlwÚuwr   éÿÿÿÿrs   rq   )r	   r   r   r   Únobs_diffuser‘   r6   Zstdr?   r   r€   rj   r   r
   Ú_cusum_significance_boundsÚaranger<   rh   r   ru   Ú"_cusum_squares_significance_bounds)	r   r   Údr‘   r   r   Zdesired_cusumÚactual_boundsÚdesired_boundsr    r    r!   Ú
test_cusum`  s:    
 
  ÿ  ÿ
ÿr    c               	   C   s0  t ttdd�} t t¡� |  ¡ }W 5 Q R X t|j|j	ƒ}t
|jdd … tjdd … d ddd� t
|jtjdd … d dd� t
|jtjdd … d dd� |jd	d
t |d |jd ¡d�}tjdd … ddg j}t
||dd� |jd	t |d |jd ¡d�}tjdd … ddg j}t
||dd� d S )NrT   )Úloglikelihood_burnr}   r^   r~   r‘   r1   Zcusum2r“   r   r(   r”   r–   r—   )rr   r•   ZlwwZuwwro   )r	   r   r   rz   r{   ÚUserWarningr   Úmaxr™   r¡   r   r?   r€   rj   r‘   Zcusum_squaresrš   r6   r›   r<   rh   rœ   )r   r   r�   rž   rŸ   r    r    r!   Ú
test_stata�  s2     ÿÿ  ÿ ÿr¤   c                  C   sê   t d } tt ddg ƒ}t| |dd�}| ¡ }dddg}t|j|ƒ d	d
d
g}t|jd |d dd� t|jdd … |dd … dd� d}t |j	ddd …f |j
jd d  d ¡|j }t tj|jd|d d�¡ ¡ }t||ƒ d S )NrU   r   rP   rY   rQ   çÒ†Ù²Igæ¿ç¤»÷F^¿ç/Âý�‘ð?çõúñ ¿Þ?çUOÂ¢$˜A?r   rp   r1   r(   ç-Cëâ6?ç~I/o³€Àr#   r)   r*   r+   ©r   r   r	   r   r   r   r3   r6   r7   r;   r4   r5   r<   r=   r   r>   r?   )r   r   r   r   rK   rL   rM   r    r    r!   Útest_constraints_stata©  s,    

 ÿþþÿr­   c                  C   sü   t d } tt dddg ƒ}ddg}t| ||d�}| ¡ }dd	d
dg}t|j|dd� ddddg}t|jd |d dd� t|jdd… |dd… dd� d}t |j	ddd …f |j
jd d  d ¡|j }t tj|jd|d d�¡ ¡ }t||ƒ d S )NrU   r   rP   r   rY   zcpi = 0rQ   r¥   r¦   r§   r   g»½×Ùß|Û=r1   r¨   r©   rp   r(   r˜   rª   r«   r#   r)   r*   r+   r¬   )r   r   rR   r   r   rK   rL   rM   r    r    r!   Útest_multiple_constraintsÆ  s2    þ ÿþþÿr®   c               
   C   s‚   t ddddgddddgƒ} tjtdd��( |  ddi¡� |  ¡  W 5 Q R X W 5 Q R X tjtdd�� |  ddi¡ W 5 Q R X d S )Nr   r(   z2Linear constraints on coefficients should be givenrw   Úconstrp   )r	   rz   rŠ   ru   Z
fix_paramsr   rV   )r   r    r    r!   Útest_fix_paramsè  s    r°   )N)AÚ__doc__ÚosÚnumpyr6   Znumpy.testingr   r   r   ZpandasÚpdrz   Zscipy.statsr   Zstatsmodels.datasetsr   Zstatsmodels.genmod.apir   Z#statsmodels.regression.linear_modelr   Z#statsmodels.regression.recursive_lsr	   Zstatsmodels.stats.diagnosticr
   Zstatsmodels.toolsr   Zstatsmodels.tools.eval_measuresr   r   Zstatsmodels.tools.sm_exceptionsr   ÚpathÚdirnameÚabspathÚ__file__Úcurrent_pathÚsepZresults_R_pathZread_csvri   Zresults_stata_pathr€   Zload_pandasry   r   Z
date_rangeÚindexr   r   r"   rO   rX   rZ   r\   rk   ÚmarkZ
matplotlibrv   r|   r�   r�   r    r¤   r­   r®   r°   r    r    r    r!   Ú<module>   sN   
N
T
./"