U
    Ãmœd˜’ ã                   @   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„ ƒZSd¶dNdO„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 d€d�„ d�elƒZnG d‚dƒ„ dƒelƒZoG d„d…„ d…elƒZpG d†d‡„ d‡ƒZqG dˆd‰„ d‰eqƒZrG dŠd‹„ d‹eqƒZsG dŒd�„ d�eqƒZtG dŽd�„ d�eqƒZud�d‘„ ZvejQ wd’¡d“d”„ ƒZxd•d–„ Zyd—d˜„ Zzd™dš„ Z{d›dœ„ Z|d�dž„ Z}G dŸd „ d ƒZ~G d¡d¢„ d¢ƒZd£d¤„ Z€d¥d¦„ Z�d§d¨„ Z‚ejQ ƒd©ej„ej…ej†ej‡g¡dªd«„ ƒZˆd¬d­„ Z‰d®d¯„ ZŠd°d±„ Z‹d²d³„ ZŒd´dµ„ Z�d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!   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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)Ú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
     ÿr3   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   r5   Úbser7   Údecimal_bser9   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?   )Úcopyr7   Úresidsr5   ÚfamilyÚlinkZderivÚmuÚdecimal_residsÚresid_anscombe_unscaledr0   Úcolumn_stackÚresid_pearsonÚresid_devianceÚresid_workingÚresid_responser   )r:   rF   Zresid2r?   Zresid_arG   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éþÿÿÿ)r5   rT   Ú
