U
    Kvf                    @   sB  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlZddl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mZ ddlmZ dd	lmZm Z  dd
l!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+ dZ,dZ-dZ.dZ/dZ0dZ1e1rddl2m3Z3 e3dZ4ndZ4dd Z5dd Z6ej7dddd Z8G dd dZ9G dd dZ:G d d! d!e9Z;G d"d# d#e;Z<G d$d% d%e9Z=G d&d' d'e9Z>G d(d) d)e9Z?G d*d+ d+e9e:Z@G d,d- d-e9ZAG d.d/ d/e9ZBG d0d1 d1e9ZCG d2d3 d3e9e:ZDG d4d5 d5e9ZEG d6d7 d7e9ZFG d8d9 d9e9ZGG d:d; d;e9ZHG d<d= d=e9ZId>d? ZJd@dA ZKdBdC ZLG dDdE dEe9ZMdFdG ZNdHdI ZOdJdK ZPejQjRdLdM ZSddNdOZTejQjUdPdQ ZVdRdS ZWdTdU ZXdVdW ZYdXdY ZZG dZd[ d[Z[G d\d] d]e[Z\G d^d_ d_e[Z]G d`da dae[Z^G dbdc dce[Z_G ddde dee[Z`G dfdg dge[ZaG dhdi die[ZbG djdk dke[ZcG dldm dme[ZdG dndo doe[ZeG dpdq dqe[ZfG drds dse[ZgG dtdu due[ZhG dvdw dwe[ZiG dxdy dye[Zjdzd{ ZkG d|d} d}ZlG d~d delZmG dd delZnG dd delZoG dd delZpG dd dZqG dd deqZrG dd deqZsG dd deqZtG dd deqZudd ZvejQwddd Zxdd Zydd Zzdd Z{dd Z|dd Z}G dd dZ~G dd dZdd Zdd Zdd ZejQdejejejejgdd Zdd Zdd Zdd Zdd Zdd ZdS )z
Test functions for models.GLM
    N)assert_assert_allcloseassert_almost_equalassert_array_lessassert_equalassert_raises)assert_series_equal)stats)SP_LT_17)cpunishlongley)discrete_model)GLMSET_USE_BIC_LLF)approx_fprimeapprox_fprime_csapprox_hessapprox_hess_cs)DomainWarningPerfectSeparationWarningValueWarning)add_constant            F)PdfPagesztest_glm.pdfc                 C   s   t r| | d S N)
pdf_outputZsavefig)pdffig r!   E/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/genmod/tests/test_glm.pyclose_or_save7   s    r#   c                   C   s   t rt  d S r   )r   r   closer!   r!   r!   r"   teardown_module<   s    r%   module)Zscopec                  C   s0   t jt jt} tjt j| dddddS )Nresultsziris.csv,r   )	delimiterZskip_header)ospathdirnameabspath__file__npZ
genfromtxtjoin)cur_dirr!   r!   r"   irisA   s
     r2   c                   @   s   e Zd ZdZeZdd ZeZdd ZeZ	dd Z
eZdd	 ZeZd
d ZeZdd ZeZdd ZeZdd Ze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ej j!d d! Z"ej j!d"d# Z#d$d% Z$d&S )'CheckModelResultsMixinzo
    res2 should be either the results from RModelWrap
    or the results as defined in model_results_data
    c                 C   s   t | jj| jj| j d S r   )r   res1paramsres2decimal_paramsselfr!   r!   r"   test_paramsO   s    z"CheckModelResultsMixin.test_paramsc                 C   s$   t | jj| jjd| j  dd d S )N
   h㈵>atolrtol)r   r4   bser6   decimal_bser8   r!   r!   r"   test_standard_errorsT   s    
 z+CheckModelResultsMixin.test_standard_errorsc                 C   s   dd l }| | jj}|d d df  | jjj| jjd 9  < d| j  }| jj	}t
| jj| jj| jj|| jjf}t||d|d d S )Nr   r   r;   ư>r?   r>   )copyr6   residsr4   familylinkZderivmudecimal_residsresid_anscombe_unscaledr/   column_stackresid_pearsonresid_devianceresid_workingresid_responser   )r9   rE   Zresid2r>   Zresid_arF   r!   r!   r"   test_residualsY   s    ,
  z%CheckModelResultsMixin.test_residualsc                 C   s   | j jdkrd}nd}t| j jjtjjrt| j jjj| j jj	| j j
| j jj| j jjdd}d| d| j jd   }n| j j}t|| | jj| j d S )Nr   r   r   scale)r4   rS   
isinstancemodelrG   smfamiliesNegativeBinomialloglikeendogrI   var_weightsfreq_weightsdf_modelaicr   r6   aic_Rdecimal_aic_R)r9   Zdofllfr_   r!   r!   r"   
test_aic_Rk   s    z!CheckModelResultsMixin.test_aic_Rc                 C   s   t | jjjtjjtjjtjjfrt| jjjj	| jjj
| jj| jjj| jjjdd}d| d| jjd   | jj }n| jj| jj }t|| jj| j d S )Nr   rR   rT   r   )rU   r4   rV   rG   rW   rX   GammaInverseGaussianrY   rZ   r[   rI   r\   r]   r^   nobsr_   r   r6   Z	aic_Statadecimal_aic_Stata)r9   rb   r_   r!   r!   r"   test_aic_Stata   s    "z%CheckModelResultsMixin.test_aic_Statac                 C   s   t | jj| jj| j d S r   )r   r4   deviancer6   decimal_deviancer8   r!   r!   r"   test_deviance   s    z$CheckModelResultsMixin.test_deviancec                 C   s   t | jj| jj| j d S r   )r   r4   rS   r6   decimal_scaler8   r!   r!   r"   
test_scale   s    z!CheckModelResultsMixin.test_scalec                 C   sr   t | jjjtjjtjjtjjfrT| jjjj	| jjj
| jj| jjj| jjjdd}n| jj}t|| jj| j d S Nr   rR   )rU   r4   rV   rG   rW   rX   rd   re   rY   rZ   r[   rI   r\   r]   rb   r   r6   decimal_loglike)r9   rb   r!   r!   r"   test_loglike   s    z#CheckModelResultsMixin.test_loglikec              	   C   s:   t  ( t dt t| jj| jj| j W 5 Q R X d S Nignore)	warningscatch_warningssimplefilterr   r   r4   null_deviancer6   decimal_null_deviancer8   r!   r!   r"   test_null_deviance   s    
z)CheckModelResultsMixin.test_null_deviancec              	   C   s8   t  & t d t| jj| jj| j W 5 Q R X d S rq   )	rs   rt   ru   r   r4   bicr6   Z	bic_Statadecimal_bicr8   r!   r!   r"   test_bic   s    

zCheckModelResultsMixin.test_bicc                 C   s   t | jjj| jj d S r   )r   r4   rV   df_residr6   r8   r!   r!   r"   test_degrees   s    z#CheckModelResultsMixin.test_degreesc                 C   s   t | jj| jj| j d S r   )r   r4   fittedvaluesr6   decimal_fittedvaluesr8   r!   r!   r"   test_fittedvalues   s    z(CheckModelResultsMixin.test_fittedvaluesc                 C   s   | j j}|| j j }tjt|d }tjd| j j }t	|| || f}t
|tjrpt| j j| nt| j j| t| j j| t| j  | d S )Nr   g?)r4   r5   r@   r	   ZnormZsfr/   absZisfrL   rU   pdSeriesr   tvaluesr   pvaluesconf_int)r9   r5   r   r   Z
half_widthr   r!   r!   r"   test_tpvalues   s    z$CheckModelResultsMixin.test_tpvaluesc                 C   s(   t | jdr$t| jj| jjddd d S )Npearson_chi2rC   r=   )hasattrr6   r   r4   r   r8   r!   r!   r"   test_pearson_chi2   s
     z(CheckModelResultsMixin.test_pearson_chi2c                 C   sX   t | jdr(t| jjdd| jjdd t | jdrTtt| jjdd| jjdd d S )N	prsquaredZmcf)kind皙?r?   prsquared_cox_snellcs)r   r6   r   r4   Zpseudo_rsquaredr   floatr   r8   r!   r!   r"   test_prsquared   s      z%CheckModelResultsMixin.test_prsquaredc                 C   s   | j   d S r   )r4   summaryr8   r!   r!   r"   test_summary   s    z#CheckModelResultsMixin.test_summaryc              	   C   s.   t   t dt | j  W 5 Q R X d S rq   )rs   rt   ru   r   r4   summary2r8   r!   r!   r"   test_summary2   s    
z$CheckModelResultsMixin.test_summary2c              	   C   sF  | j }t|jjdstd t|jjtjj	r6d}n|j
}|jj|j|}|jj|j| }| \}}t|j|dd t||dd |j|j|}|jD ]}t|j| |j| dd q|jdd}	t|	| |dd t| dd	rtjtd
d | }
W 5 Q R X n| }
|jD ] }t|
j| |j| dd q d S )Nget_distributionzget_distribution not availabler   vIh%<=r   Zvar_unscaledwhichhas_edispersionFzusing scale=1match)r4   r   rV   rG   pytestskiprU   rW   rX   rY   rS   r   r~   variancer	   r   r5   kwdspredictgetattrwarnsUserWarning)r9   r4   	res_scaledistr	var_endogmvdistr2kZvar_Zdistr3r!   r!   r"   test_get_distribution   s0    


