U
    Kvf2  ã                   @   st   d dl mZ d dlZd dlZd dlZd dlmZ	 dZ
zd dlmZ W n ek
rX   Y nX dd„ ZG dd„ dƒZdS )é    )Úpredict_functionalNFc                    s   ‡ fdd„S )Nc                    s   t  | dˆ  ¡S )Néd   )ÚnpZ
percentile)Úx©Úq© úU/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/sandbox/tests/test_predict_functional.pyÚ<lambda>   ó    zpctl.<locals>.<lambda>r   r   r   r   r	   Úpctl   s    r   c                   @   sŒ   e Zd Zedd„ ƒZedd„ ƒZdd„ Zejj	dd„ ƒZ
ejj	d	d
„ ƒZejj	dd„ ƒZejj	dd„ ƒZejj	dd„ ƒZejj	dd„ ƒZdS )ÚTestPredFuncc                 C   s   t rddlm} |dƒ| _d S )Nr   )ÚPdfPageszpredict_functional.pdf)Ú
pdf_outputZmatplotlib.backends.backend_pdfr   Úpdf)Úclsr   r   r   r	   Úsetup_class   s    zTestPredFunc.setup_classc                 C   s   t r| j ¡  d S ©N)r   r   Úclose)r   r   r   r	   Úteardown_class   s    zTestPredFunc.teardown_classc                 C   s   t r| j |¡ d S r   )r   r   Zsavefig)ÚselfÚfigr   r   r	   Úclose_or_save    s    zTestPredFunc.close_or_savec              	   C   s¤  t j d¡ d}t jj|d}t jj|d}t jj|d}t jjdd|d}t  dd„ |D ƒ¡}t jj|d}d|d	  |d
k d|d
k |d	   | t jj|d }t ||||||dœ¡}	d}
tj	j
|
|	d}| ¡ }t jtdƒt jdœ}dd
i}t|d||ƒ\}}}ddi}t|d||ƒ\}}}t ¡  t ¡ }t ddddg¡}tj||ddd tj||ddd | ¡ \}}tj||dd tjddd tjddd t d¡ |  |¡ t ¡  t ¡ }t ddddg¡}tj||ddd tj||d d …df |d d …d f d!d" tj||ddd tj||d d …df |d d …d f d!d" | ¡ \}}tj||dd tjddd tjddd t d¡ |  |¡ d S )#Né  éô  ©Úsizer   é   c                 S   s   g | ]}d | ‘qS )ZABCDEr   ©Ú.0Úir   r   r	   Ú
<listcomp>-   s     z-TestPredFunc.test_formula.<locals>.<listcomp>g333333Ó?é   ÚBçš™™™™™¹?)ÚyÚx1Úx2Úx3Úx4Úx5zOy ~ x1 + bs(x2, df=4) + x3 + x2*x3 + I(x1**2) + C(x4) + C(x4)*bs(x2, df=4) + x5©Údataç      è?)r&   r(   r*   r)   r'   ÚCçffffffæ?çš™™™™™é?ú-zx4=B©Úlabelzx4=Cúcenter right©ÚlocúFocus variableé   úFitted meanúLinear model predictioné   Úgrey©Úcolor)r   ÚrandomÚseedÚnormalÚrandintÚasarrayÚpdÚ	DataFrameÚsmÚOLSÚfrom_formulaÚfitÚmeanr   r   ÚpltÚclfÚfigureÚaxesÚplotÚget_legend_handles_labelsÚ	figlegendÚxlabelÚylabelÚtitler   Úfill_between)r   Úclose_figuresÚnr&   r'   r(   r)   r*   r%   ÚdfÚfmlÚmodelÚresultÚ	summariesÚvaluesÚpr1Úci1Úfvals1Úpr2Úci2Úfvals2r   ÚaxÚhaÚlbr   r   r	   Útest_formula$   sT    :

