U
    Ãmœdn1  ã                	   @   s¶  d Z ddlZddlZddlmZm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Zd	Zd
Z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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!ej"j#d"d#„ ƒZ$d$d%„ Z%d&d'„ Z&ej'd(ej(ej)ej*ej+ej,ej-ej.gd)�d*d+„ ƒZ/ej'd(d,�d-d.„ ƒZ0d/d0„ Z1d1d2„ Z2ej" 3d3d4¡d5d6„ ƒZ4d7d8„ Z5dS )9z
Test functions for sm.rlm
é    N)Úassert_allcloseÚassert_almost_equal)Ústats)Únorms)ÚRLM)Ú
HuberScaleé   é   é   é   c                  C   s2   ddl m}  | ƒ }t |j¡|_t |j¡|_|S )Nr   )Úload)Zstatsmodels.datasets.stacklossr   ÚnpÚasarrayÚendogÚexog)r   Údata© r   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/robust/tests/test_rlm.pyÚload_stackloss   s
    r   c                   @   st   e Zd ZdZdd„ ZeZdd„ Zdd„ ZeZ	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ ZeZdd„ Zdd„ Zdd„ ZdS )ÚCheckRlmResultsMixinzû
    res2 contains  results from Rmodelwrap or were obtained from a statistical
    packages such as R, Stata, or SAS and written to results.results_rlm

    Covariance matrices were obtained from SAS and are imported from
    results.results_rlm
    c                 C   s   t | jj| jjtƒ d S ©N)r   Úres1ÚparamsÚres2Ú	DECIMAL_4©Úselfr   r   r   Útest_params&   s    z CheckRlmResultsMixin.test_paramsc                 C   s   t | jj| jj| jƒ d S r   )r   r   Úbser   Údecimal_standarderrorsr   r   r   r   Útest_standarderrors+   s    ÿz(CheckRlmResultsMixin.test_standarderrorsc                 C   s2   t | jdƒst d¡ t| j ¡ | j ¡ tƒ d S )NÚconf_intzResults from R)Úhasattrr   ÚpytestÚskipr   r   r!   r   r   r   r   r   Útest_confidenceintervals0   s
    
ÿz-CheckRlmResultsMixin.test_confidenceintervalsc                 C   s   t | jj| jj| jƒ d S r   )r   r   Úscaler   Údecimal_scaler   r   r   r   Ú
test_scale9   s    ÿzCheckRlmResultsMixin.test_scalec                 C   s   t | jj| jjtƒ d S r   )r   r   Úweightsr   r   r   r   r   r   Útest_weights=   s    z!CheckRlmResultsMixin.test_weightsc                 C   s   t | jj| jjtƒ d S r   )r   r   Zresidr   r   r   r   r   r   Útest_residuals@   s    z#CheckRlmResultsMixin.test_residualsc                 C   s0   t | jjj| jjtƒ t | jjj| jjtƒ d S r   )r   r   ÚmodelZdf_modelr   r   Zdf_residr   r   r   r   Útest_degreesC   s    ÿÿz!CheckRlmResultsMixin.test_degreesc                 C   s.   t | jdƒst d¡ t| jj| jjtƒ d S )NÚbcov_unscaledzNo unscaled cov matrix from SAS)r"   r   r#   r$   r   r   r.   r   r   r   r   r   Útest_bcov_unscaledI   s    
 ÿz'CheckRlmResultsMixin.test_bcov_unscaledc                 C   sF   t | jj| jj| jƒ t | jj| jj| jƒ t | jj| jj| jƒ d S r   )r   r   Úbcov_scaledr   Zh1Údecimal_bcov_scaledÚh2Úh3r   r   r   r   Útest_bcov_scaledR   s    ÿÿÿz%CheckRlmResultsMixin.test_bcov_scaledc                 C   s0   t | jdƒst d¡ t| jj| jjdd� d S )NÚtvalueszNo tvalues in benchmarkgú~j¼t“h?)Zrtol)r"   r   r#   r$   r   r   r5   r   r   r   r   Útest_tvaluesZ   s    