z,CheckModelResultsMixin.test_get_distributionN)%__name__
__module____qualname____doc__	DECIMAL_4r7   r:   rA   rB   rJ   rQ   ra   rc   rg   rh   rj   rk   rl   rm   ro   rp   rw   rx   rz   r{   r}   r   r   r   r   r   r   marksmoker   r   r   r!   r!   r!   r"   r3   H   s@   	

r3   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )CheckComparisonMixinc           	      C   s  | j }| j}t|j|jdd |j|jd }|j|jd }t||dd |j|jd }t||ddd |j|j}t|t	
|jd dd |jj|jd d	d
}|j|jd }t||dd |jj|jd dd
}|j|jd }t||dd d S )N绽|=r   \(\?r   #B;r>   r   gƠ>FZobservedT&.>)r4   resdr   rb   rV   	score_obsr5   scoresumr/   zerosshapehessian)	r9   r4   r   
score_obs1
score_obsdZscore1Zscore0Zhessian1Zhessiandr!   r!   r"   test_compare_discrete  s     z*CheckComparisonMixin.test_compare_discretec                 C   s   | j }|jj|jdd\}}}t|ddd t|ddd t|d |jj|jdd\}}}t|ddd tt|t	|d t|d |jj
d d df d }|jj|j|d	\}}}td
| td
| t|d d S )Nr   )Zk_constraintsr   r   r   r   msgr   
exog_extra皙?)r4   rV   
score_testr5   r   r   r   r/   isnanreprexogr   )r9   r4   stpvdfr   r!   r!   r"   test_score_test%  s    



z$CheckComparisonMixin.test_score_testc                 C   s   | j  }| j }t|j|jdd t|j|jdd t| j	| j	dd | j jdd}| j }t|j|jdd t|j|jdd t| j	| j	dd d S )Ndy=r   rC   meanr   )
r4   get_predictionr   r   	predictedpredicted_meansese_meansummary_framevalues)r9   pred1preddr!   r!   r"   test_get_prediction9  s     


 

 z(CheckComparisonMixin.test_get_predictionN)r   r   r   r   r   r   r!   r!   r!   r"   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestGlmGaussianc                 C   s   t | _t| _t| _t | _ddlm} | | _	t
j| j	jdd| j	_t
j| j	jdd| j	_t| j	jdd| j	_t| j	j| j	jtj d | _dd	lm} | | _d
S )C
        Test Gaussian family with canonical identity link
        r   loadWrequirementsFprependrG   r   LongleyN	DECIMAL_3rJ   	DECIMAL_2r7   	DECIMAL_0rz   rA   statsmodels.datasets.longleyr   datar/   requirer[   r   r   r   rW   rX   Gaussianfitr4   results.results_glmr   r6   clsr   r   r!   r!   r"   setup_classJ  s    zTestGlmGaussian.setup_classc           
      C   s  | j }ddlm} || jj| jjjdd}|| _t|j	|j	dd |j
j|jd d}|jd d d f |j |j
j }t||dd |j
j|jd	d}|jd d d f |j
j }t||dd |j
j|jd d}d
|j |j
jj|j
j }t||dd | }| }	t|	j|jdd t|	j|jdd t|	 jd d d df | jdd | j jdd}| j }	t|	j|jdd t|	j|jdd t|	 jd d d df | jdd d S )Nr   OLSF)Zuse_tr   r   rR   :0yE>r         r   rC   r   r   r   )r4   #statsmodels.regression.linear_modelr   r   r[   r   r   r   r   rb   rV   r   r5   ZresidrS   r   Tdotr   r   r   r   r   r   r   )
r9   r4   r   r   r   r   Z	hess_obs1Z	hess_obsdr   r   r!   r!   r"   test_compare_OLS`  s<      
 z TestGlmGaussian.test_compare_OLSN)r   r   r   classmethodr   r   r!   r!   r!   r"   r   I  s   
r   c                   @   s   e Zd Zedd ZdS )TestGlmGaussianGradientc                 C   s   t | _t| _t| _t| _ddlm} | | _	t
j| j	jdd| j	_t
j| j	jdd| j	_t| j	jdd| j	_t| j	j| j	jtj djdd	| _d
dlm} | | _dS )r   r   r   r   r   Fr   r   newtonmethodr   r   Nr   r   r!   r!   r"   r     s     z#TestGlmGaussianGradient.setup_classNr   r   r   r   r   r!   r!   r!   r"   r    s   r  c                   @   s   e Zd Zedd ZdS )TestGaussianLogc                 C   s   t | _t| _t | _t| _d}t|}tj	
d tjt|df||d f | _tdd|  d|d    dtj	|  | _t| j| jtjtjj d	}| | _dd
lm} | | _d S )Nd   1  r   r   r   {Gz?-C6?MbP?r   )GaussianLog)r   ra   r   rg   ro   	DECIMAL_1rw   r/   arangerandomseedc_onesXexprandnZlnyr   rW   rX   r   linksLogr   r4   r   r  r6   )r   rf   xZGaussLog_Modelr  r!   r!   r"   r     s"    
 

zTestGaussianLog.setup_classNr  r!   r!   r!   r"   r    s   r  c                   @   s   e Zd Zedd ZdS )TestGaussianInversec                 C   s   t | _t | _t| _t | _t| _d}t|}tj	
d dd|  |d  dtj	|  }tjt|df||d f | _dd|  d	|d   d
 d	tj	|  | _t| j| jtjtjj d}| }|| _ddlm} | | _d S )Nr  r        ?       @r   r   r   r	  r  r   )GaussianInverse)r  rz   ra   r   rg   ro   rJ   r/   r  r  r  r  r  r  r  Zy_invr   rW   rX   r   r  InversePowerr   r4   r   r  r6   )r   rf   r  yZInverseLink_ModelZInverseLink_Resr  r!   r!   r"   r     s$    
$ .
zTestGaussianInverse.setup_classNr  r!   r!   r!   r"   r    s   r  c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestGlmBinomialc                 C   s   t | _t| _ddlm} ddlm} | }tj	|j
dd|_
tj	|jdd|_t|jdd|_t|j
|jtj d	 | _| | _d
S )V
        Test Binomial family with canonical logit link using star98 dataset.
        r   r   r   )Star98r   r   Fr   r   N)r  rJ   r   rz   statsmodels.datasets.star98r   r   r"  r/   r   r[   r   r   r   rW   rX   Binomialr   r4   r6   )r   r   r"  r   r!   r!   r"   r     s    
zTestGlmBinomial.setup_classc                 C   s   ddl m} | }t|jdd|_|jt}t||jtj	
 d }t|j| jj |jtj}t||jtj	
 d }t|j| jj d S )Nr   r   Fr   r   )r#  r   r   r   r[   astypeintr   rW   rX   r$  r   r   r5   r4   r/   double)r9   r   r   r[   r6   res3r!   r!   r"   test_endog_dtype  s    z TestGlmBinomial.test_endog_dtypec              	   C   sP   t jjdddd}t jd}tjtdd t||tj	
 d W 5 Q R X d S )	Nr   r  )  r   size)r*  r   zendog has more than 2 columnsr   r   )r/   r  randintZstandard_normalr   raises
ValueErrorr   rW   rX   r$  )r9   reset_randomstater[   r   r!   r!   r"   test_invalid_endog  s    z"TestGlmBinomial.test_invalid_endogc              	   C   s   d}t jj|dfd}t jjdd|dt}t||d d df |d d df d}tj	t
dd	 tjjd
|tj d W 5 Q R X d S )N   r   r+  r   r   r   r  x1x2zarray with multiple columnsr   y ~ x1 + x2r   )r/   r  normalr-  r%  strr   	DataFramer   r.  r/  rW   r   from_formularX   r$  )r9   r0  nr   r[   r   r!   r!   r"   test_invalid_endog_formula  s    *
z*TestGlmBinomial.test_invalid_endog_formulac                 C   s   | j }d}|j}|jj}|jjj|||d}|jj|| }| \}}t|| |dd t|| |dd |jj|j	||d}	|	j
D ]}
t|j
|
 |	j
|
 dd qd S )Nr   )n_trialsr   r   )r4   r~   rV   r=  rG   r   r   r	   r   r5   r   )r9   r4   r   Zmu_probr;  r   r   r   r   r   r   r!   r!   r"   !test_get_distribution_binom_count  s     
z1TestGlmBinomial.test_get_distribution_binom_countN)	r   r   r   r   r   r)  r1  r<  r>  r!   r!   r!   r"   r     s   
r   c                   @   s    e Zd Zedd Zdd ZdS )TestGlmBernoullic                 C   sf   ddl m} | | _t| jj| jjtj d	 | _
t| jj| jj}|j	| j
jd dd| _d S )Nr   )Lbwr   ?Fstart_paramsZdisp)r   r@  r6   r   r[   r   rW   rX   r$  r   r4   discreteLogitr5   r   )r   r@  moddr!   r!   r"   r   I  s    zTestGlmBernoulli.setup_classc                 C   s  | j }| j}|jj|j|jjd d df d d\}}}d}t||dd |jj|j|jjd d df d d\}}}d}t||dd ttd	}|	d
 t