**
zTestPredFunc.test_formulac                 C   sš  t j d¡ d}t jj|d}t jj|d}t jj|d}|d|  | ||  ||  t jj|d }t ||||dœ¡}d}tjj||d}	|	 	¡ }
ddd	œ}d
d
d	œ}t
|
d||dd\}}}t ¡  t ¡ }t ddddg¡}tj||ddddd tj|d| ddddd tj||d d …d
f |d d …df dd | ¡ \}}tj||dd}| d¡ tjddd tjddd t d ¡ |  |¡ d S )!Nr   éÈ   r   r"   ©r%   r&   r'   r(   z y ~ x1 + x2 + x3 + x1*x2 + x2*x3r+   r;   ©r'   r(   r   r&   Zscheffe©r]   Úvalues2Ú	ci_methodr$   çq=
×£på?r0   r1   ÚEstimateÚorangeé   ©r3   r>   ÚlwÚTruthÚlimer<   r=   r4   r5   Fr7   r8   zMean contrastzLinear model contrast)r   r?   r@   rA   rD   rE   rF   rG   rH   rI   r   rK   rL   rM   rN   rO   rU   rP   rQ   Ú
draw_framerR   rS   rT   r   )r   rV   rW   r&   r'   r(   r%   rX   rY   rZ   r[   r]   rl   ÚprÚcbÚfvalsr   rd   re   rf   Úlegr   r   r	   Útest_lm_contrastY   s:    .

 ÿ*

zTestPredFunc.test_lm_contrastc                 C   sº  t j d¡ d}t jj|d}t jj|d}t jj|d}dd|  d|  d|  d| |  }t jjt  |¡t|ƒd}t ||||dœ¡}d}	t	j
j|	|t	j ¡ d}
|
 ¡ }d	d	d
œ}ddd
œ}t|d||dd\}}}t ¡  t ¡ }t ddddg¡}tj||ddddd tj|dd|  ddddd tj||d d …df |d d …d	f dd | ¡ \}}tj||dd}| d¡ tjddd tjd dd t d!¡ |  |¡ d S )"Nr   é2   r   r   r$   ri   zy ~ x1 + x2 + x3 + x1*x2)r,   Úfamilyr;   rj   r   r&   Úsimultaneousrk   rn   r0   r1   ro   rp   rq   rr   gš™™™™™É?rt   ru   r<   r=   r4   r5   Fr7   r8   zLinear predictor contrastzPoisson regression contrast)r   r?   r@   rA   ÚpoissonÚexpÚlenrD   rE   rF   ÚGLMrH   ÚfamiliesÚPoissonrI   r   rK   rL   rM   rN   rO   rU   rP   rQ   rv   rR   rS   rT   r   )r   rV   rW   r&   r'   r(   Úmnr%   rX   rY   rZ   r[   r]   rl   rw   rx   ry   r   rd   re   rf   rz   r   r   r	   Útest_glm_formula_contrast|   s<    (

 ÿ*

z&TestPredFunc.test_glm_formula_contrastc              
   C   s„  t j d¡ d}t jj|dfd}d|d d …df< dD ]F}|dkrnt jjd	|d}tj ¡ }d	}t  d	¡}nZ|d