z!CheckRlmResultsMixin.test_tvaluesc                 C   s„   | j j}|| j j }tj t |¡¡d }tj d¡| j j }t 	|| || f¡}t
| j j|ƒ t
| j j|ƒ t
| j  ¡ |ƒ d S )Nr
   gš™™™™™™?)r   r   r   r   ÚnormZsfr   ÚabsZisfZcolumn_stackr   r5   Úpvaluesr!   )r   r   r5   r9   Z
half_widthr!   r   r   r   Útest_tpvalues`   s    z"CheckRlmResultsMixin.test_tpvaluesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r%   r'   r(   r*   r+   r-   r/   r1   r4   r6   r:   r   r   r   r   r      s   r   c                   @   s`   e Z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dS )ÚTestRlmc                 C   sˆ   t ƒ | _tj| jjdd�| j_t| _t| _t	| jj
| jjt ¡ d�}|| _| ¡ }|jdd�j}|jdd�j}|| _|| j_|| j_d S )NF©Úprepend©ÚMÚH2©ÚcovÚH3)r   r   ÚsmÚadd_constantr   Ú	DECIMAL_1r   Ú	DECIMAL_3r'   r   r   r   ÚHuberTr,   Úfitr0   r   r2   r3   ©Úclsr,   Úresultsr2   r3   r   r   r   Úsetup_classo   s    zTestRlm.setup_classc                 C   s   ddl m} |ƒ | _d S ©Nr   )ÚHuber©Úresults.results_rlmrS   r   ©r   rS   r   r   r   Úsetup_method€   s    zTestRlm.setup_methodc                 C   s   | j  ¡  d S r   )r   Úsummaryr   r   r   r   Útest_summary„   s    zTestRlm.test_summaryc                 C   s   | j  ¡  d S r   )r   Zsummary2r   r   r   r   Útest_summary2ˆ   s    zTestRlm.test_summary2c                 C   s   t | jjtjƒst‚d S r   )Ú
isinstancer   Zchisqr   ÚndarrayÚAssertionErrorr   r   r   r   Ú
test_chisqŒ   s    zTestRlm.test_chisqc                 C   s    t | j | jj¡tjƒst‚d S r   )r[   r,   Zpredictr   r   r   r\   r]   r   r   r   r   Útest_predict�   s    zTestRlm.test_predictN)r;   r<   r=   ÚclassmethodrQ   rW   r#   ÚmarkÚsmokerY   rZ   r^   r_   r   r   r   r   r?   n   s   