|j|jjd d |f tj d }|jj|j|jjd d df d}	t|	d d  }	d}
t|	|
dd d}d S )Nr   r   r   g"<laA)?r
  r   r   ga}{?	      r   rT   )gjCޓJ@gJpJV?a          data = read.csv("...statsmodels\statsmodels\genmod\tests\results\stata_lbw_glm.csv")

        data["race_black"] = data["race"] == "black"
        data["race_other"] = data["race"] == "other"
        mod = glm(low ~ age + lwt + race_black + race_other + smoke + ptl + ht + ui, family=binomial, data=data)
        options(digits=16)
        anova(mod, test="Rao")

        library(statmod)
        s = glm.scoretest(mod, data["age"]**2)
        s**2
        s = glm.scoretest(mod, data["lwt"]**2)
        s**2
        )r4   r6   rV   r   r5   r   r   listrangepopr   r[   ZilocrW   rX   r$  r   r/   asarrayZravel)r9   r4   r6   r   r   r   Zst_resselectZres1bZtresZtres_rZcmd_rr!   r!   r"   test_score_rS  s0    




zTestGlmBernoulli.test_score_rN)r   r   r   r   r   rN  r!   r!   r!   r"   r?  H  s   
	r?  c                   @   s   e Zd Zedd ZdS )TestGlmGammac              	   C   s   d| _ t| _ddlm} ddlm} | }t|jdd|_t	
 , t	d t|j|jtj d	 }W 5 Q R X || _| }| jd
7  _|| _dS )zK
        Tests Gamma family with canonical inverse link (power -1)
        r  r   r   r   )ScotvoteFr   rr   r   r   N)ra   r   rJ   Zstatsmodels.datasets.scotlandr   r   rP  r   r   rs   rt   ru   r   r[   rW   rX   rd   r   r4   r`   r6   )r   r   rP  r   r4   r6   r!   r!   r"   r     s    


zTestGlmGamma.setup_classNr  r!   r!   r!   r"   rO    s   rO  c                   @   s   e Zd Zedd ZdS )TestGlmGammaLogc                 C   sX   t | _t| _t | _ddlm} | }t|j|j	t
jjt
jj dd | _|| _d S )Nr   )	CancerLogrH   r   )r   rJ   r   ra   r   r   rR  r   r[   r   rW   rX   rd   r  r  r   r4   r6   )r   rR  r6   r!   r!   r"   r     s    
zTestGlmGammaLog.setup_classNr  r!   r!   r!   r"   rQ    s   rQ  c                   @   s   e Zd Zedd ZdS )TestGlmGammaIdentityc              	   C   s   d| _ t| _t| _t| _ddlm} | }t	
 > t	d tjjtjj d}t|j|j|d | _W 5 Q R X || _d S )Nir   )CancerIdentityrr   rS  r   )rJ   r   r7   r   ra   r  ro   r   rU  rs   rt   ru   rW   rX   rd   r  Identityr   r[   r   r   r4   r6   )r   rU  r6   famr!   r!   r"   r     s    

"z TestGlmGammaIdentity.setup_classNr  r!   r!   r!   r"   rT    s   rT  c                   @   s   e Zd Zedd ZdS )TestGlmPoissonc                 C   s   ddl m} t | _tj| jjdd| j_tj| jjdd| j_t	| jjdddf | jjdddf< t
| jjdd| j_t| jj| jjtj d	 | _| | _t| jj| jj}|j| jjd
 dd| _dS )zi
        Tests Poisson family with canonical log link.

        Test results were obtained by R.
        r   )Cpunishr   r   Nr   Fr   r   rA  rB  )r   rY  r   r   r   r/   r   r[   r   logr   r   rW   rX   Poissonr   r4   r6   rD  r5   r   )r   rY  rF  r!   r!   r"   r     s    
*zTestGlmPoisson.setup_classNr  r!   r!   r!   r"   rX    s   rX  c                   @   s    e Zd Zedd Zdd ZdS )TestGlmInvgaussc                 C   sJ   t | _t | _ddlm} | }t|j|jtj	
 d }|| _|| _dS )a	  
        Tests the Inverse Gaussian family in GLM.

        Notes
        -----
        Used the rndivgx.ado file provided by Hardin and Hilbe to
        generate the data.  Results are read from model_results, which
        were obtained by running R_ig.s
        r   )InvGaussr   N)r   ra   ro   r   r]  r   r[   r   rW   rX   re   r   r4   r6   )r   r]  r6   r4   r!   r!   r"   r     s    

zTestGlmInvgauss.setup_classc                 C   s^   | j }|jj|j|j}|jj|j|j }| \}}t|j|dd t||dd d S )Nr   r   )	r4   rV   rG   r   r~   rS   r   r	   r   )r9   r4   r   r   r   r   r!   r!   r"   r     s    z%TestGlmInvgauss.test_get_distributionN)r   r   r   r   r   r   r!   r!   r!   r"   r\    s   
r\  c                   @   s   e Zd Zedd ZdS )TestGlmInvgaussLogc                 C   sR   d| _ t| _ddlm} | }t|j|jtj	j
tj	j dd | _|| _d S )Nr   )InvGaussLogrS  r   )ra   r   rJ   r   r`  r   r[   r   rW   rX   re   r  r  r   r4   r6   )r   r`  r6   r!   r!   r"   r     s    

zTestGlmInvgaussLog.setup_classNr  r!   r!   r!   r"   r^    s   r^  c                   @   s   e Zd Zedd ZdS )TestGlmInvgaussIdentityc              	   C   s   d| _ t| _t| _ddlm} | }t : td t	|j
|jtjjtjj dd | _W 5 Q R X ddlm} | | _d S )Nr_  r   )Medpar1rr   rS  r   )InvGaussIdentity)ra   r   r   r7   r   rb  rs   rt   ru   r   r[   r   rW   rX   re   r  rV  r   r4   rc  r6   )r   rb  r   rc  r!   r!   r"   r   3  s    



z#TestGlmInvgaussIdentity.setup_classNr  r!   r!   r!   r"   ra  2  s   ra  c                   @   s   e Zd Zedd ZdS )TestGlmNegbinomialc              
   C   sf  t | _t| _d| _t | _ddlm} | | _t	j
| jjdd| j_t	j
| jjdd| j_t	| jjdddf | jjdddf< | jjdddf | jjdddf  }t	| jj|f| j_t| jjd	d
| j_t 4 tjdtd tt tj }W 5 Q R X W 5 Q R X t| jj| jj|djdd| _ddlm} | }| jd7  _|| _ d| _!dS )z=
        Test Negative Binomial family with log link
        r  r   r   r   r   Nr   r   Fr   rr   categoryr   r5  rR   )	CommitteeT)"r  Zdecimal_residr   r7   rJ   r   Zstatsmodels.datasets.committeer   r   r/   r   r[   r   rZ  rL   r   rs   rt   ru   r   r   r   r   rW   rX   rY   r   r   r4   r   rg  r`   r6   r   )r   r   ZinteractionrW  rg  r6   r!   r!   r"   r   O  s4    *(
zTestGlmNegbinomial.setup_classNr  r!   r!   r!   r"   rd  N  s   rd  c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
TestGlmPoissonOffsetc                 C   s   ddl m} t| _t| _d| _t }t	|j
|_
t	|j|_t|jd d df |jd d df< t|jdd|_dgt|j
 }|| _|| _t|j
|jtj |d | _| | _d S )Nr   )Cpunish_offsetr   Tr   r  rG   exposure)r   ri  r   r7   rA   ra   r   r   r/   rL  r[   r   rZ  r   lenr   rk  r   rW   rX   r[  r   r4   r6   )r   ri  r   rk  r!   r!   r"   r     s     &z TestGlmPoissonOffset.setup_classc                 C   sR   | j j }tj|ddddg< t|| j jtj	 | j
dd}t|j
jd d d S )	Nr   r         drop)rG   rk  missingr      )r   r[   rE   r/   nanr   r   rW   rX   r[  rk  r   r   )r9   r[   modr!   r!   r"   test_missing  s     z!TestGlmPoissonOffset.test_missingc                 C   sD  t jd t jddd}t jjdd}t jddd}t jddd}t||tj	 ||d	
 }|t | }t||tj	 |d

 }t|j|j t|j|jdd |j}| }	t|	d |dd t|	d |jdd |j|j|jf|	}
