U
    Kvf§1  ã                   @   sR  d dl Zd dlmZmZmZ d dlmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ zd dlmZ W n ek
rœ   Y nX dZer¼d dlm Z  e dƒZ!ndZ!dd	„ Z"G d
d„ dƒZ#G dd„ de#ƒZ$G dd„ de$ƒZ%G dd„ dƒZ&G dd„ de&ƒZ'G dd„ dƒZ(G dd„ dƒZ)G dd„ dƒZ*e	j+j,dd„ ƒZ-dS )é    N)Úassert_array_lessÚassert_equalÚassert_raises)Ú	DataFrameÚSeries)Úabline_plotÚ
add_lowessÚinfluence_plotÚplot_added_variableÚ	plot_ccprÚplot_ccpr_gridÚplot_ceres_residualsÚplot_fitÚplot_leverage_resid2Úplot_partial_residualsÚplot_partregress_gridÚplot_regress_exogF)ÚPdfPagesztest_regressionplots.pdfc                 C   s   t r|  |¡ d S )N)Ú
pdf_outputZsavefig)ÚpdfÚfig© r   úS/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/graphics/tests/test_regressionplots.pyÚclose_or_save$   s    r   c                   @   sX   e Zd Ze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 )ÚTestPlotc           
      C   sÆ   d}d}t  dd|¡}ddt j |¡  }t j||t  d| ¡|d d t  |¡f }dddd	d
g}t  ||¡}||t jj|d  }t	j
t j||f dd}	t	 ||	¡ ¡ | _t	 ||¡ ¡ | _d S )Néd   ç      à?r   é   é   é   é   é   ç{®Gáz¤¿ç      @©ÚsizeF©Úprepend)ÚnpÚlinspaceÚrandomÚrandnÚc_ÚsinÚonesÚdotÚnormalÚsmÚadd_constantÚOLSÚfitÚresÚres_true)
ÚclsÚnsampleÚsigÚx1Úx2ÚxÚbetaÚy_trueÚyÚexog0r   r   r   Úsetup_class+   s    ,zTestPlot.setup_classc           	      C   s°   | j }t|dd d}|jjd d …df }|j}|jj}|jd  ¡ d  ¡ \}}t	j
 ||¡ t	j
 ||¡ |jd  ¡ d  ¡ \}}t	j
 ||¡ t	j
 ||¡ tt|ƒ d S )Nr   ©r>   r!   )r5   r   ÚmodelÚexogZfittedvaluesÚendogÚaxesÚ	get_linesÚget_datar(   Ztestingr   r   r   )	ÚselfÚclose_figuresr5   r   Zx0Zyfr?   Zpx1Zpx2r   r   r   Útest_plot_fit:   s    zTestPlot.test_plot_fitc                 C   sŠ   | j }t|dd d t|ddgd t| jdd t|dd t|dd t|dgd t|ddgd}|jD ]}t|ƒ qnt	t
|ƒ d S )Nr   rB   r!   )Zexog_idx)r    r   )Zgrid)r5   r   r   r6   r   r   r   rF   r   r   r   )rI   rJ   r5   r   Úaxr   r   r   Útest_plot_othN   s    

zTestPlot.test_plot_othc                 C   s*  | j  ¡ }t| j ƒ}tt|tjƒdƒ zD|jd  ¡ d j	}t
 |jd ¡}t
 ||¡ ¡ j}t|dƒ W n& tk
r   dd l}| d¡ Y nX t| j dd}tt|tjƒdƒ zJ|jd  ¡ d j	}t
 t |jd ¡¡}t
 ||¡ ¡ j}t|dƒ W n tk
r   Y nX ttt| j dd d S )NTr   gê-™—q=z+test not compatible with matplotlib versionZDFFITS)Z	criterionÚunknown)r5   Zget_influencer	   r   Ú
isinstanceÚpltÚFigurerF   Zget_childrenZ_sizesr1   r2   Zcooks_distancer3   r4   Ússrr   ÚAttributeErrorÚwarningsÚwarnr(   ÚabsZdffitsr   Ú
ValueError)rI   rJ   Zinflr   ZsizesÚexrR   rT   r   r   r   Útest_plot_influence_   s*    

zTestPlot.test_plot_influencec                 C   s    t | jƒ}tt|tjƒdƒ d S )NT)r   r5   r   rO   rP   rQ   )rI   rJ   r   r   r   r   Útest_plot_leverage_resid2z   s    
z"TestPlot.test_plot_leverage_resid2N)Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrA   ÚpytestÚmarkÚ
matplotlibrK   rM   rY   rZ   r   r   r   r   r   )   s   