isinstanceÚmodelrH   ÚsmÚfamiliesÚNegativeBinomialÚloglikeÚendogrJ   Úvar_weightsÚfreq_weightsÚdf_modelÚaicr   r7   Úaic_RÚdecimal_aic_R)r:   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   rS   rU   r   )rV   r5   rW   rH   rX   rY   ÚGammaÚInverseGaussianrZ   r[   r\   rJ   r]   r^   r_   Únobsr`   r   r7   Z	aic_StataÚdecimal_aic_Stata)r:   rc   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   r5   Údeviancer7   Údecimal_deviancer9   r!   r!   r"   Útest_deviance�   s    ÿz$CheckModelResultsMixin.test_deviancec                 C   s   t | jj| jj| jƒ d S r   )r   r5   rT   r7   Údecimal_scaler9   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   rS   )rV   r5   rW   rH   rX   rY   re   rf   rZ   r[   r\   rJ   r]   r^   rc   r   r7   Údecimal_loglike)r:   rc   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   r5   Únull_deviancer7   Údecimal_null_deviancer9   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 rr   )	rt   ru   rv   r   r5   Úbicr7   Z	bic_StataÚdecimal_bicr9   r!   r!   r"   Útest_bic²   s    

þzCheckModelResultsMixin.test_bicc                 C   s   t | jjj| jjƒ d S r   )r   r5   rW   Údf_residr7   r9   r!   r!   r"   Útest_degrees¹   s    z#CheckModelResultsMixin.test_degreesc                 C   s   t | jj| jj| jƒ d S r   )r   r5   Úfittedvaluesr7   Údecimal_fittedvaluesr9   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š™™™™™™?)r5   r6   rA   r	   ZnormZsfr0   ÚabsZisfrM   rV   ÚpdÚSeriesr   Útvaluesr   ÚpvaluesÚconf_int)r:   r6   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_chi2rD   r>   )Úhasattrr7   r   r5   r‰   r9   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Ú	prsquaredÚmcf)Úkindçš™™™™™©?©r@   Úprsquared_cox_snellÚcs)rŠ   r7   r   r5   Zpseudo_rsquaredrŒ   Úfloatr‘   r9   r!   r!   r"   Útest_prsquaredÕ   s     ÿ ÿz%CheckModelResultsMixin.test_prsquaredc                 C   s   | j  ¡  d S r   )r5   Úsummaryr9   r!   r!   r"   Útest_summaryÞ   s    z#CheckModelResultsMixin.test_summaryc              	   C   s.   t  ¡ � t  dt¡ | j ¡  W 5 Q R X d S rr   )rt   ru   rv   r   r5   Úsummary2r9   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)r5   rŠ   rW   rH   ÚpytestÚskiprV   rX   rY   rZ   rT   r™   r   Úvariancer	   r   r6   ÚkwdsÚpredictÚgetattrÚwarnsÚUserWarning)r:   r5   Ú	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_4r8   r;   rB   rC   rK   rR   rb   rd   rh   ri   rk   rl   rm   rn   rp   rq   rx   ry   r{   r|   r~   r€   r�   rˆ   r‹   r”   r    ÚmarkÚsmoker–   r˜   r¯   r!   r!   r!   r"   r4   H   s@   	

r4   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ç•Ö&è.>)r5   Úresdr   rc   rW   Ú	score_obsr6   ÚscoreÚsumr0   ZzerosÚshapeÚhessian)	r:   r5   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çš™™™™™¹?)r5   rW   Ú
score_testr6   r   r   r   r0   ÚisnanÚreprÚexogr   )r:   r5   Ú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 )Nç•dyáý¥=r�   rD   Úmeanr›   )
r5   Úget_predictionr¾   r   Ú	predictedÚpredicted_meanÚseÚse_meanÚsummary_frameÚvalues)r:   Ú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©rH   r   ©ÚLongleyN©Ú	DECIMAL_3rK   Ú	DECIMAL_2r8   Ú	DECIMAL_0r{   rB   Ústatsmodels.datasets.longleyrã   Údatar0   Úrequirer\   rÏ   r   r   rX   rY   ÚGaussianÚfitr5   Úresults.results_glmrë   r7   ©Ú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�   rS   ç:Œ0âŽyE>r   ç      ð¿rÔ   rD   r   rÕ   r›   )r5   Ú#statsmodels.regression.linear_modelrú   rñ   r\   rÏ   rô   r¾   r   rc   rW   r¿   r6   ZresidrT   rÃ   ÚTÚdotrÖ   r×   rØ   rÙ   rÚ   rÛ   rÜ   )
r:   r5   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 )Néd   é1Ô  r   r   rü   ç{®Gáz”?ç-Cëâ6?çü©ñÒMbP?ré   )ÚGaussianLog)rï   rb   rî   rh   rp   Ú	DECIMAL_1rx   r0   ÚarangeÚrandomÚseedÚc_ÚonesÚXÚexpÚrandnZlnyr   rX   rY   ró   ÚlinksÚLogrô   r5   rõ   r  r7   )r÷   rg   Ú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  r{   rb   rí   rh   rp   rK   r0   r  r  r  r  r  r  r  Zy_invr   rX   rY   ró   r  ÚInversePowerrô   r5   rõ   r  r7   )r÷   rg   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  rK   rî   r{   Ústatsmodels.datasets.star98rã   rõ   r#  r0   rò   r\   rÏ   r   r   rX   rY   ÚBinomialrô   r5   r7   )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   rX   rY   r%  rô   r   r6   r5   r0   Údouble)r:   rã   rñ   r\   r7   Ú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é   )r0   r  ÚrandintZstandard_normalr    ÚraisesÚ
ValueErrorr   rX   rY   r%  )r:   Ú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é   )r0   r  Únormalr.  r&  Ústrrƒ   Ú	DataFramer    r/  r0  rX   r   Úfrom_formularY   r%  )r:   r1  Ú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� qˆd S )Nr   )Ún_trialsrš   r�   )r5   r   rW   r>  rH   r™   r¢   r	   r   r6   r£   )r:   r5   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*  r2  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õ   rA  r7   r   r\   rÏ   rX   rY   r%  rô   r5   ÚdiscreteÚLogitr6   r¾   )r÷   rA  Ú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é   rU   )gj˜CÞ“J@gìJp�JV¸?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
        )r5   r7   rW   rÌ   r6   rÏ   r   ÚlistÚrangeÚpopr   r\   ZilocrX   rY   r%  rô   r0   ÚasarrayZravel)r:   r5   r7   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ø   rO  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ç   rs   ré   r   N)rb   rî   rK   Zstatsmodels.datasets.scotlandrã   rõ   rQ  r   rÏ   rt   ru   rv   r   r\   rX   rY   re   rô   r5   ra   r7   )r÷   rã   rQ  rñ   r5   r7   r!   r!   r"   rø   “  s    


ÿzTestGlmGamma.setup_classNr  r!   r!   r!   r"   rP  ‘  s   rP  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©rI   ré   )rí   rK   rï   rb   r€   rõ   rS  r   r\   rÏ   rX   rY   re   r  r  rô   r5   r7   )r÷   rS  r7   r!   r!   r"   rø   ­  s    
ÿzTestGlmGammaLog.setup_classNr  r!   r!   r!   r"   rR  ¬  s   rR  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 )Niœÿÿÿr   )ÚCancerIdentityrs   rT  ré   )rK   rî   r8   rï   rb   r  rp   rõ   rV  rt   ru   rv   rX   rY   re   r  ÚIdentityr   r\   rÏ   rô   r5   r7   )r÷   rV  r7   Úfamr!   r!   r"   rø   Å  s    

"z TestGlmGammaIdentity.setup_classNr  r!   r!   r!   r"   rU  Ä  s   rU  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é   rB  rC  )rõ   rZ  r   rã   rñ   r0   rò   r\   rÏ   Úlogr   r   rX   rY   ÚPoissonrô   r5   r7   rE  r6   r¾   )r÷   rZ  rG  r!   r!   r"   rø   Þ  s    
*ÿzTestGlmPoisson.setup_classNr  r!   r!   r!   r"   rY  Ý  s   rY  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ï   rb   rp   rõ   r^  r   r\   rÏ   rX   rY   rf   rô   r5   r7   )r÷   r^  r7   r5   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�   )	r5   rW   rH   r™   r   rT   r¢   r	   r   )r:   r5   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 )Néöÿÿÿr   )ÚInvGaussLogrT  ré   )rb   rí   rK   rõ   ra  r   r\   rÏ   rX   rY   rf   r  r  rô   r5   r7   )r÷   ra  r7   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   )ÚMedpar1rs   rT  ré   )ÚInvGaussIdentity)rb   rí   r€   r8   rõ   rc  rt   ru   rv   r   r\   rÏ   rX   rY   rf   r  rW  rô   r5   rd  r7   )r÷   rc  rñ   rd  r!   r!   r"   rø   3  s    



ÿÿz#TestGlmInvgaussIdentity.setup_classNr  r!   r!   r!   r"   rb  2  s   rb  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ç   rs   ©Úcategoryré   r6  rS   )Ú	CommitteeT)"r  Zdecimal_residrí   r8   rK   r€   Zstatsmodels.datasets.committeerã   rñ   r0   rò   r\   rÏ   r[  rM   r   rt   ru   rv   r   r    r¦   r§   rX   rY   rZ   r   rô   r5   rõ   rh  ra   r7   r�   )r÷   rã   ZinteractionrX  rh  r7   r!   r!   r"   rø   O  s4    *(
ÿÿzTestGlmNegbinomial.setup_classNr  r!   r!   r!   r"   re  N  s   re  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  ©rH   Úexposure)rõ   rj  r´   r8   rB   rb   r   rã   r0   rM  r\   rÏ   r[  r   Úlenrñ   rl  r   rX   rY   r\  rô   r5   r7   )r÷   rj  rñ   rl  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)rH   rl  Úmissingr   é   )rñ   r\   rF   r0   Únanr   rÏ   rX   rY   r\  rl  r   rÂ   )r:   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   )rH   Úoffsetrl  )rH   rx  r¸   r�   rl  g›+¡†›„=rx  )r0   r  r  r.  r8  Úuniformr   rX   rY   r\  rô   r[  r   r6   r   ÚnullrW   Z_get_init_kwdsrx  Ú	__class__r\   rÏ   rl  Úfit_regularized)r:   r\   rÏ   rl  rx  Ú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ƒ�sÌt‚d S )Nrv  r   r<   r  rw  r,  r   r   rk  )r<   r   )rÏ   rl  )rl  )rx  rH   rÕ   )rœ   rx  )rÏ   rœ   rx  ré   T)rÏ   rx  Úlinearr�  )rÏ   rx  rœ   )r0   r  r  r.  r8  ry  r   rX   rY   r\  rô   r¤   r   r    r¦   ÚFutureWarningrV   rƒ   r„   ÚndarrayÚAssertionError)r:   r\   rÏ   rl  r}  Zexog1Z	exposure1rÝ   Zpred2Zpred3Zpred4Zpred5rx  r~  r  r!   r!   r"   Útest_predict¾  sH    ÿ


ÿ


þz!TestGlmPoissonOffset.test_predictN)r°   r±   r²   r  rø   ru  r€  r…  r!   r!   r!   r"   ri  …  s
   
ri  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   rX   rY   r%  r    r¦   r   rô   )r3   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  rU   F)Zdemeanré   rÉ   éa   g      Y@rš   r�   )rý   rú   r0   r  r  ry  r  rÂ   rÿ   r  rô   Zcompare_lm_testr   rX   rY   ró   rW   rÌ   r6   r   )rú   rg   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  )rX   Zdatasetsr   rã   r\   rÏ   r   r   rH   rI   Ú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é   ©rD  r   rê   N)rí   rK   rî   r8   rï   r{   rB   rð   rã   rñ   r   rÏ   rX   rú   r\   rô   r6   r   rY   ró   r5   rõ   rë   r7   )r÷   rã   r6   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 1é2   r   rˆ  r<   r   r  r  r  ré   éüÿÿÿéûÿÿÿr‘  g€û2ÿ…iÀgF€.u/Àrn  )r0   ÚarrayÚsplitr'  ÚrepeatrX   r   r   rY   r%  rô   Útestingr   r6   )Úy2Úwtr6  rt  Ú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   )r0   r  rÁ   r[  )r6   Úlin_predÚpr©r  r   r!   r"   rc   B  s    z test_loglike_no_opt.<locals>.llfr‰  ré   )rD  Úmaxiter)r0   rM  r  Úfloat64rX   r   r   rY   r%  rô   r   rc   )rc   r6   rt  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Úconstantrl  r  rT  z	Foo ~ Bar)rñ   rl  rH   zExposure is not ndarrayrÇ   rˆ  )r   r¨  r©  r¨  ©rl  rH   )Zstatsmodels.formula.apiÚformulaÚapir0   rs  r  ry  rƒ   r:  rX   rY   ró   r  r  r†  rl  r   Útyperƒ  r„   Úlocr   r0  r   r§  )ZsmfÚdrÒ   rH   rt  rl  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  r3  r   r,  r   r   ré   )Ú
add_lowess©r   r   r‰  )Úfracr4  r7  r5  r6  )r0   r  r  r8  r  ry  rX   r   rY   r%  rô   ÚpandasZ$statsmodels.graphics.regressionplotsr±  Zplot_added_variableZaxesr#   r   Zplot_partial_residualsZplot_ceres_residualsr:  r;  )Zclose_figuresr<  rÏ   rž  Zprobr\   rW   Ú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rÔt j |¡}n”||jkrît 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é   rS   )r0   r  r  rX   rY   Zinverser%  ry  rm  ÚemptyrÁ   r\  Úpoissonre   Úgammaró   r8  rZ   Zscipy.stats.distributionsr¸  Zrvsrf   r¹  r0  )
rž  Úfamily_classrI   Úbinom_versionrX  rJ   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  )
r0   r  r  r8  rX   rY   ró   r   rô   r•   )r<  rÏ   r\   r  ÚfarW   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   rS   c                    s   ˆ j j| dd�S ro   )rW   r[   ©r  ©r(   r!   r"   Ú<lambda>Ë  ó    z%check_score_hessian.<locals>.<lambda>r  rE   r�   c                    s   ˆ j j| dd�S ro   )rW   rÀ   rÄ  rÅ  r!   r"   rÆ  Ò  rÇ  )r6   rW   rÀ   r   r   rÃ   r   )	r(   r6   Ú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�rŠd| d¡ }�n€||	f| j|j
fk�r²d
| d¡ }�nX||	f| j|jfk�rîd	d| d¡  }t  |dt j¡}�n||	f| j|jfk�rd| d¡d  }qðnð||	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�r°dt jj|jd d� }qðnZ||	f| j|jfk�rÚd| d¡d  }n0||	f| j|jfk�röd}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�rŽt!|ƒ d|j"fdfD �]"\}}|dk�rº|�rº�qœt ¡ �( 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� �qœqðqæqØd S )"Né.U r  r   r,  r   r   Fr²  rº  r  ro  r   rˆ  r  r‰  rË   Trs   rT  ré   ÚIRLSr  ©r   Nr  i,  )Úmax_start_irlsrD  r  r¡  rD   ç-Cëâ6
?rE   r¼   çš™™™™™É?Úeim)rÍ  Úcov_typerD  r  r¡  ),r0   r  r  rX   rY   r  r%  rF  ÚProbitÚCLogLogr  ÚCauchyr\  rW  ÚSqrtre   r  ró   rf   ÚInverseSquaredrZ   r8  rÁ   ÚclipÚinfry  rÂ   rÀ  rt   ru   rv   r   rô   rÉ  r6   r   rc   rT   rA   rÃ   ÚsqrtÚdiagÚlinalgÚinv)rX  ÚlnkrY   r<  ÚprÏ   Úskip_oner¾  Úfamily_linksrI   r¿  rž  r\   Úmod_irlsÚ	rslt_irlsrÍ  rD  Ú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�rŠd| d¡ }�n€||	f| j|j
fk�r²d
| d¡ }�nX||	f| j|jfk�rîd	d| d¡  }t  |dt j¡}�n||	f| j|jfk�rd| d¡d  }qðnð||	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�r°dt jj|jd d� }qðnZ||	f| j|jfk�rÚd| d¡d  }n0||	f| j|jfk�röd}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� �qhqðqæqØd S )NrÊ  r  r   r,  r   r   Fr²  rº  r  ro  r   rˆ  r  r‰  rË   Trs   rT  ré   rË  r  rÌ  r  rÐ  )rÍ  rD  r  Zoptim_hessianrD   rÎ  rE   r¼   )+r0   r  r  rX   rY   r  r%  rF  rÒ  rÓ  r  rÔ  r\  rW  rÕ  re   r  ró   rf   rÖ  rZ   r8  rÁ   r×  rØ  ry  rÂ   rÀ  rt   ru   rv   r   rô   r6   r   rc   rT   rÃ   rÙ  rÚ  rÛ  rÜ  rA   )rX  rÝ  rY   r<  rÞ  rÏ   rß  r¾  rà  rI   r¿  rž  r\   rá  râ  rÍ  rD  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ƒ q�t	|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)rD  r  Z	optimizerrË  rê  ZlstsqZ
pinv_wexogZexog_Q)r0   r  r  r  r   rÁ   r   rô   r6   r   Zmle_settingsr  r   rŠ   Zresults_wlsrW   )rg   Úk_varsr  rÏ   r   rt  r5   r7   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ñ   r0   rM  r\   rÏ   r  r  r.  rm  Ú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 ©NrD   r>   ©r   r5   r6   r7   r9   r!   r!   r"   r;   æ  s    ÿz$CheckWtdDuplicationMixin.test_paramsc                 C   s   t | jj| jjddd� d S )Nr=   rD   rE   ©r   r5   rA   r7   r9   r!   r!   r"   rC   ì  s    z-CheckWtdDuplicationMixin.test_standard_errorsc                 C   s   t | jj| jjddd� d S rö  )r   r5   r`   r7   r9   r!   r!   r"   Útest_aic  s    z!CheckWtdDuplicationMixin.test_aicc                 C   s   t | jj| jjddd� d S rö  ©r   r5   rj   r7   r9   r!   r!   r"   rl     s    ÿz&CheckWtdDuplicationMixin.test_deviancec                 C   s   t | jj| jjddd� d S rö  )r   r5   rT   r7   r9   r!   r!   r"   rn     s    z#CheckWtdDuplicationMixin.test_scalec                 C   s   t | jj| jjdƒ d S )NrD   )r   r5   rc   r7   r9   r!   r!   r"   rq     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 ©Nrs   rD   r>   )rt   ru   rv   r   r   r5   rw   r7   r9   r!   r!   r"   ry     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û  )rt   ru   rv   r   r5   rz   r7   r9   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>   )r7   r¤   r5   rW   rÏ   r   r   )r:   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 )NrD   g-Cëâ6*?r>   )r   r5   r…   r7   r†   r‡   r9   r!   r!   r"   rˆ   .  s    ÿÿÿz&CheckWtdDuplicationMixin.test_tpvaluesN)r°   r±   r²   r´   r8   r  rø   r;   rB   rC   rK   rù  rl   rn   rq   rx   ry   r{   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^   rH   ré   N)Úsuperrý  rø   r0   rM  r\   rÏ   r   rò  rX   rY   r\  rô   r5   ró  rô  r7   rõ  ©r{  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sF¸¿çSµØÝ'3¿çI.½+@çÉ08”ë—4Àr  r  rÿ  )r  rD  ré   N)r   r  rø   r0   r•  Údictr   r\   rÏ   rò  rX   rY   r\  rô   r5   ró  rô  r7   ©r÷   rD  Ú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Ñ  rD  ré   N)r   r  rø   r0   r•  r  r   r\   rÏ   rò  rX   rY   r\  rô   r5   ró  rô  r7   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   Nrs   rÿ  ré   rD  )r   r  rø   r0   r•  r  rm  r\   r  rt   ru   rv   r   rÏ   rò  rX   rY   r\  rô   r5   r—  ró  rô  r7   )r÷   rD  Úgidr  rt   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ò  rX   rY   r%  rô   r5   rô  r7   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  rs   rf  )Úalpha)rI   r  rÿ  ré   N)r   r  rø   rt   ru   rv   r   rX   rY   rZ   r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   )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ø   rX   rY   re   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   ©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ø   rX   rY   ró   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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ø   rX   rY   rf   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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ø   rX   rY   re   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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ž   )rH   Úweights)rX   rY   re   r  r  r    r¦   r   r   r\   rÏ   rò  )r:   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X2rS   ré   N)r   r  rø   rX   rY   re   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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ÿ  ÚdevrS   ré   N)r   r  rø   rX   rY   re   r  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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   rn  ro  rp  )rH   r^   rq  r   r   r   rˆ  rI  rH  r<   é   é   rr  é   é   é   )rñ   r\   rF   rÏ   r0   rs  rò  r   r5   rW   rH   r   r^   rÂ   r•  )r:   r\   rÏ   r^   Úmod_misisngZkeep_idxr!   r!   r"   ru  #  s"    
 ÿ
ÿ
ÿ"z%TestWtdGlmGammaScale_dev.test_missing)r°   r±   r²   r  rø   ru  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   ©rI   Ú	var_powerrÿ  ré   N)r   r(  rø   rX   rY   ÚTweedier  r  r   r\   rÏ   rò  rô   r5   ró  rô  r7   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Ï   r0   r  r  r.  rm  rò  r—  rÜ   ró  rô  rX   rY   r  ÚPowerr+  r   rô   r5   r7   )r÷   rI   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   r1  rø   rX   rY   r+  r  r0  r   r\   rÏ   rò  rô   r5   ró  rô  r7   r  r  r!   r"   rø   Z  s    ÿ
þ
ÿz!TestWtdTweediePower15.setup_classr  r!   r!   r  r"   r1  Y  s   r1  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   rn  ro  )ÚcolumnsZ
EXECUTIONSr   zXEXECUTIONS ~ INCOME + PERPOVERTY + PERBLACK + VC100k96 +
                 SOUTH + DEGREE)rñ   r^   r#  r<   r"  rr  r$  r%  r&  é   )r´  r   rã   r0   rò   r\   rÏ   rs  r:  Z	exog_namer  rm  r   r;  r   r^   rÂ   r•  )rƒ   rñ   r  r«  r'  Zkeep_weightsr!   r!   r"   Útest_wtd_patsy_missingi  s,    
