U
    Kvfi                     @   sj  d Z ddlZddlZddlZddlZddlm  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  mZ ddlmZ dd	lmZmZmZ ddlm   m!Z" d
dl#m$Z% ej&'ej&(e)Z*ej&+e*ddZ,ej-e,ddZ.e./ Z0e0d Z1e0d2  Z3ee3ddZ4e5e0d e6Z7e5e0d Z8G dd dZ9G dd de9Z:G dd de9Z;G dd de9Z<G dd de9Z=G dd  d e9Z>G d!d" d"e9Z?G d#d$ d$e9Z@G d%d& d&e9ZAG d'd( d(e9ZBG d)d* d*e9ZCG d+d, d,e9ZDG d-d. d.e9ZEG d/d0 d0e9ZFG d1d2 d2e9ZGG d3d4 d4e9ZHG d5d6 d6e9ZIG d7d8 d8e9ZJG d9d: d:e9ZKG d;d< d<ZLG d=d> d>eLZMG d?d@ d@eLZNG dAdB dBeLZOG dCdD dDeLZPG dEdF dFeLZQG dGdH dHeLZRG dIdJ dJeLZSG dKdL dLeLZTG dMdN dNeLZUG dOdP dPeLZVG dQdR dReLZWG dSdT dTeWZXG dUdV dVeLZYG dWdX dXeLZZG dYdZ dZeLZ[dS )[z>

Created on Mon Dec 09 21:29:20 2013

Author: Josef Perktold
    N)GLM)families)links)OLSget_robustcov_results)add_constant)assert_allcloseassert_equalassert_   )results_count_robust_clusterresultsz	ships.csvF)Z	index_colZaccidentzyr_con op_75_79)prependZshipZservicec                   @   sF   e Zd Zdd Zedd ZedddZdd	 Zd
d Zdd Z	dS )CheckCountRobustMixinc                 C   s   | j }| j}t|jt|jd krVtt|jtj}d|d< |j| }|j| }n|j}|j}t|j	j|d t| j
| j |d d S )Nr   F-C6?giUMu?)res1res2lenparamsnponesZbool_bser	   _resultsbse_rob	corr_fact)selfr   r   maskZres2_paramsZres2_bse r   P/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/discrete/tests/test_sandwich_cov.py
test_basic2   s    
z CheckCountRobustMixin.test_basicc                 C   s.   | j }t|t}t|| _| || _d S N)r   swZcov_clustergroupZse_covr   get_correction_factorr   )clsr   Zcov_clur   r   r    get_robust_cluD   s    z$CheckCountRobustMixin.get_robust_cluTc                 C   sD   |j }|jj\}}|r"t|j}nd}|d t||  }t|S )Nr         ?)modelexogshaper   r   floatr   sqrt)r&   r   sub_kparamsmodnobsZk_varsk_paramsr   r   r   r    r%   L   s    z+CheckCountRobustMixin.get_correction_factorc                 C   s4   | j }| j}t|jj|jd t|jj|jd d S )Nr   )r   r   r	   r   ZllfZllZllnullZll_0)r   r   r   r   r   r    test_oth]   s    zCheckCountRobustMixin.test_othc                 C   s   t | j d S r"   )smtZcheck_ttest_tvaluesr   r   r   r   r    
test_ttestd   s    z CheckCountRobustMixin.test_ttestc                 C   s   t | j d S r"   )r3   Zcheck_ftest_pvaluesr   r4   r   r   r    test_waldtesth   s    z#CheckCountRobustMixin.test_waldtestN)T)
__name__
__module____qualname__r!   classmethodr'   r%   r2   r5   r6   r   r   r   r    r   /   s   
r   c                   @   s   e Zd Zedd ZdS )TestPoissonCluc                 C   s.   t j| _ttt}|jdd| _| 	  d S )NFdisp)