r   c                   @   s   e Zd Zdd„ ZdS )ÚTestPlotPandasc                 C   sö   d}d}t  dd|¡}ddt j |¡  }t j||t  d| ¡|d d t  |¡f }dddd	d
g}t  ||¡}||t jj|d  }t	j
t j||f dd}	t|	dddgd}	t|dd}t	 ||	¡ ¡ }
|
| _t|	dddgd}||d< || _d S )Nr   r   r   r   r   r   r    r!   r"   r#   r$   Fr&   ÚconstÚvar1Zvar2©ÚcolumnsÚoutcome©Únamer?   )r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r   r   r3   r4   r5   Údata)rI   r8   r9   r:   r;   ÚXr=   r>   r?   r@   r5   rj   r   r   r   Úsetup_method   s     ,zTestPlotPandas.setup_methodN)r[   r\   r]   rl   r   r   r   r   rb   €   s   rb   c                   @   s   e Zd Zejjdd„ ƒZdS )ÚTestPlotFormulac                 C   sH   ddl m} |d| jd ¡ }t|dƒ |d| jd ¡ }t|dƒ d S )Nr   )Úolszy~var1-1)rj   rd   zy~var1)Zstatsmodels.formula.apirn   rj   r4   r   )rI   rJ   rn   r5   r   r   r   Útest_one_column_exog•   s
    
z$TestPlotFormula.test_one_column_exogN)r[   r\   r]   r_   r`   ra   ro   r   r   r   r   rm   “   s   rm   c                   @   sh   e Zd Ze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 )Ú
TestABLinec                 C   sl   t j d¡ t t jjdddd¡}t  |ddg¡t jjdddd }t ||¡ ¡ }|| _	|| _
|| _d S )Né90  r   r   é   r$   é   ç      @)r(   r*   Úseedr1   r2   r0   r/   r3   r4   rk   r?   Úmod©r7   rk   r?   rv   r   r   r   rA       s    "zTestABLine.setup_classc                 C   s@   t | jd}|jd }| | jd d …df | j¡ tt|ƒ d S )N)Úmodel_resultsr   r!   )r   rv   rF   Úscatterrk   r?   r   r   ©rI   rJ   r   rL   r   r   r   Útest_abline_modelª   s    
zTestABLine.test_abline_modelc                 C   sJ   t  ¡ }| d¡}| | jd d …df | j¡ t| j|d}tt	|ƒ d S )Néo   r!   )rx   rL   )
rP   ÚfigureÚadd_subplotry   rk   r?   r   rv   r   r   rz   r   r   r   Útest_abline_model_ax±   s
    
zTestABLine.test_abline_model_axc                 C   s*   | j }|j\}}t||d}tt|ƒ d S )N)Ú	interceptÚslope)rv   Úparamsr   r   r   )rI   rJ   rv   r€   r   r   r   r   r   Útest_abline_ab¹   s    
zTestABLine.test_abline_abc                 C   sZ   | j }|j\}}t ¡ }| d¡}| | jd d …df | j¡ t|||d}t	t
|ƒ d S )Nr|   r!   ©r€   r   rL   )rv   r‚   rP   r}   r~   ry   rk   r?   r   r   r   )rI   rJ   rv   r€   r   r   rL   r   r   r   Útest_abline_ab_axÀ   s    

zTestABLine.test_abline_ab_axc                 C   s‚   | j }|j\}}t ¡ }| d¡}| | jd d …df | j¡ t|||d t|d| |d | 	¡ }| 
d¡ ¡  tt|ƒ d S )Nr|   r!   r„   r    r   )rv   r‚   rP   r}   r~   ry   rk   r?   r   rG   ÚpopÚremover   r   )rI   rJ   rv   r€   r   r   rL   Úlinesr   r   r   Útest_abline_removeÊ   s    

zTestABLine.test_abline_removeN)r[   r\   r]   r^   rA   r_   r`   ra   r{   r   rƒ   r…   r‰   r   r   r   r   rp   ž   s   
	



	rp   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestABLinePandasc                 C   sˆ   t j d¡ t t jjdddd¡}t  |ddg¡t jjdddd }|| _|| _t	|dd	gd
}t
|dd}t ||¡ ¡ }|| _d S )Nrq   r   r   rr   r$   rs   rt   rc   ZsomeXre   rg   rh   )r(   r*   ru   r1   r2   r0   r/   rk   r?   r   r   r3   r4   rv   rw   r   r   r   rA   Ù   s    "zTestABLinePandas.setup_classN)r[   r\   r]   r^   rA   r   r   r   r   rŠ   Ø   s   rŠ   c                   @   s,   e Zd Zejjdd„ ƒZejjdd„ ƒZdS )ÚTestAddedVariablePlotc                 C   s¬   t j d¡ d}d}t jj||fd}d|d d …df  d|d d …df d	   }|t jj|d }t ||¡}| ¡ }t|dƒ}	|	 ¡ d }
|
 	d
¡ t
t|	ƒ |ƒ  d S )Név  r   r   r$   é   r   çš™™™™™É?r!   r    zAdded variable plot (OLS))r(   r*   ru   r0   r1   r3   r4   r
   Úget_axesÚ	set_titler   r   )rI   rJ   ÚnÚprD   Úlin_predrE   rC   Úresultsr   rL   r   r   r   Útest_added_variable_olsè   s    ,