ÿ
ÿ
ÿ"r4  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   r3  r=   rE   )
rm  r5   rQ   r7   r   r0   ÚconcatenaterN   rO   rP   ©r:   Zidx1Zidx2r!   r!   r"   Ú
test_resid�  sL    ÿÿ üÿÿ üÿÿ üÿÿ üzCheckTweedie.test_residc                 C   s   t | jj| jjddd� d S )NrD   g    €„.Ar>   rø  r9   r!   r!   r"   Útest_bse›  s    zCheckTweedie.test_bsec                 C   s   t | jj| jjddd� d S rü  r÷  r9   r!   r!   r"   r;   ž  s    ÿzCheckTweedie.test_paramsc                 C   s   t | jj| jjddd� d S rö  rú  r9   r!   r!   r"   rl   ¢  s    ÿzCheckTweedie.test_deviancec                 C   s(   t | jj| jjƒ t | jj| jjƒ d S r   )r   r5   r_   r7   r}   r9   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   r3  r  r>   )rm  r5   r   r7   rQ   r   r0   r6  r7  r!   r!   r"   r�   ª  s    ÿÿ üzCheckTweedie.test_fittedvaluesc                 C   s   | j  ¡  | j  ¡  d S r   )r5   r•   r—   r9   r!   r!   r"   r–   ³  s    
zCheckTweedie.test_summaryN)
r°   r±   r²   r8  r9  r;   rl   r:  r�   r–   r!   r!   r!   r"   r5  €  s   	r5  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Ï   rH   )rõ   r<  r   r/  rñ   rÏ   r\   rX   rY   r+  r  r0  r   rô   r5   r7   )r÷   r<  r  r!   r!   r"   rø   ¹  s    