results_stresults_poisson_clur   smdPoissonendogr*   fitr   r'   r&   r/   r   r   r    setup_classn   s    zTestPoissonClu.setup_classNr7   r8   r9   r:   rE   r   r   r   r    r;   l   s   r;   c                   @   s   e Zd Zedd ZdS )TestPoissonCluGenericc              	   C   s   t j| _ttt}|jdd | _}d}|r|| jj	
 | _|jdd | _}|   | j| _| j
 | _|jdd | _}ddlm} || jjdtddddd | jj	| _| | j| _d S )NFr<   r   r   clusterTgroupsuse_correctiondf_correctionuse_tuse_self)r>   r?   r   r@   rA   rB   r*   rC   r   r   copyZbse_nonrobustr'   res3r   Zbse_rob3statsmodels.base.covtyper   r   r$   r%   r   )r&   r/   r   debugr   r   r   r    rE   x   s*    

z!TestPoissonCluGeneric.setup_classNrF   r   r   r   r    rG   v   s   rG   c                   @   s   e Zd Zedd ZdS )TestPoissonHC1Genericc                 C   s`   t j| _ttt}|jdd| _ddl	m
} || jjddd | jj| _| j| jdd| _d S )	NFr<   r   r   HC1TrN   r.   )r>   results_poisson_hc1r   r@   rA   rB   r*   rC   r   rQ   r   r   r   r   r%   r   )r&   r/   r   r   r   r    rE      s    
z!TestPoissonHC1Generic.setup_classNrF   r   r   r   r    rS      s   rS   c                   @   s    e Zd Zedd Zdd ZdS )TestPoissonCluFitc              	   C   sv   t j| _ttt}|jj\}}|d t||  }|j	ddt
tdd| dddd| _d | jj_| jj| _d| _d S )Nr(   FrH   T)rJ   rK   Zscaling_factorrL   r=   cov_typecov_kwdsrM   r   )r>   r?   r   r@   rA   rB   r*   r+   r,   rC   dictr$   r   r   normalized_cov_paramsr   r   r   )r&   r/   r0   r1   Zsc_factr   r   r    rE      s    

zTestPoissonCluFit.setup_classc                 C   s   | j }| j}d}t|j|jdd t|j|j|d t|j|j|dd t|j|j|dd |jd d ddf }t| |ddd d S )	NHz>g:0yE>rtol)r`   Zatolg#B;      Ơ>)	r   r   r	   r   r   ZtvaluesZpvaluesZparams_tableZconf_int)r   r   r   r`   cir   r   r    test_basic_inference   s    z&TestPoissonCluFit.test_basic_inferenceN)r7   r8   r9   r:   rE   re   r   r   r   r    rX      s   
 rX   c                   @   s   e Zd Zedd ZdS )TestPoissonHC1Fitc                 C   sD   t j| _ttt}|jddd| _| jj	| _
| j| jdd| _d S )NFrT   r=   rZ   rV   )r>   rW   r   r@   rA   rB   r*   rC   r   r   r   r%   r   rD   r   r   r    rE      s
    
zTestPoissonHC1Fit.setup_classNrF   r   r   r   r    rf      s   rf   c                   @   s   e Zd Zedd ZdS )TestPoissonHC1FitExposurec                 C   sH   t j| _tjtttd}|jddd| _	| j	j
| _| j| j	dd| _d S )NexposureFrT   rg   rV   )r>   Zresults_poisson_exposure_hc1r   r@   rA   rB   r*   rj   rC   r   r   r   r%   r   rD   r   r   r    rE      s
    
z%TestPoissonHC1FitExposure.setup_classNrF   r   r   r   r    rh      s   rh   c                   @   s   e Zd Zedd ZdS )TestPoissonCluExposurec                 C   s2   t j| _tjtttd}|jdd| _	| 
  d S Nri   Fr<   )r>   results_poisson_exposure_clur   r@   rA   rB   r*   rj   rC   r   r'   rD   r   r   r    rE      s    z"TestPoissonCluExposure.setup_classNrF   r   r   r   r    rk      s   rk   c                   @   s   e Zd Zedd ZdS )TestPoissonCluExposureGenericc              	   C   sl   t j| _tjtttd}|jdd | _	}ddl
