U
    KvfgJ                     @   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    R/tmp/pip-unpacked-wheel-2v6byqio/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rt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%   gHz>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beta2h㈵>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}qt
t|j	dd | }ttj|j}| }| }|	 }| }d S )	Nr   popr   )register_matplotlib_converters)	variables){Gz?皙?alpharh|?)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}t|d |d dd t|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/or#   r)   r*   r+   r   r   r	   r   r   r   r6   Zasarrayr3   r7   r;   r4   r5   r<   r=   r   r>   r?   )r   r   r   r   rK   r3   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}t|d |d dd t|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   r3   rL   rM   r    r    r!   test_multiple_constraints  s4    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__osZ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
./#