t|
j|jdd t|
j|jdd |j }|j }t|j|jdd d S )N` r   r;   r  r  r   r+  r   r   )rG   offsetrk  )rG   rw  r   r   rk  g+=rw  )r/   r  r  r-  r7  uniformr   rW   rX   r[  r   rZ  r   r5   r   nullrV   Z_get_init_kwdsrw  	__class__r[   r   rk  fit_regularized)r9   r[   r   rk  rw  mod1Zoffset2mod2Zmod1_r   mod3Zresr1Zresr2r!   r!   r"   test_offset_exposure  s2     



z)TestGlmPoissonOffset.test_offset_exposurec              	   C   s  t jd t jddd}t jjdd}t jddd}t||tj	 |d	
 }t jjd
d}t jddd}|j||d}|j|d| d}t|d|  | }	|j|d}
|j||d}t|	|
 t|
| t jddd}t|||tj	 d
 }| }|jd|d}|j|d|d}	t|| t||	 t||tj	 d
 }t jddd}tt |j||dd}W 5 Q R X |j|d| dd}t|||  t|j|t|dt jstd S )Nru  r   r;   r  rv  r+  r   r   rj  )r;   r   )r   rk  )rk  )rw  rG   r   )r   rw  )r   r   rw  r   T)r   rw  linearr  )r   rw  r   )r/   r  r  r-  r7  rx  r   rW   rX   r[  r   r   r   r   r   FutureWarningrU   r   r   ndarrayAssertionError)r9   r[   r   rk  r|  Zexog1Z	exposure1r   Zpred2Zpred3Zpred4Zpred5rw  r}  r~  r!   r!   r"   test_predict  sH    





z!TestGlmPoissonOffset.test_predictN)r   r   r   r   r   rt  r  r  r!   r!   r!   r"   rh    s
   
rh  c              	   C   s~   | d d df }| d d d df }||dk }||dk }t |dd}t||tj d}tt |  W 5 Q R X d S )Nr  r   Tr   r   )	r   r   rW   rX   r$  r   r   r   r   )r2   r  r  glmr!   r!   r"   test_perfect_pred  s    r  c                  C   s   ddl m}  tjd d}d}tjjdd|dfd}d|d d df< dtd|jd d  }|||tj	|  }| ||
 }| ||d d d d	f 
 }|j|d
d}t||d d d d	f tj d
 }	|	jj|	j|d d d	d f d}
t|d d d |
d dd d S )Nr   r      r        ?r   r+  r  rT   F)Zdemeanr   r   a   g      Y@r   r   )r   r   r/   r  r  rx  r  r   r   r  r   Zcompare_lm_testr   rW   rX   r   rV   r   r5   r   )r   rf   Zsiger  betar  Zres_olsZres_olsccoZres_glmZco2r!   r!   r"   test_score_test_ols  s    ("r  c                  C   sp   t jj } | j| j }}t ||}t|jj	j
d d|jj	_
t|jj	j
d t ||}t|jj	j
d d S )Nr  r  )rW   Zdatasetsr   r   r[   r   r   r   rG   rH   power)r   r[   r   Z	glm_modelZ
glm_model2r!   r!   r"   "test_attribute_writable_resettable  s    
r  c                   @   s   e Zd Zedd ZdS )TestStartParamsc                 C   s   t | _t| _t| _t | _ddlm} | | _	t
| j	jdd| j	_t| j	j| j	j j}t| j	j| j	jtj dj|d| _ddlm} | | _d	S )
r   r   r   Fr   r   rC  r   r   N)r   rJ   r   r7   r   rz   rA   r   r   r   r   r   rW   r   r[   r   r5   r   rX   r   r4   r   r   r6   )r   r   r5   r   r!   r!   r"   r     s    zTestStartParams.setup_classNr  r!   r!   r!   r"   r    s   r  c                  C   s   t d t} t ddddddg}t | |} t ddddd	d	g|}tj| t|tj	 d
}|j
ddgd}t j|jddgd d S )Nz0 1 0 0 0 12   r   r  r;   r   r  r  r  r   r  g2igF.u/rm  )r/   arraysplitr&  repeatrW   r   r   rX   r$  r   Ztestingr   r5   )y2wtr5  rs  resr!   r!   r"   test_glm_start_params1  s    r  c                     s   t ddddddddddg
t jdt jd  fdd} ddgddgddgfD ]B}tjt tj d}|j	|dd	}| |}t
||j qRd S )
Nr   r   r;   )dtypec                    sR   | d | d    }ddt |   }t t | d t d|   S )Nr   r   )r/   r  r   rZ  )r5   lin_predprr  r  r!   r"   rb   B  s    z test_loglike_no_opt.<locals>.llfr  r   )rC  maxiter)r/   rL  r  float64rW   r   r   rX   r$  r   r   rb   )rb   r5   rs  r  liker!   r  r"   test_loglike_no_opt<  s    r  c                  C   s   dd l m  m}  ddddgdddtjgdgd tjjdddddd	gd
}t|}t	j
jt	j
j d}| jd||j|d}tt|jtjkdd ttjjdd}d|jd< tt| jd|||d ttt|j|ddg ||d d S )Nr   r   r   r;      r   r   r+        ?)FooBarconstantrk  r  rS  z	Foo ~ Bar)r   rk  rG   zExposure is not ndarrayr   r  )r   r  r  r  rk  rG   )Zstatsmodels.formula.apiformulaapir/   rr  r  rx  r   r9  rW   rX   r   r  r  r  rk  r   typer  r   locr   r/  r   r  )Zsmfdr   rG   rs  rk  r!   r!   r"   test_formula_missing_exposureN  s,     


  r  c                 C   s  t jd d}t jj|dfd}|d d df |d d df d  }ddt |   }dt jj|d|k  }tj||tj	 d}|
 }dd l}ddlm}	 d	D ]v}
||
}|	|jd d
d tt| ||
}|	|jd d
d tt| ||
}|	|jd d
d tt| q|||d d df |d d df d}tjjd|tj	 d}|
 }d	D ]}
ddg|
 }||}|	|jd d
d tt| ||}|	|jd d
d tt| ||}|	|jd d
d tt| qld S )Niz  r2  r   r+  r   r   r   )
add_lowessr   r   r  )fracr3  r6  r4  r5  )r/   r  r  r7  r  rx  rW   r   rX   r$  r   pandasZ$statsmodels.graphics.regressionplotsr  Zplot_added_variableZaxesr#   r   Zplot_partial_residualsZplot_ceres_residualsr9  r:  )Zclose_figuresr;  r   r  Zprobr[   rV   resultr   r  jr    r   Zxnamer!   r!   r"   
test_plotse  sD    $




*




r  c           
      C   sl  t jd tj}| | }||jkr|dkrLdt jjt| d|k  }nnt 	t| df}d}t jjt| |fd|d d d f k 
d|d d df< ||d d df  |d d df< n||jkrt j|}n||jkrt jd|}nz||jkr|dt jjt| d  }nR||jkr<ddlm} ||d}n,||jkrddd	lm}	 |	j|d
d}nt|S )Nih  r   r   r+  r   r;   )nbinomr  )invgauss   rR   )r/   r  r  rW   rX   Zinverser$  rx  rl  emptyr   r[  poissonrd   gammar   r7  rY   Zscipy.stats.distributionsr  Zrvsre   r  r/  )
r  family_classrH   binom_versionrW  rI   r[   r;  r  r  r!   r!   r"   	gen_endog  s0    
8"

r  c                  C   s|   t jd d} t jj| dfd}d|d d df< t jj| d}dD ]2}tj }tj|||d}|j|d	}|	 }qDd S )
Ni  r  r   r+  r   r   )irlsZcgr   r  )
r/   r  r  r7  rW   rX   r   r   r   r   )r;  r   r[   r  farV   Zrsltsr!   r!   r"   r     s    
r   c           	         s    j } jj|d dd} fdd}t|d |}t||ddd  jj|dd}t||}t||dd  fd	d}t||}t||dd d S )
Nr   r   rR   c                    s    j j| ddS rn   )rV   rZ   r  r'   r!   r"   <lambda>      z%check_score_hessian.<locals>.<lambda>r
  rD   r   c                    s    j j| ddS rn   )rV   r   r  r  r!   r"   r    r  )r5   rV   r   r   r   r   r   )	r'   r5   ZscZllfuncZsc2ZhessZhess2ZscfuncZhess3r!   r  r"   check_score_hessian  s    

r  c                  C   s  t jd tj} tjj}| j|j|j|j	|j
|jgf| j|j
|j|jgf| j|j
|j|jgf| j|j|j
|jgf| j|j
|j|j|jgf| j|j
|j|j|jgfg}d}d}t jj||fd}d|d d df< d}|D ]\}}|D ]}	dD ]}
|| jkr|
dkrq||	f| j|jfkr6d	|d }n||	f| j|j
fkrbd
|dd  }n||	f| j|jfkrd|d }n||	f| j|j
fkrd
|d }nX||	f| j|jfkrd	d|d  }t |dt j}n||	f| j|jfkrd|dd  }qn||	f| j|jfkrDd|dd  }n||	f| j|jfkr~d	d|d  }t |dt j}n||	f| j|jfkrdt jj|jd d }qnZ||	f| j|jfkrd|dd  }n0||	f| j|jfkrd}nt jj|jd d}t|||	|
}t ( td tj||||	 dd}W 5 Q R X |j dd}||	f| j|jf| j|jf| j|jffkrt!| d|j"fdfD ]"\}}|dkr|rqt ( td tj||||	 dd}W 5 Q R X |j ||ddd}t#|j"|j"ddd t#|j$|j$ddd t#|j%|j%ddd |j&}|j'|j"dd}t (t )t j*+| }t#||j&ddd t#|j&|j&ddd |j dd |j"ddd!}t#|j&|j&ddd qqqqd S )"N.U r  r   r+  r   r   Fr  r  r  rn  r   r  r
  r  r   Trr   rS  r   IRLSr  r   Nr  i,  )max_start_irlsrC  r  r  rC   -C6
?rD   r   皙?eim)r  cov_typerC  r  r  ),r/   r  r  rW   rX   r  r$  rE  ProbitCLogLogr  Cauchyr[  rV  Sqrtrd   r  r   re   InverseSquaredrY   r7  r   clipinfrx  r   r  rs   rt   ru   r   r   r  r5   r   rb   rS   r@   r   sqrtdiaglinalginv)rW  lnkrX   r;  pr   skip_oner  family_linksrH   r  r  r[   mod_irls	rslt_irlsr  rC  mod_gradientrslt_gradientgradient_bseehessZrslt_gradient_eimr!   r!   r"   test_gradient_irls  s    



"



"   
 
  r  c                  C   sR  t jd tj} tjj}| j|j|j|j	|j
|jgf| j|j
|j|jgf| j|j
|j|jgf| j|j|j
|jgf| j|j
|j|j|jgf| j|j
|j|j|jgfg}d}d}t jj||fd}d|d d df< d}|D ]r\}}|D ]b}	dD ]V}
|| jkr|
dkrq||	f| j|jfkr6d	|d }n||	f| j|j
fkrbd
|dd  }n||	f| j|jfkrd|d }n||	f| j|j
fkrd
|d }nX||	f| j|jfkrd	d|d  }t |dt j}n||	f| j|jfkrd|dd  }qn||	f| j|jfkrDd|dd  }n||	f| j|jfkr~d	d|d  }t |dt j}n||	f| j|jfkrdt jj|jd d }qnZ||	f| j|jfkrd|dd  }n0||	f| j|jfkrd}nt jj|jd d}t|||	|
}t ( td tj||||	 dd}W 5 Q R X |j dd}d|j!fdfD ]\}}|dkr|rqht ( td tj||||	 dd}W 5 Q R X |j ||ddd}t"|j!|j!ddd t"|j#|j#ddd t"|j$|j$ddd |j%|j!dd}t &t 't j()| }t"||j*ddd qhqqqd S )Nr  r  r   r+  r   r   Fr  r  r  rn  r   r  r
  r  r   Trr   rS  r   r  r  r  r  r  )r  rC  r  Zoptim_hessianrC   r  rD   r   )+r/   r  r  rW   rX   r  r$  rE  r  r  r  r  r[  rV  r  rd   r  r   re   r  rY   r7  r   r  r  rx  r   r  rs   rt   ru   r   r   r5   r   rb   rS   r   r  r  r  r  r@   )rW  r  rX   r;  r  r   r  r  r  rH   r  r  r[   r  r  r  rC  r  r  r  r  r!   r!   r"   test_gradient_irls_eimH  s     














 
 
 
r  c                  C   s  d\} }t jd t j| |d }t|dd}|dt j|  }t||}| }|jddd}|jd	dd}|j|jd
d}	|||fD ] }
t	|
j
d d t	|
jd qt	|j
d d t	|j
d d t	|j
d d	 tt|jjd tt|jjd t	|	jd
 d S )N)r  r   i r   add)Zhas_constantZpinvT)
wls_methodZ
attach_wlsZqrbfgs)rC  r  Z	optimizerr  r  ZlstsqZ
pinv_wexogZexog_Q)r/   r  r  r  r   r   r   r   r5   r   Zmle_settingsr  r   r   Zresults_wlsrV   )rf   k_varsr  r   r  rs  r4   r6   r(  Zres_g1rr!   r!   r"   test_glm_irls_method  s&    
r  c                   @   s   e Zd ZeZedd Zdd ZeZdd Z	eZ
dd Zd	d
 Zdd Zdd ZeZdd ZeZdd ZeZdd ZeZdd ZdS )CheckWtdDuplicationMixinc                 C   s   t  | _t| jj| j_t| jj| j_| jj| _| jj| _tjd tj	ddt
| j| _t| j| j| _tj| j| jdd| _d S )N  r  r  r   Zaxis)r   r   r   r/   rL  r[   r   r  r  r-  rl  weightr  	endog_bigexog_bigr   r!   r!   r"   r     s    


z$CheckWtdDuplicationMixin.setup_classc                 C   s   t | jj| jjddd d S NrC   r=   r   r4   r5   r6   r8   r!   r!   r"   r:     s    z$CheckWtdDuplicationMixin.test_paramsc                 C   s   t | jj| jjddd d S )Nr<   rC   rD   r   r4   r@   r6   r8   r!   r!   r"   rB     s    z-CheckWtdDuplicationMixin.test_standard_errorsc                 C   s   t | jj| jjddd d S r  )r   r4   r_   r6   r8   r!   r!   r"   test_aic  s    z!CheckWtdDuplicationMixin.test_aicc                 C   s   t | jj| jjddd d S r  r   r4   ri   r6   r8   r!   r!   r"   rk     s    z&CheckWtdDuplicationMixin.test_deviancec                 C   s   t | jj| jjddd d S r  )r   r4   rS   r6   r8   r!   r!   r"   rm     s    z#CheckWtdDuplicationMixin.test_scalec                 C   s   t | jj| jjd d S )NrC   )r   r4   rb   r6   r8   r!   r!   r"   rp     s    z%CheckWtdDuplicationMixin.test_loglikec              	   C   s<   t  * t dt t| jj| jjddd W 5 Q R X d S Nrr   rC   r=   )rs   rt   ru   r   r   r4   rv   r6   r8   r!   r!   r"   rx     s    
z+CheckWtdDuplicationMixin.test_null_deviancec              	   C   s:   t  ( t d t| jj| jjddd W 5 Q R X d S r  )rs   rt   ru   r   r4   ry   r6   r8   r!   r!   r"   r{      s    

z!CheckWtdDuplicationMixin.test_bicc                 C   s*   | j | jjj}t| jj|ddd d S Nr<   r=   )r6   r   r4   rV   r   r   r~   )r9   Zres2_fittedr!   r!   r"   r   '  s    z*CheckWtdDuplicationMixin.test_fittedvaluesc                 C   sP   t | jj| jjddd t | jj| jjddd t | j | j ddd d S )NrC   g-C6*?r=   )r   r4   r   r6   r   r   r8   r!   r!   r"   r   .  s    z&CheckWtdDuplicationMixin.test_tpvaluesN)r   r   r   r   r7   r   r   r:   rA   rB   rJ   r  rk   rm   rp   rw   rx   rz   r{   r   r   Zdecimal_tpvaluesr   r!   r!   r!   r"   r    s&   
	r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmPoissonc                    sn   t t|   t| j| _t| j| _t| j| j| jt	j
 d | _t| j| jt	j
 d | _dS )?
        Tests Poisson family with canonical log link.
        r]   rG   r   N)superr  r   r/   rL  r[   r   r   r  rW   rX   r[  r   r4   r  r  r6   r  rz  r!   r"   r   ;  s    

zTestWtdGlmPoisson.setup_classr   r   r   r   r   __classcell__r!   r!   r  r"   r  9  s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmPoissonNewtonc                    s   t t|   tddddddg}tdd}t| j| j| j	t
j d	jf || _td|d
}t| j| jt
j djf || _dS )r  y\%'?8:QiKsFS'3I.+@084r  r  r  )r  rC  r   N)r  r  r   r/   r  dictr   r[   r   r  rW   rX   r[  r   r4   r  r  r6   r   rC  fit_kwdsr  r!   r"   r   L  s(      


z#TestWtdGlmPoissonNewton.setup_classr  r!   r!   r  r"   r  K  s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmPoissonHC0c                    s   t t|   tddddddg}tdd}t| j| j| j	t
j d	jf || _td|d
}t| j| jt
j djf || _dS )r  r  r  r  r  r  r  ZHC0)r  r  )r  rC  r   N)r  r  r   r/   r  r  r   r[   r   r  rW   rX   r[  r   r4   r  r  r6   r	  r  r!   r"   r   a  s(      


z TestWtdGlmPoissonHC0.setup_classr  r!   r!   r  r"   r  `  s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmPoissonCluc              	      s   t t|   tddddddg}tdt| jd d }td	|d
dd}ddl	}|
  |d t| j| j| jtj djf || _t|| j}td	|d