m} || j	jdtddddd | j	j| _| | j	| _d S )	Nri   Fr<   r   r   rH   TrI   )r>   rm   r   r@   rA   rB   r*   rj   rC   r   rQ   r   r   r$   r   r   r%   r   )r&   r/   r   r   r   r   r    rE      s    

z)TestPoissonCluExposureGeneric.setup_classNrF   r   r   r   r    rn      s   rn   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonCluc                 C   s<   t j| _ttt}tttt d}|	 | _
|   d S )Nfamily)r>   r?   r   r@   rA   rB   r*   r   r   rC   r   r'   rD   r   r   r    rE     s
    
zTestGLMPoissonClu.setup_classNrF   r   r   r   r    ro     s   ro   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonCluGenericc              	   C   s^   t j| _tttt d}|  | _	}t
| j	jdtddddd | j	j| _| | j	| _d S )Nrp   rH   TFrI   )r>   r?   r   r   rB   r*   r   rA   rC   r   r   r   r$   r   r   r%   r   r&   r/   r   r   r   r    rE     s    

z$TestGLMPoissonCluGeneric.setup_classNrF   r   r   r   r    rr     s   rr   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonHC1Genericc                 C   sV   t j| _tttt d}| | _	t
| j	jddd | j	j| _| j| j	dd| _d S )Nrp   rT   TrU   FrV   )r>   rW   r   r   rB   r*   r   rA   rC   r   r   r   r   r   r%   r   rD   r   r   r    rE   1  s    

