U
    Kvfn1                  	   @   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   E/tmp/pip-unpacked-wheel-2v6byqio/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   Z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   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~jth?)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+   fitr/   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   r/   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   r/   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   r/   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   r/   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   r/   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   r/   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   r/   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   r/   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Foo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}?'K10xÿgo2C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   :0yE>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   Z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'

  


	