dd}t| j| jtj djf d|i|| _W 5 Q R X dS )r  r  r  r  r  r  r  r   r   ZclusterF)groupsZuse_correction)r  Zcov_kwdsr   Nrr   r  r   rC  )r  r  r   r/   r  r  rl  r[   r  rs   rt   ru   r   r   r  rW   rX   r[  r   r4   r  r  r  r6   )r   rC  gidr
  rs   Zgidrr  r!   r"   r   w  s6      




z TestWtdGlmPoissonClu.setup_classr  r!   r!   r  r"   r  v  s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmBinomialc                    sj   t t|   | jd | _| jd | _t| j| j| jtj	
 d | _t| j| jtj	
 d | _dS )zB
        Tests Binomial family with canonical logit link.
        r  r  r   N)r  r  r   r[   r  r   r   r  rW   rX   r$  r   r4   r  r6   r  r  r!   r"   r     s    

zTestWtdGlmBinomial.setup_classr  r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmNegativeBinomialc              	      s   t t|   d}t d tjdtd tjj	tjj
j	|d|d}t| j| j| j|d | _t| j| j|d | _W 5 Q R X dS )	zh
        Tests Negative Binomial family with canonical link
        g(p) = log(p/(p + 1/alpha))
        r  rr   re  )alpha)rH   r  r  r   N)r  r  r   rs   rt   ru   r   rW   rX   rY   r  r   r[   r   r  r   r4   r  r  r6   )r   r  family_linkr  r!   r"   r     s    


z&TestWtdGlmNegativeBinomial.setup_classr  r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmGammac                    sZ   t t|   tjtjj }t| j	| j
| j|d | _t| j| j|d | _dS )3
        Tests Gamma family with log link.
        r  r   N)r  r  r   rW   rX   rd   r  r  r   r[   r   r  r   r4   r  r  r6   r   r  r  r!   r"   r     s    

zTestWtdGlmGamma.setup_classr  r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmGaussianc                    sZ   t t|   tjtjj }t| j	| j
| j|d | _t| j| j|d | _dS )z6
        Tests Gaussian family with log link.
        r  r   N)r  r  r   rW   rX   r   r  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r     s    