z$TestGLMPoissonHC1Generic.setup_classNrF   r   r   r   r    rt   /  s   rt   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonCluFitc                 C   s`   t j| _tttt d}|jdt	t
ddddd | _}d | jj_| jj| _| | j| _d S )Nrp   rH   TrJ   rK   rL   F)rZ   r[   rM   )r>   r?   r   r   rB   r*   r   rA   rC   r\   r$   r   r   r]   r   r   r%   r   rs   r   r   r    rE   A  s    


z TestGLMPoissonCluFit.setup_classNrF   r   r   r   r    ru   ?  s   ru   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonHC1Fitc                 C   sH   t j| _tttt d}|jdd| _	| j	j
| _| j| j	dd| _d S )Nrp   rT   rZ   FrV   )r>   rW   r   r   rB   r*   r   rA   rC   r   r   r   r%   r   rD   r   r   r    rE   X  s
    
z TestGLMPoissonHC1Fit.setup_classNrF   r   r   r   r    rw   V  s   rw   c                   @   s   e Zd Zedd ZdS )TestNegbinCluc                 C   s0   t j| _ttt}|jddd| _| 	  d S )NFr^   r=   gtol)
r>   results_negbin_clur   r@   NegativeBinomialrB   r*   rC   r   r'   rD   r   r   r    rE   e  s    zTestNegbinClu.setup_classNrF   r   r   r   r    ry   c  s   ry   c                   @   s   e Zd Zedd ZdS )TestNegbinCluExposurec                 C   s2   t j| _tjtttd}|jdd| _	| 
  d S rl   )r>   results_negbin_exposure_clur   r@   r}   rB   r*   rj   rC   r   r'   rD   r   r   r    rE   o  s    z!TestNegbinCluExposure.setup_classNrF   r   r   r   r    r~   m  s   r~   c                   @   s   e Zd Zedd ZdS )TestNegbinCluGenericc              	   C   s^   t j| _ttt}|jddd | _}t	| jj
dtddddd | jj| _| | j| _d S )NFr^   rz   rH   TrI   )r>   r|   r   r@   r}   rB   r*   rC   r   r   r   r$   r   r   r%   r   rs   r   r   r    rE     s    

z TestNegbinCluGeneric.setup_classNrF   r   r   r   r    r     s   r   c                   @   s   e Zd Zedd ZdS )TestNegbinCluFitc                 C   sT   t j| _ttt}|jddtt	dddddd | _
}| j
j| _| | j
| _d S )NFrH   Trv   r^   )r=   rZ   r[   rM   r{   )r>   r|   r   r@   r}   rB   r*   rC   r\   r$   r   r   r   r%   r   rs   r   r   r    rE     s    
zTestNegbinCluFit.setup_classNrF   r   r   r   r    r     s   r   c                   @   s   e Zd Zedd ZdS )TestNegbinCluExposureFitc                 C   sV   t j| _tjtttd}|jddt	t
ddddd | _}| jj| _| | j| _d S )Nri   FrH   Trv   rY   )r>   r   r   r@   r}   rB   r*   rj   rC   r\   r$   r   r   r   r%   r   rs   r   r   r    rE     s    
z$TestNegbinCluExposureFit.setup_classNrF   r   r   r   r    r     s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CheckDiscreteGLMc                 C   s\   | j }| j}t|j| j t|j| j t|dd}t|j|j|d t|j|jdd d S )Nr`   vIh%<=r_   绽|=)r   r   r
   rZ   getattrr	   r   r   )r   r   r   r`   r   r   r    r!     s    zCheckDiscreteGLM.test_basicc                 C   s.  | j }| j}t|jtr$d|ji}ni }t|jtr:d}nd}|jj|jd |jd}|jj|jd f|}t||dd |jj	|j|jd}|jj	|jf|}t||dd t|jtrd S |jj
|j|jd}	|jj
|jf|}
t|	|
dd |jj|j|jd}|jj|jf|}t|| |dd d S )	Nscaler   \(\?)r   r   r_   r   )r   r   
isinstancer)   r   r   scorer   r	   hessianZscore_factorZhessian_factor)r   r   r   kwdsZsgnscore1score2hess1hess2Zscoref1Zscoref2Zhessf1Zhessf2r   r   r    test_score_hessian  s,    z#CheckDiscreteGLM.test_score_hessianc                 C   st   | j }| j}t|jtrd S | j j}t|d |d f}|j|dd}|j|dd}t	t
|t
|dd d S )N      	nonrobustrx   rc   r_   )r   r   r   r)   r   Zfittedvaluesr   Zcolumn_stackZ
score_testr	   Zhstack)r   r   r   ZfittedZ
exog_extraZres_lm1Zres_lm2r   r   r    test_score_test  s    z CheckDiscreteGLM.test_score_testc                 C   s   t | jjtst| jjdr&td | j }| j }t	|j
|j
dd t	|j|jdd | jjddd}| jjddd}t	|j
|j
dd t	|j|jdd d S )Noffsetznot available yetr   r_   T)countdummy)r   r   r)   r   hasattrr   pytestskipZget_margeffr	   ZmargeffZ
margeff_se)r   Zmarg1Zmarg2r   r   r    test_margeff  s    


zCheckDiscreteGLM.test_margeffN)r7   r8   r9   r!   r   r   r   r   r   r   r    r     s   "r   c                   @   s   e Zd Zedd ZdS )TestGLMPoissonc                 C   sd   t jd t jt}d| _t|tt	 d}|j
dd| _t	|t}|j
dd| _d| j_d S )NiW:HC0rp   rx   gdy=)r   randomseedZpoissonrB   rZ   r   r*   r   rA   rC   r   r@   r   r`   )r&   Zendog_countmod1r   r   r    rE   
  s    zTestGLMPoisson.setup_classNrF   r   r   r   r    r     s   r   c                   @   s   e Zd Zedd ZdS )TestGLMLogitc                 C   sf   t t  kt}d| _t|tt d}|j	dt