z-TestAddedVariablePlot.test_added_variable_olsc              
   C   sj  t j d¡ d}d}t jj||fd}d|d d …df  d|d d …df d	   }t  |¡}t j |¡}tj||tj 	¡ d
}| 
¡ }	dD ]Ú}
dD ]Ð}dD ]Æ}ddg| }dD ]°}|dkrÐt|	|
||d}d}n|	j|
||d}d}| ¡ d }t|ƒ | ddddg¡ dddg|
 }|d7 }||d 7 }||d 7 }|d| 7 }| |¡ tt|ƒ |ƒ  q®qšq’qŠd S )NrŒ   r   r   r$   r   r   rŽ   r!   r    ©Úfamily)r   r!   r    )FT)Zresid_devianceZresid_responseZ
UnweightedZWeighted©r   r!   )Úuse_glm_weightsÚ
resid_typezAdded variable plotz&Added variable plot (called as method)çš™™™™™¹?çš™™™™™é?gffffffæ?úLinear effect, slope=1úQuadratic effectz	No effectú
Poisson regression
Ú
zUsing '%s' residuals)r(   r*   ru   r0   ÚexpÚpoissonr1   ÚGLMÚfamiliesÚPoissonr4   r
   r   r   Úset_positionr   r   r   )rI   rJ   r‘   r’   rD   r“   ÚexpvalrE   rC   r”   Ú	focus_colr™   rš   Z
weight_strÚjr   ÚtirL   Ú
effect_strr   r   r   Útest_added_variable_poissonù   sR    ,
þþ ÿÿ

z1TestAddedVariablePlot.test_added_variable_poissonN)r[   r\   r]   r_   r`   ra   r•   r¬   r   r   r   r   r‹   æ   s   
r‹   c                   @   s   e Zd Zejjdd„ ƒZdS )ÚTestPartialResidualPlotc                 C   s2  t j d¡ d}d}t jj||fd}d|d d …df< d|d d …df  d|d d …d	f d	   }t  |¡}t j |¡}tj||tj 	¡ d
}| 
¡ }	dD ]’}
dD ]ˆ}|dkrºt|	|
ƒ}n
|	 |
¡}| ¡ d }t|ƒ | ddddg¡ dddg|
 }d}|dkr|d7 }| |d | ¡ tt|ƒ q¢qšd S )NrŒ   r   r   r$   r!   r   r   rŽ   r    r–   ©r!   r    r˜   r›   rœ   ç¤p=
×£è?Ú	Interceptr   rž   zPartial residual plotú (called as method)rŸ   )r(   r*   ru   r0   r¡   r¢   r1   r£   r¤   r¥   r4   r   r   r   r¦   r   r   r   ©rI   rJ   r‘   r’   rD   r“   r§   rE   rC   r”   r¨   r©   r   rL   r«   rª   r   r   r   Útest_partial_residual_poisson+  s<    ,

ÿÿ

ÿz5TestPartialResidualPlot.test_partial_residual_poissonN)r[   r\   r]   r_   r`   ra   r³   r   r   r   r   r­   )  s   r­   c                   @   s   e Zd Zejjdd„ ƒZdS )ÚTestCERESPlotc                 C   s2  t j d¡ d}d}t jj||fd}d|d d …df< d|d d …df  d|d d …d	f d	   }t  |¡}t j |¡}tj||tj 	¡ d
}| 
¡ }	dD ]’}
dD ]ˆ}|dkrºt|	|
ƒ}n
|	 |
¡}| ¡ d }t|ƒ | ddddg¡ dddg|
 }d}|dkr|d7 }| |d | ¡ tt|ƒ q¢qšd S )NrŒ   r   r   r$   r!   r   r   rŽ   r    r–   r®   r˜   r›   rœ   r¯   r°   r   rž   z
CERES plotr±   rŸ   )r(   r*   ru   r0   r¡   r¢   r1   r£   r¤   r¥   r4   r   r   r   r¦   r   r   r   r²   r   r   r   Útest_ceres_poissonO  s<    ,

ÿÿ

ÿz TestCERESPlot.test_ceres_poissonN)r[   r\   r]   r_   r`   ra   rµ   r   r   r   r   r´   M  s   r´   c                  C   st   t jdd„ ƒ} ttt jjddt jjddt jjdddƒ}tjjdddgd	|d
d tjjdddgd	|d d S )Nc                 S   s   | dkrt  | ¡S dS )Nr   )r(   Úlog10)r<   r   r   r   Úlgv  s    z(test_partregress_formula_env.<locals>.lgé
   r$   )ÚaÚbÚcr¹   zlg(b)r»   Fr!   )Ú
obs_labelsrj   Zeval_env)r¼   rj   )r(   Z	vectorizer   Údictr*   r1   ZgraphicsZplot_partregress)r·   Zdfr   r   r   Útest_partregress_formula_envr  s0    
ýÿ     ÿ    ÿr¾   ).Znumpyr(   Znumpy.testingr   r   r   Zpandasr   r   r_   Zstatsmodels.apiÚapir1   Z$statsmodels.graphics.regressionplotsr   r   r	   r
   r   r   r   r   r   r   r   r   Zmatplotlib.pyplotZpyplotrP   ÚImportErrorr   Zmatplotlib.backends.backend_pdfr   r   r   r   rb   rm   rp   rŠ   r‹   r­   r´   r`   ra   r¾   r   r   r   r   Ú<module>   s2   8
W:C$%