zTestWtdGlmGaussian.setup_classr  r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmInverseGaussianc                    sZ   t t|   tjtjj }t| j	| j
| j|d | _t| j| j|d | _dS )z=
        Tests InverseGaussian family with log link.
        r  r   N)r  r  r   rW   rX   re   r  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r     s    

z%TestWtdGlmInverseGaussian.setup_classr  r!   r!   r  r"   r    s   r  c                       s(   e Zd Ze fddZdd Z  ZS )TestWtdGlmGammaNewtonc                    sb   t t|   tjtjj }t| j	| j
| j|djdd| _t| j| j|djdd| _dS )r  r  r  r  r   N)r  r  r   rW   rX   rd   r  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r     s    

z!TestWtdGlmGammaNewton.setup_classc              	   C   sH   t jt jj }tjtdd t| j	| j
|| jd W 5 Q R X d S )Nzunknown kwargsr   )rG   weights)rW   rX   rd   r  r  r   r   r   r   r[   r   r  )r9   r  r!   r!   r"   test_init_kwargs  s
    z&TestWtdGlmGammaNewton.test_init_kwargs)r   r   r   r   r   r  r   r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdGlmGammaScale_X2c                    sb   t t|   tjtjj }t| j	| j
| j|djdd| _t| j| j|djdd| _dS )r  r  ZX2rR   r   N)r  r  r   rW   rX   rd   r  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r     s    

z#TestWtdGlmGammaScale_X2.setup_classr  r!   r!   r  r"   r    s   r  c                       s(   e Zd Ze fddZdd Z  ZS )TestWtdGlmGammaScale_devc                    sb   t t|   tjtjj }t| j	| j
| j|djdd| _t| j| j|djdd| _dS )r  r  devrR   r   N)r  r  r   rW   rX   rd   r  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r     s    

z$TestWtdGlmGammaScale_dev.setup_classc                 C   s   | j j }| j j }tj|d< tj|ddddg< | j}t||| jj	j
|dd}t|jjd |jjd  t|jjd |jjd  td	d
ddddddddddg}t|j| j|  d S )Nr   r   r   r   rm  rn  ro  )rG   r]   rp  r   r   r   r  rH  rG  r;         rq           )r   r[   rE   r   r/   rr  r  r   r4   rV   rG   r   r]   r   r  )r9   r[   r   r]   mod_misisngZkeep_idxr!   r!   r"   rt  #  s"    
 

"z%TestWtdGlmGammaScale_dev.test_missing)r   r   r   r   r   rt  r   r!   r!   r  r"   r    s   r  c                       s    e Zd Ze fddZ  ZS )TestWtdTweedieLogc                    s^   t t|   tjjtjj dd}t| j	| j
| j|d | _t| j| j|d | _dS )zE
        Tests Tweedie family with log link and var_power=1.
        r   rH   	var_powerr  r   N)r  r%  r   rW   rX   Tweedier  r  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r   4  s    

zTestWtdTweedieLog.setup_classr  r!   r!   r  r"   r%  3  s   r%  c                   @   s   e Zd Zedd ZdS )TestWtdTweediePower2c                 C   s   t  | _| jj| _| jjddg | _tjd tjddt	| j| _
t| jj| j
| _tj| jj| j
dd| _tjj }tjj|dd	}t| j| j| j
|d
 | _t| j| j|d | _dS )zJ
        Tests Tweedie family with Power(1) link and var_power=2.
        INCOMESOUTHr  r  r  r   r  r   r&  r  r   N)r   load_pandasr   r[   r   r/   r  r  r-  rl  r  r  r   r  r  rW   rX   r  Powerr(  r   r   r4   r6   )r   rH   r  r!   r!   r"   r   D  s     



z TestWtdTweediePower2.setup_classNr  r!   r!   r!   r"   r)  C  s   r)  c                       s    e Zd Ze fddZ  ZS )TestWtdTweediePower15c                    s`   t t|   tjjtjjddd}t| j	| j
| j|d | _t| j| j|d | _dS )zN
        Tests Tweedie family with Power(0.5) link and var_power=1.5.
        r  r  r&  r  r   N)r  r.  r   rW   rX   r(  r  r-  r   r[   r   r  r   r4   r  r  r6   r  r  r!   r"   r   Z  s    

z!TestWtdTweediePower15.setup_classr  r!   r!   r  r"   r.  Y  s   r.  c                  C   s  dd l } t }tj|jdd|_tj|jdd|_tj|jd< tj|jddddg< | j|j|j	d	|_ |j|j d
< t
dt|jd }d}tj||j |d}t|jjd |jjd  t|jjd |jjd  t|jjd d tddddddddddddg}t|j| d S )Nr   r   r   r  r   r   rm  rn  )columnsZ
EXECUTIONSr   zXEXECUTIONS ~ INCOME + PERPOVERTY + PERBLACK + VC100k96 +
                 SOUTH + DEGREE)r   r]   r   r;   r  rq  r!  r"  r#     )r  r   r   r/   r   r[   r   rr  r9  Z	exog_namer  rl  r   r:  r   r]   r   r  )r   r   r  r  r$  Zkeep_weightsr!   r!   r"   test_wtd_patsy_missingi  s,    


"r1  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )CheckTweediec                 C   sd  t | jjd }t | jjd }tt| jjd d | jj| gft| jjd d | jj| gfddd tt| jjd d | jj| gft| jjd d | jj| gfddd tt| jjd d | jj| gft| jjd d | jj| gfddd tt| jj	d d | jj	| gft| jj	d d | jj	| gfddd d S )Nr   r0  r<   rD   )
rl  r4   rP   r6   r   r/   concatenaterM   rN   rO   r9   Zidx1Zidx2r!   r!   r"   
test_resid  sL        zCheckTweedie.test_residc                 C   s   t | jj| jjddd d S )NrC   g    .Ar=   r  r8   r!   r!   r"   test_bse  s    zCheckTweedie.test_bsec                 C   s   t | jj| jjddd d S r  r  r8   r!   r!   r"   r:     s    zCheckTweedie.test_paramsc                 C   s   t | jj| jjddd d S r  r  r8   r!   r!   r"   rk     s    zCheckTweedie.test_deviancec                 C   s(   t | jj| jj t | jj| jj d S r   )r   r4   r^   r6   r|   r8   r!   r!   r"   test_df  s    zCheckTweedie.test_dfc                 C   st   t | jjd }t | jjd }tt| jjd d | jj| gft| jjd d | jj| gfddd d S )Nr   r0  r
  r=   )rl  r4   r~   r6   rP   r   r/   r3  r4  r!   r!   r"   r     s     zCheckTweedie.test_fittedvaluesc                 C   s   | j   | j   d S r   )r4   r   r   r8   r!   r!   r"   r     s    
zCheckTweedie.test_summaryN)
r   r   r   r5  r6  r:   rk   r7  r   r   r!   r!   r!   r"   r2    s   	r2  c                   @   s   e Zd Zedd ZdS )TestTweediePower15c                 C   s~   ddl m} t | _| jjddg | _| jj| _tjj	tjj
ddd}tj| jj| jjddg |d | _| | _d S )Nr   )CpunishTweediePower15r*  r+  r  r&  r[   r   rG   )r   r9  r   r,  r   r   r[   rW   rX   r(  r  r-  r   r   r4   r6   )r   r9  r  r!   r!   r"   r     s    


zTestTweediePower15.setup_classNr  r!   r!   r!   r"   r8    s   r8  c                   @   s   e Zd Zedd ZdS )TestTweediePower2c                 C   s~   ddl m} t | _| jjddg | _| jj| _tjj	tjj
ddd}tj| jj| jjddg |d | _| | _d S )Nr   )CpunishTweediePower2r*  r+  r  r&  r:  )r   r<  r   r,  r   r   r[   rW   rX   r(  r  r-  r   r   r4   r6   )r   r<  r  r!   r!   r"   r     s    


zTestTweediePower2.setup_classNr  r!   r!   r!   r"   r;    s   r;  c                   @   s   e Zd Zedd ZdS )TestTweedieLog1c                 C   s|   ddl m} t | _| jjddg | _| jj| _tjj	tjj
 dd}tj| jj| jjddg |d | _| | _d S )Nr   )CpunishTweedieLog1r*  r+  r  r&  r:  )r   r>  r   r,  r   r   r[   rW   rX   r(  r  r  r   r   r4   r6   )r   r>  r  r!   r!   r"   r     s    


zTestTweedieLog1.setup_classNr  r!   r!   r!   r"   r=    s   r=  c                   @   s   e Zd Zedd ZdS )TestTweedieLog15Fairc                 C   sf   ddl m} ddlm} | }tjjtjj dd}tj	|j
|jddd	g |d
 | _| | _d S )Nr   )r,  r   )FairTweedieLog15r  r&  Zrate_marriageZageZyrs_marriedr:  )Zstatsmodels.datasets.fairr,  r   r@  rW   rX   r(  r  r  r   r[   r   r   r4   r6   )r   r,  r@  r   r  r!   r!   r"   r     s    z TestTweedieLog15Fair.setup_classNr  r!   r!   r!   r"   r?    s   r?  c                   @   s   e Zd Zdd Zdd ZdS )CheckTweedieSpecialc                 C   s   t | jj| jjddd d S Nr<   rD   )r   r4   rI   r6   r8   r!   r!   r"   test_mu  s    zCheckTweedieSpecial.test_muc                 C   s|   t | jj| jjddd t | jj| jjddd t | jj| jjddd t | jj| jjddd t | jj| jjddd d S rB  )r   r4   rP   r6   rM   rN   rO   rK   r8   r!   r!   r"   r5    s*         zCheckTweedieSpecial.test_residN)r   r   r   rC  r5  r!   r!   r!   r"   rA    s   rA  c                   @   s   e Zd Zedd ZdS )TestTweedieSpecialLog0c                 C   s   t  | _| jjddg | _| jj| _tjjtjj	 d}tj