tdd| _t|t}|j	dt
tdd| _d S NrH   rp   rJ   rZ   r[   )rB   meanastypeintrZ   r   r*   r   BinomialrC   r\   r$   r   r@   Logitr   r&   	endog_binr   r   r   r    rE     s    zTestGLMLogit.setup_classNrF   r   r   r   r    r     s   r   c                   @   s   e Zd Zedd ZdS )TestGLMLogitOffsetc                 C   s|   t t  kt}d| _t|jd }t|t	t
 |d}|jdttdd| _tj|t	|d}|jdttdd| _d S )NrH   r   rq   r   r   r   r   )rB   r   r   r   rZ   r   r   r+   r   r*   r   r   rC   r\   r$   r   r@   r   r   r&   r   r   r   r   r   r    rE   )  s    zTestGLMLogitOffset.setup_classNrF   r   r   r   r    r   '  s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestGLMProbitc                 C   sv   t t  kt}d| _t|ttjt	
 dd}|jddttdd| _t
|t}|jdttdd| _d| _d S )	NrH   linkrp   newtonr   methodrZ   r[   r   ư>)rB   r   r   r   rZ   r   r*   r   r   r   ProbitrC   r\   r$   r   r@   r   r`   r   r   r   r    rE   7  s     zTestGLMProbit.setup_classc                 C   sl   | j }| j}|j|jd }|j|jd }t||dd |j|j}|j|j}t||dd d S )Nr   r   r_   )r   r   r)   r   r   r	   r   )r   r   r   r   r   r   r   r   r   r    r   D  s    z TestGLMProbit.test_score_hessianN)r7   r8   r9   r:   rE   r   r   r   r   r    r   5  s   
r   c                   @   s   e Zd Zedd ZdS )TestGLMProbitOffsetc                 C   s   t t  kt}d| _t|jd }t|t	t
jt d|d}|jddttdd| _tj|t	|d}|jdttdd	| _d
| _d S )NrH   r   r   r   r   r   r   r   r   r   )rB   r   r   r   rZ   r   r   r+   r   r*   r   r   r   r   rC   r\   r$   r   r@   r   r`   r   r   r   r    rE   S  s     zTestGLMProbitOffset.setup_classNrF   r   r   r   r    r   Q  s   r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussNonRobustc                 C   s:   d| _ tttt d}| | _ttt}| | _	d S )Nr   rp   
rZ   r   rB   r*   r   GaussianrC   r   r   r   r&   r   mod2r   r   r    rE   f  s
    

z!TestGLMGaussNonRobust.setup_classNrF   r   r   r   r    r   d  s   r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussCluc                 C   sR   d| _ tttt d}|jdttdd| _	t
tt}|jdttdd| _d S r   )rZ   r   rB   r*   r   r   rC   r\   r$   r   r   r   r   r   r   r    rE   s  s
    
zTestGLMGaussClu.setup_classNrF   r   r   r   r    r   q  s   r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussHCc                 C   sB   d| _ tttt d}|jdd| _ttt}|jdd| _	d S )Nr   rp   rx   r   r   r   r   r    rE     s
    
zTestGLMGaussHC.setup_classNrF   r   r   r   r    r   ~  s   r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussHACc                 C   sN   d| _ ddi}tttt d}|jd|d| _ttt}|jd|d| _	d S )NHACmaxlagsr   rp   r   r   r&   r   r   r   r   r   r    rE     s    
zTestGLMGaussHAC.setup_classNrF   r   r   r   r    r     s   r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussHAC2c                 C   sX   d| _ ddd}tttt d}|jd|d| _ttt}ddi}|jd|d| _	d S )Nr   Zbartlettr   kernelr   rp   r   r   r   r&   r   r   r   Zkwds2r   r   r    rE     s    