ÿ
þzTestTweediePower15.setup_classNr  r!   r!   r!   r"   r;  ¸  s   r;  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\   rX   rY   r+  r  r0  r   rô   r5   r7   )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õ   rA  r   r/  rñ   rÏ   r\   rX   rY   r+  r  r  r   rô   r5   r7   )r÷   rA  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õ   rC  rX   rY   r+  r  r  r   r\   rÏ   rô   r5   r7   )r÷   r/  rC  rñ   r  r!   r!   r"   rø   æ  s    ÿÿýz TestTweedieLog15Fair.setup_classNr  r!   r!   r!   r"   rB  å  s   rB  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=   rE   )r   r5   rJ   r7   r9   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 rE  )r   r5   rQ   r7   rN   rO   rP   rL   r9   r!   r!   r"   r8  ù  s*     ÿ ÿ ÿ ÿ þzCheckTweedieSpecial.test_residN)r°   r±   r²   rF  r8  r!   r!   r!   r"   rD  õ  s   rD  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.  rT  r=  r   r)  )r   r/  rñ   rÏ   r\   rX   rY   ró   r  r  r   rô   r5   r+  r7   ©r÷   Zfamily1Zfamily2r!   r!   r"   rø     s    


þÿ
þz"TestTweedieSpecialLog0.setup_classNr  r!   r!   r!   r"   rG    s   rG  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.  rT  r=  r   r)  )r   r/  rñ   rÏ   r\   rX   rY   r\  r  r  r   rô   r5   r+  r7   rH  r!   r!   r"   rø     s    