kr dt jj	|ddk  }tj 
¡ }d}d}n(|dkrÈt jj|d}tj ¡ }d}d}tj|||d}	|	 ¡ }
dD ]–}|rò|n|}dddœ}dt ji}t|
d|||d\}}}t|
d||d|d\}}}t ¡  t ¡ }t ddddg¡}tj||dddd tj||t  t|ƒ¡ dddd tj||d d …df ddd tj||d d …df dd  tj||d d …df d!d"d tj||d d …df d!d  | ¡ \}}tj||d#d$}| d%¡ tjd&d'd |rRtjd(d'd ntjd)d'd t d*| ¡  ¡ |  |¡ qäq6d S )+NiÙ  r   rq   r   r;   r   )r   ÚbinomialÚgaussianr   é   r‡   ç      à?rˆ   )r}   ©FT)Úconstr'   r(   r&   )r]   r\   Úlinearr~   )r]   r\   rm   r   r$   gÂõ(\â?r0   r1   Zblackro   )r>   r3   Zpurplert   ZbluezPointwise CBr=   ZgreenzSimultaneous CBr4   r5   Fr7   r8   zLinear predictorr9   z%s family prediction)r   r?   r@   rA   r   rF   rƒ   r„   ÚlogÚuniformÚBinomialZGaussianr‚   rI   rJ   r   rK   rL   rM   rN   rO   Zonesr   rP   rQ   rv   rR   rS   rT   Ú
capitalizer   )r   rV   rW   r   Zfam_namer%   ZfamZ	true_meanZtrue_lprZ   r[   r   Útruer]   r\   Zpred1Zcb1r`   Zpred2Zcb2rc   r   rd   re   rf   rz   r   r   r	   Útest_scb    sr    






  ÿ  þÿ
zTestPredFunc.test_scbc                 C   sD  t j d¡ d}t jj|d}t jj|d}t jjdd|d}t  dd„ |D ƒ¡}dd	|d
   |dk }ddt  | ¡  }dt jj|d|k  }t 	||||dœ¡}	d}
t
jj|
t
j ¡ |	d}| ¡ }dt ji}dD ]b}ddi}t|d|||d\}}}ddi}t|d|||d\}}}dd	|d
   d }dd	|d
   }|srddt  | ¡  }ddt  | ¡  }t ¡  t ¡ }t ddddg¡}tj||ddd tj||ddd tj||ddd tj||ddd | ¡ \}}tj||dd  tjd!d"d |rtjd#d"d ntjd$d"d t d%¡ |  |¡ t ¡  t ¡ }t ddddg¡}tj||ddd&d' tj||d d …df |d d …df d(d) tj||ddd*d' tj||d d …df |d d …df d(d) | ¡ \}}tj||dd  tjd!d"d |rtjd#d"d ntjd$d"d t d%¡ |  |¡ qÚd S )+Nr   r   r   r   é   c                 S   s   g | ]}d | ‘qS )ÚABCr   r   r   r   r	   r!   è   s     z1TestPredFunc.test_glm_formula.<locals>.<listcomp>éÿÿÿÿrŠ   r"   r#   r;   ri   zy ~ x1 + I(x1**2) + x2 + C(x3))r}   r,   r'   r‹   r(   r&   )r   r.   r$   r/   r0   r1   zx3=Br2   zx3=Czx3=B (exact)zx3=C (exact)r4   r5   r7   r8   zFitted linear predictorzFitted probabilityzBinomial GLM predictionrp   )r3   r>   r<   r=   ru   )r   r?   r@   rA   rB   rC   r€   r   rD   rE   rF   r‚   rH   rƒ   r   rI   rJ   r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r   rU   )r   rV   rW   r&   r'   r(   Zlin_predZprobr%   rX   rY   rZ   r[   r\   r   r]   r^   r_   r`   ra   rb   rc   Zexact1Zexact2r   rd   re   rf   r   r   r	   Útest_glm_formulaà   sl    



**
zTestPredFunc.test_glm_formulac              	   C   sX  t j d¡ d}t jj|d}t jj|d}t jj|d}|| t jj|d }t  |||f¡j}t ||¡}| ¡ }	dt	dƒi}
ddi}t
|	d|
|ƒ\}}}dd	i}t
|	d|
|ƒ\}}}t ¡  t ¡ }t d
d
ddg¡}tj||dddddd tj||dddddd | ¡ \}}tj||dd}| d¡ tjddd tjddd t d¡ |  |¡ t ¡  t ¡ }t d
d
ddg¡}tj||dddddd tj||d d …df |d d …df dd tj||dddddd tj||d d …df |d d …df dd | ¡ \}}tj||dd tjddd tjddd t d¡ |  |¡ d S )Ni"  rh   r   r(   r-   r'   r;   r&   r–   r$   r/   r0   r1   zx2=1rq   g333333ã?rp   )r3   rs   Úalphar>   zx2=-1ru   r4   r5   Fr7   r8   r9   r:   r   r<   r=   )r   r?   r@   rA   ZvstackÚTrF   rG   rI   r   r   rK   rL   rM   rN   rO   rP   rQ   rv   rR   rS   rT   r   rU   )r   rV   rW   r&   r'   r(   r%   ZexogrZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r   rd   re   rf   rz   r   r   r	   Útest_noformula_prediction%  sN    


**
z&TestPredFunc.test_noformula_predictionN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   ÚpytestÚmarkZ
matplotlibrg   r{   r†   r“   r—   rš   r   r   r   r	   r      s"   


4
"
#
?
Dr   )Z&statsmodels.sandbox.predict_functionalr   Znumpyr   ZpandasrD   rŸ   Zstatsmodels.apiÚapirF   r   Zmatplotlib.pyplotZpyplotrK   ÚImportErrorr   r   r   r   r   r	   Ú<module>   s   