r?   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú
TestHampelc                    sx   t t| ƒ ¡  t| _t| _t| _t| j	j
| j	jt ¡ d�}| ¡ }|jdd�j}|jdd�j}|| _|| j_|| j_d S ©NrB   rD   rE   rG   )Úsuperrc   rQ   Ú	DECIMAL_2r   rK   r'   r1   r   r   r   r   r   ÚHampelrM   r0   r   r2   r3   rN   ©Ú	__class__r   r   rQ   –   s    zTestHampel.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )rg   )rU   rg   r   )r   rg   r   r   r   rW   ¦   s    zTestHampel.setup_method©r;   r<   r=   r`   rQ   rW   Ú__classcell__r   r   rh   r   rc   •   s   rc   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestRlmBisquarec                    sl   t t| ƒ ¡  t| _t| jj| jjt	 
¡ d�}| ¡ }|jdd�j}|jdd�j}|| _|| j_|| j_d S rd   )re   rl   rQ   rJ   r   r   r   r   r   r   ÚTukeyBiweightrM   r0   r   r2   r3   rN   rh   r   r   rQ   ¬   s    zTestRlmBisquare.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )ÚBiSquare)rU   rn   r   )r   rn   r   r   r   rW   º   s    zTestRlmBisquare.setup_methodrj   r   r   rh   r   rl   «   s   rl   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestRlmAndrewsc                    sf   t t| ƒ ¡  t| jj| jjt ¡ d�}| 	¡ }|j	dd�j
}|j	dd�j
}|| _|| j_|| j_d S rd   )re   ro   rQ   r   r   r   r   r   Ú
AndrewWaverM   r0   r   r2   r3   rN   rh   r   r   rQ   À   s    zTestRlmAndrews.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )ÚAndrews)rU   rq   r   )r   rq   r   r   r   rW   Ì   s    zTestRlmAndrews.setup_methodrj   r   r   rh   r   ro   ¿   s   ro   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestRlmHuberc                 C   s„   t ƒ | _tj| jjdd�| j_t| jj| jjt ¡ d�}|j	t
ƒ d�}|j	dt
ƒ d�j}|j	dt
ƒ d�j}|| _|| j_|| j_d S )NFr@   rB   ©Ú	scale_estrD   ©rF   rt   rG   )r   r   rH   rI   r   r   r   r   rL   rM   r   r0   r   r2   r3   rN   r   r   r   rQ   Õ   s    zTestRlmHuber.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )Ú
HuberHuber)rU   rv   r   )r   rv   r   r   r   rW   â   s    zTestRlmHuber.setup_methodN©r;   r<   r=   r`   rQ   rW   r   r   r   r   rr   Ô   s   
rr   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestHampelHuberc                    st   t t| ƒ ¡  t| jj| jjt ¡ d�}|j	t
ƒ d�}|j	dt
ƒ d�j}|j	dt
ƒ d�j}|| _|| j_|| j_d S ©NrB   rs   rD   ru   rG   )re   rx   rQ   r   r   r   r   r   rg   rM   r   r0   r   r2   r3   rN   rh   r   r   rQ   è   s    zTestHampelHuber.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )ÚHampelHuber)rU   rz   r   )r   rz   r   r   r   rW   ô   s    zTestHampelHuber.setup_methodrj   r   r   rh   r   rx   ç   s   rx   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestRlmBisquareHuberc                    st   t t| ƒ ¡  t| jj| jjt ¡ d�}|j	t
ƒ d�}|j	dt
ƒ d�j}|j	dt
ƒ d�j}|| _|| j_|| j_d S ry   )re   r{   rQ   r   r   r   r   r   rm   rM   r   r0   r   r2   r3   rN   rh   r   r   rQ   ú   s    z TestRlmBisquareHuber.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )ÚBisquareHuber)rU   r|   r   )r   r|   r   r   r   rW     s    z!TestRlmBisquareHuber.setup_methodrj   r   r   rh   r   r{   ù   s   r{   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestRlmAndrewsHuberc                    st   t t| ƒ ¡  t| jj| jjt ¡ d�}|j	t
ƒ d�}|j	dt
ƒ d�j}|j	dt
ƒ d�j}|| _|| j_|| j_d S ry   )re   r}   rQ   r   r   r   r   r   rp   rM   r   r0   r   r2   r3   rN   rh   r   r   rQ     s    zTestRlmAndrewsHuber.setup_classc                 C   s   ddl m} |ƒ | _d S )Nr   )ÚAndrewsHuber)rU   r~   r   )r   r~   r   r   r   rW     s    z TestRlmAndrewsHuber.setup_methodrj   r   r   rh   r   r}     s   r}   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestRlmSresidc                 C   s†   t ƒ | _tj| jjdd�| j_t| _t| _t	| jj
| jjt ¡ d�}|jdd�}|jdd�j}|jdd�j}|| _|| j_|| j_d S )	NFr@   rB   Úsresid©ÚconvrD   rE   rG   )r   r   rH   rI   r   rJ   r   rK   r'   r   r   r   rL   rM   r0   r   r2   r3   rN   r   r   r   rQ     s    zTestRlmSresid.setup_classc                 C   s   ddl m} |ƒ | _d S rR   rT   rV   r   r   r   rW   /  s    zTestRlmSresid.setup_methodNrw   r   r   r   r   r     s   
r   c                  C   s@   dd l m  m}  ddddgdddtjgdœ}| jd|d	� d S )
Nr   r   r
   é
   é•   r	   )ZFooZBarz	Foo ~ Bar)r   )Zstatsmodels.formula.apiZformulaÚapir   ÚnanÚrlm)ZsmfÚdr   r   r   Útest_missing4  s    r‰   c                  C   sb   t jj ¡ } t j| jdd�}t| j|t 	¡ d�}| 
¡ }ddddg}|j
|d�}t|j|jƒ d S )	NFr@   rB   ç&~ÖF†ææ?çÀÍEð}¹ô?ç'K10ÀxÃ¿go2ä·õCÀ©Ústart_params)rH   ÚdatasetsÚ	stacklossÚload_pandasrI   r   r   r   r   rL   rM   r   r   )r   r   r,   rP   rŽ   Z	result_svr   r   r   Útest_rlm_start_values=  s    r’   c               	   C   s’   t jj ¡ } t j| jdd�}t| j|t 	¡ d�}dddg}t
 t¡� |j|d� W 5 Q R X t ||g¡j}t
 t¡� |j|d� W 5 Q R X d S )NFr@   rB   rŠ   r‹   rŒ   r�   )rH   r�   r�   r‘   rI   r   r   r   r   rL   r#   ÚraisesÚ
ValueErrorrM   r   ÚarrayÚT)r   r   r,   rŽ   r   r   r   Útest_rlm_start_values_errorsG  s    
r—   Úmodule)Úscoper   c                 C   s   |   ¡ S r   )Úparam)Úrequestr   r   r   r7   T  s    r7   )r™   c                 C   s^   ddl m} tj d¡}| d¡}||d  }t tj||d f ¡}|||dt 	|¡ d�S )Nr   )ÚBunchi$?wJ)iè  r   r
   çš™™™™™	@)r   r   Úconst)
Zstatsmodels.tools.toolsrœ   r   ÚrandomZRandomStateZstandard_normalrH   rI   Zc_Z	ones_like)r›   rœ   Úrsr   r   r   r   r   Úperfect_fit_data\  s    
r¡   c              	   C   sT   t  ¡ �& t  d¡ t| j| j|d� ¡ }W 5 Q R X t|jt	 
dddg¡dd� d S )NÚignorerB   r   r   ç:Œ0âŽyE>©Zatol)ÚwarningsÚcatch_warningsÚsimplefilterr   r   r   rM   r   r   r   r•   ©r¡   r7   Úresr   r   r   Útest_perfect_fitf  s    

 rª   c              	   C   sT   t  ¡ �& t  d¡ t| j| j|d� ¡ }W 5 Q R X t|jt	 
dddg¡dd� d S )Nr¢   rB   r�   r   r£   r¤   )r¥   r¦   r§   r   rž   r   rM   r   r   r   r•   r¨   r   r   r   Útest_perfect_constm  s    

 r«   r‚   )r)   Zcoefsr€   c                 C   sb   t ƒ }tj|jdd�|_t|j|jt ¡ d� ¡ }t|j|jt ¡ d�j| d�}t	|j
|j
ƒ d S )NFr@   rB   r�   )r   rH   rI   r   r   r   r   rL   rM   r   r   )r‚   r   ÚbaseZaltr   r   r   Útest_alt_criteriont  s
    r­   c               	   C   st   t ƒ } t | j¡| _t | j¡| _tj| jdd�| _t| j| jt 	¡ d�}t
jtdd�� |jdd� W 5 Q R X d S )NFr@   rB   zConvergence argument unknown)ÚmatchÚunknownr�   )r   r   r   r   r   rH   rI   r   r   rL   r#   r“   r”   rM   )r   Úmodr   r   r   Útest_bad_criterion}  s    r±   )6r>   r¥   Únumpyr   Znumpy.testingr   r   r#   Zscipyr   Zstatsmodels.apir…   rH   Zstatsmodels.robustr   Z&statsmodels.robust.robust_linear_modelr   Zstatsmodels.robust.scaler   r   rK   rf   rJ   r   r   r?   rc   rl   ro   rr   rx   r{   r}   r   ra   rb   r‰   r’   r—   Zfixturerp   ZLeastSquaresrL   ZTrimmedMeanrm   rg   ZRamsayEr7   r¡   rª   r«   Zparametrizer­   r±   r   r   r   r   Ú<module>   sX   P'

  þÿ


	