| jj| jjddg |d | _tjjtjj	 dd}tj
| jj| jjddg |d | _d S )Nr*  r+  rS  r:  r   r&  )r   r,  r   r   r[   rW   rX   r   r  r  r   r   r4   r(  r6   r   Zfamily1Zfamily2r!   r!   r"   r     s    



z"TestTweedieSpecialLog0.setup_classNr  r!   r!   r!   r"   rD    s   rD  c                   @   s   e Zd Zedd ZdS )TestTweedieSpecialLog1c                 C   s   t  | _| jjddg | _| jj| _tjjtjj	 d}tj
| jj| jjddg |d | _tjjtjj	 dd}tj
| jj| jjddg |d | _d S )Nr*  r+  rS  r:  r   r&  )r   r,  r   r   r[   rW   rX   r[  r  r  r   r   r4   r(  r6   rE  r!   r!   r"   r     s    



z"TestTweedieSpecialLog1.setup_classNr  r!   r!   r!   r"   rF    s   rF  c                   @   s   e Zd Zedd ZdS )TestTweedieSpecialLog2c                 C   s   t  | _| jjddg | _| jj| _tjjtjj	 d}tj
| jj| jjddg |d | _tjjtjj	 dd}tj
| jj| jjddg |d | _d S )Nr*  r+  rS  r:  r   r&  )r   r,  r   r   r[   rW   rX   rd   r  r  r   r   r4   r(  r6   rE  r!   r!   r"   r   *  s    



z"TestTweedieSpecialLog2.setup_classNr  r!   r!   r!   r"   rG  )  s   rG  c                   @   s   e Zd Zedd ZdS )TestTweedieSpecialLog3c                 C   s   t  | _| jjddg | _| jj| _tjjtjj	 d}tj
| jj| jjddg |d | _tjjtjj	 dd}tj
| jj| jjddg |d | _d S )Nr*  r+  rS  r:  r   r&  )r   r,  r   r   r[   rW   rX   re   r  r  r   r   r4   r(  r6   rE  r!   r!   r"   r   ;  s    



z"TestTweedieSpecialLog3.setup_classNr  r!   r!   r!   r"   rH  :  s   rH  c                 C   s   t jd d}t jj|dfd}t |t jd }t |}d|d|    d|   }d|  | d  }d|d|    | d  }t |}t j|}	t	|D ](}
t j
|d||
  |	|
  ||
< q||fS )	N    r   r+  r   r  r   r  r;   r   r   )r/   r  r  r7  r   r_r  r  r  rJ  r  r   )r  r;  r  lprrI   lamalpbetr  Nir!   r!   r"   gen_tweedieJ  s    

&rS  zignore:GLM ridge optimizationc                  C   s  d} t | \}}tjj| dd}tj|||d}|jdd}t|jt	ddd	d
gddd tj|||d}|jdd}t|j|j t|j
|j
dd tj|||d}|jddddd}	d\}
}t|	jt	ddddg|
|d t	ddddgt	dddd gt	d!d"d#d$gf}td%d&d'gD ]\}}tj|||d}|jd(|d)}t|j|| |
|d |jd(|t|jd  d)}t|j|j|
|d |t|jd  }d(|d(< |jd(|d)}t|j|jr$tq$d S )*Nr  Tr'  eqlr   r  r  g`8:[?g%gcxp?g
m:?r<   rD   r  {Gz?r   r   gQ?r2  )L1_wtr  r  Z	cnvrg_tol)rV  r
  g3B?g}        gv!H?g=^H?gYngmJR?g@Qٰ2?gm7?g	mg~5I$~?gbX:z?gCl?g(Gſg!J.?gl"3<?r   r  gffffff?r   rW  r  )rS  rW   rX   r(  r   r   r   r5   r/   r  r@   r{  	enumerater  r   allcloser  )r  r  r  rW  model1result1Zmodel1xZresult1xmodel2result2r?   r>   Zevr  r  Zmodel3Zresult3Zresult4Zresult5r!   r!   r"   test_tweedie_EQL]  sL     
 r`  c                  C   s   d} t | \}}tjj| dd}tj|||d}g }tdddD ],}|jd|d	}|t	|j
dk  qBt|}t|d
kstd S )Nr  TrT  r   r   r;   r  r  rY  r  )rS  rW   rX   r(  r   r/   Zlinspacer{  appendr   r5   r   uniquerl  r  )r  r  r  rW  r\  Znnzr  r]  r!   r!   r"   test_tweedie_elastic_net  s    
rc  c                  C   s   t jd d} t jj| dfd}d|d d df< d|d d dd f d }t |}t j|}dD ]|}tjj	dd	d
}tj
|||d}|jd|d}tj
||tj d}	|	jd|d}
t|j|
jddd t|j|
jdd qjd S )NrI  rJ  r   r+  r   r   r   )r  r5  r  TrT  r   r  r  rS   rC   r=   )r/   r  r  r7  r   r  r  rW   rX   r(  r   r   r[  r   r5   r@   )r;  r  rM  mnr  rS   rW  r\  r]  r^  r_  r!   r!   r"   test_tweedie_EQL_poisson_limit  s    
rf  c            	      C   s   t jd d} t jj| dfd}d|d d df< d|d d dd f d }t |}t j|}dD ]J}tjj	d	d
d}tj
|||d}|jd|d}t|jt jd ddd qjd S )NrI  rJ  r   r+  r   r   r   )r5  r  r  r   TrT  r   r  rd  )r   r   r   r  r   r=   )r/   r  r  r7  r   r  r  rW   rX   r(  r   r   r   r5   rL  )	r;  r  rM  re  r  rS   rW  r\  r]  r!   r!   r"   test_tweedie_EQL_upper_limit  s    
rg  c                  C   s   t  } ddddddddd	d
dddddddg}tj|| jddg tjjtjj ddd}|	 }tj||j
 d ttt|j
t|j
ftjtjj d}|	 }||j
}t||jd dd d S )Ng(\q@gC@gQ,D@g̒$@gl ]l@go@g<m%@gcv7ˌ@g~Ӥ?g"?gQ75>g ;#Pg>geҞ>rX  r*  r+  r  r&  r   r   r   g      ?r   )r   r,  rW   r   r   rX   r(  r  r  r   rI   r/   rL   r  rl  rZ  rd   Zestimate_tweedie_powerr   r5   )r   r  r\  r4   r^  r6   r  r!   r!   r"   testTweediePowerEstimate  s<              rh  c            
   	   C   s   t jd ddlm}  d}t |df}t d||d d df< d|d d df  t jdd| }t jd }d	D ]`}| t	fD ]R}d
D ]H}|||}|| kr|j
d|d}	n|jdd |d}	t||	jddd qqqtd S )N{   r   r   r  r   r   r*  )gK1]>@gZY@?)r  N)r   r   )r  rW  )r  rC  r  rC   r=   )r/   r  r  r   r   r  r  r7  rL  r   r{  Z
_fit_ridger   r5   )
r   r;  r  r  r5   r  ZfunZ
L1_wtValuerV   r   r!   r!   r"   test_glm_lasso_6431  s    $