þÿ
þz"TestTweedieSpecialLog1.setup_classNr  r!   r!   r!   r"   rI    s   rI  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.  rT  r=  r   r)  )r   r/  rñ   rÏ   r\   rX   rY   re   r  r  r   rô   r5   r+  r7   rH  r!   r!   r"   rø   *  s    


þÿ
þz"TestTweedieSpecialLog2.setup_classNr  r!   r!   r!   r"   rJ  )  s   rJ  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.  rT  r=  r   r)  )r   r/  rñ   rÏ   r\   rX   rY   rf   r  r  r   rô   r5   r+  r7   rH  r!   r!   r"   rø   ;  s    


þÿ
þz"TestTweedieSpecialLog3.setup_classNr  r!   r!   r!   r"   rK  :  s   rK  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   )r0   r  r  r8  rÿ   Úr_r  r»  r¼  rK  r½  rÁ   )rÞ  r<  r  ÚlprrJ   ÚlamÚalpÚbetr   ÚNÚir!   r!   r"   Úgen_tweedieJ  s    

&rV  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=   rE   rÁ  ç{®Gáz„?r�   r   gìQ¸…ë±?r3  )ÚL1_wtr  r¡  Z	cnvrg_tol)rY  r  gÚ×3Bï?gí›û«Ç}î¿ç        gvÄ!HÞ?gù¢=^Hð?gYÀnÝÍï¿gmÿÊJ“R€?g@QÙ°¦2à?gØmŠ¦7Œï?g	©Ýmï¿g~5I$¸~?gbÁX:z×ß?gùõClÊ?g(ÔÓGàÅ¿g!¡JÍ.?gl"3¸<º?r�   r‰  gffffffæ?r   ©rZ  r  )rV  rX   rY   r+  r   rô   r   r6   r0   r•  rA   r|  Ú	enumerater  rÂ   Úallcloser„  )rÞ  r   r  rX  Úmodel1Úresult1Zmodel1xZresult1xÚmodel2Úresult2r@   r?   Zevr¶  r  Zmodel3Zresult3Zresult4Zresult5r!   r!   r"   Útest_tweedie_EQL]  sL     þ
ÿ þþrc  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sŠt‚d S )Nr¦  TrW  ré   r   r<   rº  r‰  r\  rˆ  )rV  rX   rY   r+  r   r0   Zlinspacer|  Úappendr‚   r6   rÁ   Úuniquerm  r„  )rÞ  r   r  rX  r_  Znnzr  r`  r!   r!   r"   Útest_tweedie_elastic_netŽ  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 ]|}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 )NrL  rM  r   r,  r   r   r   )r  r6  r   TrW  ré   r  ©r  rT   rD   r>   )r0   r  r  r8  rÁ   r  r¼  rX   rY   r+  r   rô   r\  r   r6   rA   )r<  r  rP  Úmnr   rT   rX  r_  r`  ra  rb  r!   r!   r"   Útest_tweedie_EQL_poisson_limit¡  s    
ri  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 )NrL  rM  r   r,  r   r   r   )r6  r   r  r   TrW  ré   r  rg  )r   r   r   r  rË   r>   )r0   r  r  r8  rÁ   r  r¼  rX   rY   r+  r   rô   r   r6   rO  )	r<  r  rP  rh  r   rT   rX  r_  r`  r!   r!   r"   Útest_tweedie_EQL_upper_limit½  s    
rj  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ëâ®ðº@g˜Q,·D¸@g¾öÌ’À$–@g‡l ]lü@g¦Ðëo@g<÷òm%@gßcv7ËŒ@g£~ûÓ¤?g�"“ˆ?gQ°ˆÒ75Œ>g½ ;#¨Pg>geÒžý…Ü>r[  r-  r.  r¦  r)  ré   r   r   g      Ð?r�   )r   r/  rX   r   rÏ   rY   r+  r  r  rô   rJ   r0   rM   r  rm  r[  re   Zestimate_tweedie_powerr   r6   )rñ   r   r_  r5   ra  r7   rÞ  r!   r!   r"   ÚtestTweediePowerEstimateÔ  s<             ûÿÿ þrk  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� qˆq€qtd S )Né{   r   rù   r’  r   r   r+  )gKß1]”>�@gZYì@çð?)rë  N)r   r½   )r  rZ  )r  rD  r  rD   r>   )r0   r  r  rý   rú   r  r  r8  rO  r   r|  Z
_fit_ridger   r6   )
rú   r<  r  r   r6   r  ZfunZ
L1_wtValuerW   rô   r!   r!   r"   Útest_glm_lasso_6431ÿ  s    $

rm  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ƒ q’qd S )Nr   r   )Úglmnet_r_results)Zbinomialr¼  r(   zenet_%s.csvr)   )r*   rH  z
rslt_%s_%dr   ré   r\  rY  g333333Ó?r>   c              	      sL   ˆ  | ¡tˆƒ }|ˆdˆ  t | d ¡ d ˆ t t | ¡¡    }|S )Nr   r   )r[   rm  r0   rÁ   r‚   )r6   rc   ©rZ  r  r\   rW   r!   r"   Úplf?	  s    6z-TestRegularized.test_regularized.<locals>.plf)r+   r(   ro  r,   r-   r.   r/   r0   Zloadtxtr1   rX   rY   r%  r\  rK  r¥   r   r|  r   r6   r   Úsign)r:   r+   ro  r�  r2   rñ   rÏ   rX  r¶  ZvnZr_resultr6   Z	sm_resultrq  Zllf_rZllf_smr!   rp  r"   Útest_regularized	  s6    
ÿÿÿ

z TestRegularized.test_regularizedN)r°   r±   r²   rs  r!   r!   r!   r"   rn  	  s   rn  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\   rX   rY   r%  rW   )r÷   rã   rñ   r!   r!   r"   rø   K	  s    
ÿzTestConvergence.setup_classrû   r   rj   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!)r]  r›  Úfit_historyr0   r^  r0  )r:   r?   r@   Útol_criterionrU  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>   Ú	iterationrj   r   ©rW   rô   r›  ry  ru  r   rm  ©r:   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>   rz  rj   r   r{  r|  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>   rz  rj   r   r{  r|  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   r6   ©r?   r@   rv  rz  rj   r   r{  r|  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û   r6   r€  rz  rj   r   r{  r|  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û   r6   r€  rz  rj   r   r{  r|  r!   r!   r"   Ú!test_convergence_atol_rtol_params¦	  s    ÿ
ÿz1TestConvergence.test_convergence_atol_rtol_paramsN)rû   r   rj   )r°   r±   r²   r  rø   ry  r}  r~  r  r�  r‚  rƒ  r!   r!   r!   r"   rt  J	  s   


rt  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�   )r0   r  r  rX   r   r  r  rÁ   r¼  r   ZgenmodrY   r\  rô   rO   rj   rH   r[   r   r   )rg   rì  r  Zmu_truer   rt  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   rs   ré   rë  r   )r¡  r  rÍ  )r   r/  r\   rt   ru   rv   rX   r   rÏ   rY   re   rô   r•   ©rñ   rt  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   rS   )r   rã   r   r\   rÏ   rX   rY   ró   rô   rV   r6   rƒ   r„   r„  rT   r�  r0   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Í  )r0   rM  r&  r   rX   rY   r\  rô   rV   r6   rƒ  r„  )
r�  Zcount1Zn1Zcount2Zn2r   r  rl  rt  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)r0   r  r  r•  r&  Úint32r   r   rX   rY   r%  rô   r   rz   Zbic_llfZbic_deviance©r3   r  r   rW   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ƒs‚t‚W 5 Q R X d S )Nr  r’  r   r   ré   zThe bicrž   )r0   r  r  r•  r&  r�  r   rX   rY   r%  rô   r    r¦   r‚  rV   rz   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sÚt‚d S )Nc                 S   s   g | ]}t  |d  ¡d ‘qS )rº  r   )r0   Úsin)Ú.0rU  r!   r!   r"   Ú
<listcomp>
  s     z-test_output_exposure_null.<locals>.<listcomp>r+  r   r  r3  r,  c                    s$   g | ]\}}t  ˆ j||d �¡‘qS )r,  )r0   rÁ   r¼  )r’  r  Úe©Úrsr!   r"   r“  
  s     )r\   rÏ   rl  rH   r=  r   )rK  r0   r  ZRandomStater.  Úzipr   r   rX   rY   r\  rô   r   Zllnullrc   r‚   r„  )r1  Zx0rl  r   r  rW   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   rn  ÚMÚFr<   r   rH  r#  é   rº  r   r&  )ÚldoseÚsexÚnumdeadrž  ZnumaliveZSFz	sex*ldoseZ	dataframe)rñ   Úreturn_typeré   g8¼ "5M@Úqaic)ÚcritrT   gÄ|yö!=@r=   rE   r   )r¡  rT   Z	dk_paramsgÄ|yö!?@)Úpatsyr0   r6  r  rƒ   r:  rÜ   Zdmatrixr   rX   rY   r%  rô   Zinfo_criteriar   )r¢  rœ  r�  rž  rÒ   r   r  r«   rí  rT   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	||
  |	|
 ¡ ¡ ||
< q d
D ]Æ}dD ]¼}|dkrðtrðt 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� qÖqÎd S )NrL  rM  r   r,  rN  r¦  r<   r   r   )TF)r   r¦  r   Fz%skip, scipy too old, no bessel_wrightrW  ré   rÏ  c                    s   ˆ j | dd�S ro   ©r[   rÄ  ©rW   r!   r"   rÆ  a
  rÇ  z$test_tweedie_score.<locals>.<lambda>rS   rû   r>   c                    s   ˆ j | dd�S ro   r¤  rÄ  r¥  r!   r"   rÆ  e
  rÇ  gH¯¼šò×j>)r0   r  r  r8  rÿ   rO  r  r»  r¼  rK  r½  rÁ   r
   r    r¡   rX   rY   r+  r   rô   r6   r-  r   rÀ   r   r   rÃ   )r<  r  rP  rJ   Úp0rQ  rR  rS  r   rT  rU  rX  rÞ  rX  rµ  ÚpaZngradZagradZnhessZahessr!   r¥  r"   Útest_tweedie_scoreE
  s6    

&
r¨  )r   )Žr³   r+   rt   Únumpyr0   Znumpy.testingr   r   r   r   r   r   r´  rƒ   Zpandas.testingr   r    Zscipyr	   Zstatsmodels.apir¬  rX   Zstatsmodels.compat.scipyr
   Zstatsmodels.datasetsr   r   Zstatsmodels.discreter   rE  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fixturer3   r4   r·   rà   r  r  r  r!  r@  rP  rR  rU  rY  r]  r_  rb  re  ri  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,  r1  r4  r5  r;  r>  r@  rB  rD  rG  rI  rJ  rK  rV  Úfilterwarningsrc  rf  ri  rj  rk  rm  rn  rt  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!	
	