zTestGLMGaussHAC2.setup_classNrF   r   r   r   r    r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestGLMGaussHACUniformc                 C   sf   d| _ tjdd}tttt d}|jd|d| _	t
tt}|jd|d| _|jdddid| _d S )Nr   r   r   rp   r   r   )rZ   r#   weights_uniformr   rB   r*   r   r   rC   r   r   r   rP   r   r   r   r    rE     s    
z"TestGLMGaussHACUniform.setup_classc                 C   s   t jdd}| jjjd|d}| jjjd|d}t|j| jjdd t|j| jjdd t	ddd	g}t|j|d
d t
|jd t jk t jdd}| jjjd|d}| jjjd|d}t|j|jdd t	dddg}t|j|d
d d S )Nr   )weights_funcr   r   r   -q=r_   g+O@gqh@g,{@&@r   r   r   gG@g[@go^b"@)r#   r   r   r)   rC   r   r	   r   r   arrayr   r[   Zweights_bartlett)r   ZkwdsaZres1aZres2ar   Zkwdsbr   r   r    test_cov_options  s    z'TestGLMGaussHACUniform.test_cov_optionsN)r7   r8   r9   r:   rE   r   r   r   r   r    r     s   
r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussHACUniform2c                 C   s\   d| _ tjdd}tttt d}|jd|d| _	t
tt}ddd}|jd|d| _d S )Nr   r   r   rp   r   uniform)rZ   r#   r   r   rB   r*   r   r   rC   r   r   r   r   r   r   r    rE     s    

z#TestGLMGaussHACUniform2.setup_classNrF   r   r   r   r    r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestGLMGaussHACPanelc                 C   s   d| _ ttddd d }tt t t	 d}t
|dtjddd	}|jd|d
| _|jd|d
| _ttt}|jd|d
| _d S )N	hac-panel      r   rp   r   hacF)timer   r   rK   rL   r   znw-panel)rZ   r   tilearanger   rB   rO   r*   r   r   r\   r#   r   rC   r   res1br   r   r&   r   r   r   r   r   r   r    rE     s    
z TestGLMGaussHACPanel.setup_classc                 C   s   t | jj| jjdd d S Nr   r_   r	   r   r   r   r4   r   r   r    test_kwd  s    zTestGLMGaussHACPanel.test_kwdNr7   r8   r9   r:   rE   r   r   r   r   r    r     s   
r   c                   @   s   e Zd Zedd ZdS )TestGLMGaussHACPanelGroupsc                 C   s   d| _ ttddd d }tt t t	 d}t
t|dtjddd	}|jd|d
| _ttt}|jd|d
| _d S )Nr   r   r   r   rp   r   r   F)rJ   r   r   rK   rL   r   )rZ   r   repeatr   r   rB   rO   r*   r   r   r\   pdSeriesr#   r   rC   r   r   r   )r&   rJ   r   r   r   r   r   r    rE     s    

z&TestGLMGaussHACPanelGroups.setup_classNrF   r   r   r   r    r      s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestGLMGaussHACGroupsumc                 C   s   d| _ ttddd d }tttt d}t	t
|dddd	}|jd|d
| _|jd|d
| _ttt}|jd|d
| _d S )Nzhac-groupsumr   r   r   rp   r   r   F)r   r   rK   rL   r   znw-groupsum)rZ   r   r   r   r   rB   r*   r   r   r\   r   r   rC   r   r   r   r   r   r   r   r    rE     s    

z#TestGLMGaussHACGroupsum.setup_classc                 C   s   t | jj| jjdd d S r   r   r4   r   r   r    r   %  s    z TestGLMGaussHACGroupsum.test_kwdNr   r   r   r   r    r     s   
r   )\__doc__osZnumpyr   Zpandasr   r   Z#statsmodels.discrete.discrete_modelZdiscreteZdiscrete_modelr@   Z+statsmodels.genmod.generalized_linear_modelr   Zstatsmodels.genmodr   Zstatsmodels.genmod.familiesr   Z#statsmodels.regression.linear_modelr   rQ   r   Z%statsmodels.stats.sandwich_covariancestatsZsandwich_covariancer#   Zstatsmodels.tools.toolsr   Znumpy.testingr	   r
   r   Zstatsmodels.tools._testingZtoolsZ_testingr3   r   r   r>   pathdirnameabspath__file__Zcur_dirjoinfilepathZread_csvZdata_rawZdropnadatarB   splitZ	exog_datar*   Zasarrayr   r$   rj   r   r;   rG   rS   rX   rf   rh   rk   rn   ro   rr   rt   ru   rw   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   sv   =
 /

N,