rj  c                   @   s   e Zd Zdd ZdS )TestRegularizedc                    s8  dd l }ddlm} dD ]}|j|jt}tj|j	|dd| dd}|d d df |d d dd f }t
jjt
jjd| }td	D ]}d
||f }	t||	}
|
d  |
d |
dd  }t|| dj d}t||jddd  fdd}||}||j}tt|| d qqd S )Nr   r   )glmnet_r_results)Zbinomialr  r'   zenet_%s.csvr(   )r)   rG  z
rslt_%s_%dr   r   rY  rV  g333333?r=   c              	      sL    | t }|d  t| d  d  tt|     }|S )Nr   r   )rZ   rl  r/   r   r   )r5   rb   rW  r  r[   rV   r!   r"   plf?	  s    6z-TestRegularized.test_regularized.<locals>.plf)r*   r'   rl  r+   r,   r-   r.   r/   Zloadtxtr0   rW   rX   r$  r[  rJ  r   r   r{  r   r5   r   sign)r9   r*   rl  r  r1   r   r   rW  r  ZvnZr_resultr5   Z	sm_resultrn  Zllf_rZllf_smr!   rm  r"   test_regularized	  s6    


z TestRegularized.test_regularizedN)r   r   r   rp  r!   r!   r!   r"   rk  	  s   rk  c                   @   sR   e Zd Zedd ZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )TestConvergencec                 C   s@   ddl m} | }t|jdd|_t|j|jtj d| _	dS )r!  r   r   Fr   r   N)
r#  r   r   r   r   r[   rW   rX   r$  rV   )r   r   r   r!   r!   r"   r   K	  s    
zTestConvergence.setup_classr   r   ri   c                 C   sd   t | jj| D ]F\}}| jj| | }| jj| |d  }tj||||dr|  S qtdd S )Nr   r=   z2CONVERGENCE CHECK: It seems this doens't converge!)rZ  r  fit_historyr/   r[  r/  )r9   r>   r?   tol_criterionrR  r  orignewr!   r!   r"   _when_convergedV	  s    
zTestConvergence._when_convergedc                 C   s\   d}d}| j j||d| _| j||d}| jjd }t|| tt| jjd d | d S )Nr   r   r=   	iterationri   r   rV   r   r  rv  rr  r   rl  r9   r>   r?   Zexpected_iterationsZactual_iterationsr!   r!   r"   test_convergence_atol_only^	  s    
z*TestConvergence.test_convergence_atol_onlyc                 C   s\   d}d}| j j||d| _| j||d}| jjd }t|| tt| jjd d | d S )Nr   r   r=   rw  ri   r   rx  ry  r!   r!   r"   test_convergence_rtol_onlyl	  s    
z*TestConvergence.test_convergence_rtol_onlyc                 C   s\   d}d}| j j||d| _| j||d}| jjd }t|| tt| jjd d | d S )Nr   r=   rw  ri   r   rx  ry  r!   r!   r"   test_convergence_atol_rtolz	  s    
z*TestConvergence.test_convergence_atol_rtolc                 C   s`   d}d}| j j||dd| _| j||dd}| jjd }t|| tt| jjd d | d S )Nr   r   r5   r>   r?   rs  rw  ri   r   rx  ry  r!   r!   r"   !test_convergence_atol_only_params	  s    
z1TestConvergence.test_convergence_atol_only_paramsc                 C   s`   d}d}| j j||dd| _| j||dd}| jjd }t|| tt| jjd d | d S )Nr   r   r5   r}  rw  ri   r   rx  ry  r!   r!   r"   !test_convergence_rtol_only_params	  s    
z1TestConvergence.test_convergence_rtol_only_paramsc                 C   s`   d}d}| j j||dd| _| j||dd}| jjd }t|| tt| jjd d | d S )Nr   r5   r}  rw  ri   r   rx  ry  r!   r!   r"   !test_convergence_atol_rtol_params	  s    
z1TestConvergence.test_convergence_atol_rtol_paramsN)r   r   ri   )r   r   r   r   r   rv  rz  r{  r|  r~  r  r  r!   r!   r!   r"   rq  J	  s   


rq  c                  C   sX  t jd d\} }tt j| |}t |d}t jj|| d}tj	||d d d d f tj
j d}| }|j}|j}|j||d |j||j d }	t||d  dd	 t||	dd	 tj	||d d dd f tj
j d}
|
 }|j}|j}|j||d |j||j d }	t||d  dd	 t||	dd	 d S )
NiS )r  r   r   r+  r   r   r   g-q=r   )r/   r  r  rW   r   r  r  r   r  r   ZgenmodrX   r[  r   rN   ri   rG   rZ   r~   r   )rf   r  r  Zmu_truer  rs  r  Zd_ir  lrZmod_ncZres_ncr!   r!   r"   test_poisson_deviance	  s6    ((r  c               	   C   sj   t  } d| jd d < t B td tj| j| jtj	
 d}|jdddd}|  W 5 Q R X d S )Nr   rr   r   r  r   )r  r  r  )r   r,  r[   rs   rt   ru   rW   r   r   rX   rd   r   r   r   rs  r  r!   r!   r"   )test_non_invertible_hessian_fails_summary	  s    

r  c                  C   sT   t  } t| j| jtj d}|jdd}t	|j
tjs>t|jjtjksPtd S )Nr   r   rR   )r   r   r   r[   r   rW   rX   r   r   rU   r5   r   r   r  rS   r  r/   r  r  r!   r!   r"   test_int_scale	  s
    r  r  c           
      C   sx   d\}}}}||g}t ddgddgg| }t ||g}t|||tj d}|jddd}	t|	j	t j
sttd S )N)<   g    "@   gffff@r   r   r  r  )r  r  )r/   rL  r%  r   rW   rX   r[  r   rU   r5   r  r  )
r  Zcount1Zn1Zcount2Zn2r  r  rk  rs  r  r!   r!   r"   test_int_exog	  s    r  c                 C   s   t jt d| dd d df f }t | dd df t j}|d8 }td t||tj	
 d }t|jddd	 t|jddd	 td
 t|j|jdd	 td  d S )Nr  r  r   r   Tr   g6<RvA@r   )decimalF)r/   r  r  r  r%  int32r   r   rW   rX   r$  r   r   ry   Zbic_llfZbic_deviancer2   r  r  rV   r!   r!   r"   test_glm_bic	  s    $r  c              	   C   s   t jt d| dd d df f }t | dd df t j}|d8 }t||tj	 d
 }tjtdd t|jtstW 5 Q R X d S )Nr  r  r   r   r   zThe bicr   )r/   r  r  r  r%  r  r   rW   rX   r$  r   r   r   r  rU   ry   r   r  r  r!   r!   r"   test_glm_bic_warning
  s    $r  c                    s   dd t dD }tjd  jdddd} fddt||D }t|}t|||tj	
 d	 }t||d d df |tj	
 d	 }t||d d df tj	
 d
 }t|j|j t|j|j dkstd S )Nc                 S   s   g | ]}t |d  d qS )r  r   )r/   sin).0rR  r!   r!   r"   
<listcomp>
  s     z-test_output_exposure_null.<locals>.<listcomp>r*  r   r  r2  r+  c                    s$   g | ]\}}t  j||d qS )r+  )r/   r   r  )r  r  ersr!   r"   r  
  s     )r[   r   rk  rG   r:  r   )rJ  r/   r  ZRandomStater-  zipr   r   rW   rX   r[  r   r   Zllnullrb   r   r  )r0  Zx0rk  r  r  rV   Z
null_modelZnull_model_without_exposurer!   r  r"   test_output_exposure_null
  s0       
   
  
r  c                  C   s   dd l } ttdtdf}dgd dgd  }ddddd	d
ddddddg}t|||d}d
|d  |d< |d |d< |ddg j}| jd|dd}t||t	j
 d}| }d}	|jd|	d}
t|
dddd |jd|	dd}t|dddd d S )Nr   rm  MFr;   r   rG  r      r  r   r#  )ldosesexnumdeadr  ZnumaliveZSFz	sex*ldoseZ	dataframe)r   return_typer   g8 "5M@qaic)critrS   g|y!=@r<   rD   r   )r  rS   Z	dk_paramsg|y!?@)patsyr/   r3  r  r   r9  r   Zdmatrixr   rW   rX   r$  r   Zinfo_criteriar   )r  r  r  r  r   r  r  r   r  rS   r  Zqaic1r!   r!   r"   	test_qaic)
  s     r  c                     s  t jd d} t jj| dfd}t |t jd }t |}d}d|d|   d|  }d| |d	  }d|d	|   |d	  }t | }t j|}	t	| D ](}
t j
|d	||
  |	|
  ||
< qd
D ]}dD ]}|dkrtrtd tjj||d}t|||d   }|jdt jj|jjd  }t| fdd} j|d	d}t||ddd t| fdd} j|d	d}t||ddd qqd S )NrI  rJ  r   r+  rK  r  r;   r   r   )TF)r   r  r   Fz%skip, scipy too old, no bessel_wrightrT  r   r  c                    s    j | ddS rn   rZ   r  rV   r!   r"   r  a
  r  z$test_tweedie_score.<locals>.<lambda>rR   r   r=   c                    s    j | ddS rn   r  r  r  r!   r"   r  e
  r  gHj>)r/   r  r  r7  r   rL  r  r  r  rJ  r  r   r
   r   r   rW   rX   r(  r   r   r5   r,  r   r   r   r   r   )r;  r  rM  rI   Zp0rN  rO  rP  r  rQ  rR  rU  r  rW  r  paZngradZagradZnhessZahessr!   r  r"   test_tweedie_scoreE
  s6    

&
r  )r   )r   r*   rs   Znumpyr/   Znumpy.testingr   r   r   r   r   r   r  r   Zpandas.testingr   r   Zscipyr	   Zstatsmodels.apir  rW   Zstatsmodels.compat.scipyr
   Zstatsmodels.datasetsr   r   Zstatsmodels.discreter   rD  Z+statsmodels.genmod.generalized_linear_modelr   r   Zstatsmodels.tools.numdiffr   r   r   r   Zstatsmodels.tools.sm_exceptionsr   r   r   Zstatsmodels.tools.toolsr   r   r   r   r  r   r   Zmatplotlib.backends.backend_pdfr   r   r#   r%   Zfixturer2   r3   r   r   r  r  r  r   r?  rO  rQ  rT  rX  r\  r^  ra  rd  rh  r  r  r  r  r  r  r  r   Z
matplotlibr  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r)  r.  r1  r2  r8  r;  r=  r?  rA  rD  rF  rG  rH  rS  filterwarningsr`  rc  rf  rg  rh  rj  rk  rq  r  r  r  ZparametrizeZint8Zint16r  Zint64r  r  r  r  r  r  r!   r!   r!   r"   <module>   s    


 E=EeI!7i
,
"
qrb 8

0+.l!	
	