
    M/Ph2                       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Z1e1rddl2m3Z3  e3d          Z4ndZ4d Z5d Z6 ej7        d          d             Z8 G d d          Z9 G d d          Z: G d de9          Z; G d d e;          Z< G d! d"e9          Z= G d# d$e9          Z> G d% d&e9          Z? G d' d(e9e:          Z@ G d) d*e9          ZA G d+ d,e9          ZB G d- d.e9          ZC G d/ d0e9e:          ZD G d1 d2e9          ZE G d3 d4e9          ZF G d5 d6e9          ZG G d7 d8e9          ZH G d9 d:e9          ZId; ZJd< ZKd= ZL G d> d?e9          ZMd@ ZNdA ZOdB ZPejQ        jR        dC             ZSddDZTejQ        jU        dE             ZVdF ZWdG ZXdH ZYdI ZZ G dJ dK          Z[ G dL dMe[          Z\ G dN dOe[          Z] G dP dQe[          Z^ G dR dSe[          Z_ G dT dUe[          Z` G dV dWe[          Za G dX dYe[          Zb G dZ d[e[          Zc G d\ d]e[          Zd G d^ d_e[          Ze G d` dae[          Zf G db dce[          Zg G dd dee[          Zh G df dge[          Zi G dh die[          Zjdj Zk G dk dl          Zl G dm dnel          Zm G do dpel          Zn G dq drel          Zo G ds dtel          Zp G du dv          Zq G dw dxeq          Zr G dy dzeq          Zs G d{ d|eq          Zt G d} d~eq          Zud ZvejQ        w                    d          d             Zxd Zyd Zzd Z{d Z|d Z} G d d          Z~ G d d          Zd Zd Zd ZejQ                            dej        ej        ej        ej        g          d             Zd Zd Zd Zd Zd 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                 B    t           r|                     |           d S d S N)
pdf_outputsavefig)pdffigs     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/genmod/tests/test_glm.pyclose_or_saver%   7   s,     C     c                  J    t           rt                                           d S d S r   )r    r"   close r&   r$   teardown_moduler*   <   s%     		 r&   module)scopec                      t           j                            t           j                            t                              } t          j        t           j                            | dd          dd          S )Nresultsziris.csv,r   )	delimiterskip_header)ospathdirnameabspath__file__np
genfromtxtjoin)cur_dirs    r$   irisr;   A   sU    goobgooh7788G=gy*EE#&A7 7 7 7r&   c                       e Zd ZdZeZd ZeZd ZeZ	d Z
eZd ZeZd ZeZd ZeZd ZeZd	 ZeZd
 ZeZd Zd ZeZd Zd Zd Zd Zej         j!        d             Z"ej         j!        d             Z#d Z$dS )CheckModelResultsMixinzo
    res2 should be either the results from RModelWrap
    or the results as defined in model_results_data
    c                 Z    t          | j        j        | j        j        | j                   d S r   )r   res1paramsres2decimal_paramsselfs    r$   test_paramsz"CheckModelResultsMixin.test_paramsO   s2    DI,di.>#	% 	% 	% 	% 	%r&   c                 f    t          | j        j        | j        j        d| j         z  d           d S )N
   h㈵>atolrtol)r   r?   bserA   decimal_bserC   s    r$   test_standard_errorsz+CheckModelResultsMixin.test_standard_errorsT   sE    	ty}4#3"344	A 	A 	A 	A 	A 	Ar&   c                    dd l }|                     | j        j                  }|d d dfxx         | j        j        j                            | j        j                  dz  z  cc<   d| j         z  }| j        j	        }t          j        | j        j        | j        j        | j        j        || j        j        f          }t!          ||d|           d S )Nr   r   rG   ư>rK   rJ   )copyrA   residsr?   familylinkderivmudecimal_residsresid_anscombe_unscaledr7   column_stackresid_pearsonresid_devianceresid_workingresid_responser   )rD   rR   resid2rJ   resid_arS   s         r$   test_residualsz%CheckModelResultsMixin.test_residualsY   s     	 49+,,qqq!t	(-33DILAA1DDT(())3$)"9	($)*A1"3 4 4 	T======r&   c                    | j         j        dk    rd}nd}t          | j         j        j        t
          j        j                  ry| j         j        j                            | j         j        j	        | j         j
        | j         j        j        | j         j        j        d          }d|z  d| j         j        dz   z  z   }n| j         j        }t          ||z   | j        j        | j                   d S )Nr   r   r   scale)r?   rd   
isinstancemodelrT   smfamiliesNegativeBinomialloglikeendogrW   var_weightsfreq_weightsdf_modelaicr   rA   aic_Rdecimal_aic_R)rD   dofllfrp   s       r$   
test_aic_Rz!CheckModelResultsMixin.test_aic_Rk   s     9?aCCCdio,r{/KMM 	 )/(001F15151L151M78	 1 : :C
 c6!TY/122CC)-CCGTY_"	$ 	$ 	$ 	$ 	$r&   c                 "   t          | j        j        j        t          j        j        t          j        j        t          j        j        f          r| j        j        j        	                    | j        j        j
        | j        j        | j        j        j        | j        j        j        d          }d|z  d| j        j        dz   z  z   | j        j        z  }n| j        j        | j        j        z  }t#          || j        j        | j                   d S )Nr   rc   re   r   )rf   r?   rg   rT   rh   ri   GammaInverseGaussianrj   rk   rl   rW   rm   rn   ro   nobsrp   r   rA   	aic_Statadecimal_aic_Stata)rD   rt   rp   s      r$   test_aic_Stataz%CheckModelResultsMixin.test_aic_Stata   s    dio,r{/@/1{/J/1{/K/M N N 
	/ )/(001F15151L151M78	 1 : :C
 c6!TY/122DINBCC)-	.CC!4d6LMMMMMr&   c                 Z    t          | j        j        | j        j        | j                   d S r   )r   r?   deviancerA   decimal_deviancerC   s    r$   test_deviancez$CheckModelResultsMixin.test_deviance   s2    DI.	0B%	' 	' 	' 	' 	'r&   c                 Z    t          | j        j        | j        j        | j                   d S r   )r   r?   rd   rA   decimal_scalerC   s    r$   
test_scalez!CheckModelResultsMixin.test_scale   s0    DIOTY_"	$ 	$ 	$ 	$ 	$r&   c                    t          | j        j        j        t          j        j        t          j        j        t          j        j        f          ra| j        j        j        	                    | j        j        j
        | j        j        | j        j        j        | j        j        j        d          }n| j        j        }t          || j        j        | j                   d S Nr   rc   )rf   r?   rg   rT   rh   ri   rw   rx   rj   rk   rl   rW   rm   rn   rt   r   rA   decimal_loglike)rD   rt   s     r$   test_loglikez#CheckModelResultsMixin.test_loglike   s     dio,r{/@/1{/J/1{/K/M N N 		  )/(001F15151L151M78	 1 : :CC )-CC0DEEEEEr&   c                     t          j                    5  t          j        dt                     t	          | j        j        | j        j        | j                   d d d            d S # 1 swxY w Y   d S Nignore)	warningscatch_warningssimplefilterr   r   r?   null_deviancerA   decimal_null_deviancerC   s    r$   test_null_deviancez)CheckModelResultsMixin.test_null_deviance   s    $&& 	< 	<!(M:::	 7 $	 7 $ :< < <	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AA&&A*-A*c                     t          j                    5  t          j        d           t          | j        j        | j        j        | j                   d d d            d S # 1 swxY w Y   d S r   )	r   r   r   r   r?   bicrA   	bic_Statadecimal_bicrC   s    r$   test_biczCheckModelResultsMixin.test_bic   s    $&& 	2 	2!(+++	 $	 3 $ 02 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   ?A  A$'A$c                 X    t          | j        j        j        | j        j                   d S r   )r   r?   rg   df_residrA   rC   s    r$   test_degreesz#CheckModelResultsMixin.test_degrees   s$    TY_-di.@AAAAAr&   c                 Z    t          | j        j        | j        j        | j                   d S r   )r   r?   fittedvaluesrA   decimal_fittedvaluesrC   s    r$   test_fittedvaluesz(CheckModelResultsMixin.test_fittedvalues   s2    DI2DI4J)	+ 	+ 	+ 	+ 	+r&   c                 T   | j         j        }|| j         j        z  }t          j                            t          j        |                    dz  }t          j                            d          | j         j        z  }t          j	        ||z
  ||z   f          }t          |t          j                  rt          | j         j        |           nt          | j         j        |           t          | j         j        |           t          | j                                         |           d S )Nr   g?)r?   r@   rL   r
   normsfr7   absisfrZ   rf   pdSeriesr	   tvaluesr   pvaluesconf_int)rD   r@   r   r   
half_widthr   s         r$   test_tpvaluesz$CheckModelResultsMixin.test_tpvalues   s     !49=(*--w0014Z^^E**TY]:
?FZ$7*9L#MNNgry)) 	<	 17;;;;	 17;;;DI-w777DI..00(;;;;;r&   c                     t          | j        d          r)t          | j        j        | j        j        dd           d S d S )Npearson_chi2rP   rI   )hasattrrA   r   r?   r   rC   s    r$   test_pearson_chi2z(CheckModelResultsMixin.test_pearson_chi2   sT    49n-- 	2DI2DI4J!%D2 2 2 2 2 2	2 	2r&   c                 L   t          | j        d          r5t          | j                            d          | j        j        d           t          | j        d          rDt          t          | j                            d                    | j        j        d           d S d S )N	prsquaredmcf)kind皙?rK   prsquared_cox_snellcs)r   rA   r   r?   pseudo_rsquaredr   floatr   rC   s    r$   test_prsquaredz%CheckModelResultsMixin.test_prsquared   s    49k** 	<DI5555AA I/d< < < < 49344 	FE$)";";";"F"FGG I9F F F F F F	F 	Fr&   c                 8    | j                                          d S r   )r?   summaryrC   s    r$   test_summaryz#CheckModelResultsMixin.test_summary   s    	r&   c                     t          j                    5  t          j        dt                     | j                                         d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r?   summary2rC   s    r$   test_summary2z$CheckModelResultsMixin.test_summary2   s    $&& 	! 	!!(M:::I   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   4AAAc                 &   | j         }t          |j        j        d          st	          j        d           t          |j        j        t          j        j	                  rd}n|j
        }|j        j                            |j        |          }|j        j                            |j                  |z  }|                                \  }}t          |j        |d           t          ||d           |j                            |j        |          }|j        D ]*}t          |j        |         |j        |         d           +|                    d          }	t          |	|z  |d           t'          | dd	          rHt	          j        t*          d
          5  |                                }
d d d            n# 1 swxY w Y   n|                                }
|j        D ]*}t          |
j        |         |j        |         d           +d S )Nget_distributionzget_distribution not availabler   vIh%<=r   var_unscaledwhichhas_edispersionFzusing scale=1match)r?   r   rg   rT   pytestskiprf   rh   ri   rj   rd   r   r   variancer
   r   r@   kwdspredictgetattrwarnsUserWarning)rD   r?   	res_scaledistr	var_endogmvdistr2kvar_distr3s              r$   test_get_distributionz,CheckModelResultsMixin.test_get_distribution   sD   ytz(*<== 	:K8999dj')EFF 	#II
I
!2243D3<> >J%..t/@AAIM	{{}}1)159999	151111,,T[)DD 	G 	GAEJqM6;q>FFFFF ||.|11y()%@@@@ 4*E22 	-kAAA 1 1..001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 **,,F 	H 	HAFKNFKNGGGGG	H 	Hs   F??GGN)%__name__
__module____qualname____doc__	DECIMAL_4rB   rE   rM   rN   rX   ra   rr   ru   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   marksmoker   r   r   r)   r&   r$   r=   r=   H   s        
 N% % % KA A A N> > >  M$ $ $& "N N N !' ' ' M$ $ $  OF F F &< < < K2 2 2B B B %+ + +< < <2 2 2
F F F [   [! ! !
!H !H !H !H !Hr&   r=   c                        e Zd Zd Zd Zd ZdS )CheckComparisonMixinc                    | j         }| j        }t          |j        |j        d           |j                            |j        dz            }|j                            |j        dz            }t          ||d           |j                            |j        dz            }t          ||                    d          d           |j                            |j                  }t          |t          j
        |j        d                   d           |j                            |j        dz  d	
          }|j                            |j        dz            }t          ||d           |j                            |j        dz  d
          }|j                            |j        dz            }t          ||d           d S )N绽|=r   \(\?r   #B;rJ   r   gƠ>FobservedT&.>)r?   resdr   rt   rg   	score_obsr@   scoresumr7   zerosshapehessian)	rD   r?   r   
score_obs1
score_obsdscore1score0hessian1hessiands	            r$   test_compare_discretez*CheckComparisonMixin.test_compare_discrete  s   yy$(7777Z))$+*<==
Z))$+*<==

JU;;;; !!$+"455
q 1 1>>>>!!$+..)9!)< = =DIIII:%%dkD&85%II:%%dkD&899(7777:%%dkD&84%HH:%%dkD&899(666666r&   c                    | j         }|j                            |j        d          \  }}}t	          |dd           t	          |dd           t          |d           |j                            |j        d          \  }}}t	          |dd           t          t          j        |          t          |                     t          |d           |j        j
        d d df         dz  }|j                            |j        |	          \  }}}t          d
|           t          d
|           t          |d           d S )Nr   )k_constraintsr   r   r   r   msgr   
exog_extra皙?)r?   rg   
score_testr@   r   r   r   r7   isnanreprexogr   )rD   r?   stpvdfr   s         r$   test_score_testz$CheckComparisonMixin.test_score_test%  sB   yZ**4;a*HH
BAE****AE****RZ**4;a*HH
BAE****$r((++++R Z_QQQqS)1,
Z**4;:*NN
B#r"""#r"""Rr&   c                    | j                                         }| j                                        }t          |j        |j        d           t          |j        |j        d           t          |                                j	        |                                j	        d           | j                             d          }| j                                        }t          |j        |j        d           t          |j        |j        d           t          |                                j	        |                                j	        d           d S )Ndy=r   rP   meanr   )
r?   get_predictionr   r   	predictedpredicted_meansese_meansummary_framevalues)rD   pred1predds      r$   test_get_predictionz(CheckComparisonMixin.test_get_prediction9  sF   	((**	((**)=EJJJJ%-d;;;;++--4++--44	A 	A 	A 	A 	((v(66	((**uEEEE%(6666++--4++--44	A 	A 	A 	A 	A 	Ar&   N)r   r   r   r   r  r  r)   r&   r$   r   r     sF        7 7 7.  (A A A A Ar&   r   c                   *    e Zd Zed             Zd ZdS )TestGlmGaussianc                 ^   t           | _        t          | _        t          | _        t           | _        ddlm}  |            | _	        t          j        | j	        j        d          | j	        _        t          j        | j	        j        d          | j	        _        t          | j	        j        d          | j	        _        t          | j	        j        | j	        j        t           j                                                                                  | _        dd	lm}  |            | _        d
S )C
        Test Gaussian family with canonical identity link
        r   loadWrequirementsFprependrT   r   LongleyN	DECIMAL_3rX   	DECIMAL_2rB   	DECIMAL_0r   rM   statsmodels.datasets.longleyr  datar7   requirerl   r  r   r   rh   ri   Gaussianfitr?   results.results_glmr!  rA   clsr  r!  s      r$   setup_classzTestGlmGaussian.setup_classJ  s     '&##555555466CHNEEE
38=sCCC$SX]EBBBsx~sx}!{33557 7 77:suu 	000000799r&   c                    | j         }ddlm}  || j        j        | j        j                                      d          }|| _        t          |j	        |j	        d           |j
                            |j        d           }|j        d d d f         |j        z  |j
        j        z  }t          ||d           |j
                            |j        d	          }|j        d d d f         |j
        j        z  }t          ||d           |j
                            |j        d           }d
|j        z  |j
        j        j                            |j
        j                  z  }t          ||d           |                                }|                                }	t          |	j        |j        d           t          |	j        |j        d           t          |	                                j        d d d df         |                                j        d           | j                             d          }| j                                        }	t          |	j        |j        d           t          |	j        |j        d           t          |	                                j        d d d df         |                                j        d           d S )Nr   OLSF)use_tr   r   rc   :0yE>r         r  rP   r   r	  r   )r?   #statsmodels.regression.linear_modelr1  r'  rl   r  r*  r   r   rt   rg   r   r@   residrd   r   Tdotr
  r  r  r  r  r  r  )
rD   r?   r1  r   r   r   	hess_obs1	hess_obsdr  r  s
             r$   test_compare_OLSz TestGlmGaussian.test_compare_OLS`  s   y;;;;;;s49?DIN3377e7DD	$(7777Z))$+T)BB
Z4(4:5
G

JT::::Z))$+Q)??
Z4(4:?:

JT::::J&&t{$&??	$*$tz'8'<'<TZ_'M'MM		948888##%%##%%)=EJJJJ%-d;;;;++--4QQQU;++--44	A 	A 	A 	A 	((v(66	((**uEEEE%(6666++--4QQQU;++--44	A 	A 	A 	A 	A 	Ar&   N)r   r   r   classmethodr.  r;  r)   r&   r$   r  r  I  sA          [*"A "A "A "A "Ar&   r  c                   $    e Zd Zed             ZdS )TestGlmGaussianGradientc                 b   t           | _        t          | _        t          | _        t          | _        ddlm}  |            | _	        t          j        | j	        j        d          | j	        _        t          j        | j	        j        d          | j	        _        t          | j	        j        d          | j	        _        t          | j	        j        | j	        j        t           j                                                                      d	          | _        d
dlm}  |            | _        dS )r  r   r  r  r  Fr  r  newtonmethodr   r   Nr"  r,  s      r$   r.  z#TestGlmGaussianGradient.setup_class  s     '&##555555466CHNEEE
38=sCCC$SX]EBBBsx~sx} k22446 6 669cc6J6J 	000000799r&   Nr   r   r   r<  r.  r)   r&   r$   r>  r>    s-          [  r&   r>  c                   $    e Zd Zed             ZdS )TestGaussianLogc                    t           | _        t          | _        t           | _        t
          | _        d}t          j        |          }t          j	        
                    d           t          j        t          j        |df          ||dz  f         | _        t          j        dd|z  z   d|dz  z  z              dt          j	                            |          z  z   | _        t#          | j        | j        t$          j                            t$          j        j                                                  	          }|                                | _        dd
lm}  |            | _        d S )Nd   1  r   r   r4  {Gz?-C6?MbP?r  )GaussianLog)r%  rr   r$  r{   r   	DECIMAL_1r   r7   arangerandomseedc_onesXexprandnlnyr   rh   ri   r)  linksLogr*  r?   r+  rL  rA   )r-  ry   xGaussLog_ModelrL  s        r$   r.  zTestGaussianLog.setup_class  s0    & )'$-!IdOO
	ubgtAh''!Q$./&4$q&=6!Q$;6788	 5 556 SWce$&K$8$89J9N9N9P9P$Q$QS S S!%%''444444;==r&   NrC  r)   r&   r$   rE  rE    s-        ! ! [! ! !r&   rE  c                   $    e Zd Zed             ZdS )TestGaussianInversec                 8   t           | _        t           | _        t          | _        t           | _        t          | _        d}t          j        |          }t          j	        
                    d           dd|z  z   |dz  z   dt          j	                            |          z  z   }t          j        t          j        |df          ||dz  f         | _        dd|z  z   d	|dz  z  z   d
z  d	t          j	                            |          z  z   | _        t!          | j        | j        t"          j                            t"          j        j                                                            }|                                }|| _        ddlm}  |            | _        d S )NrG  rH        ?       @r   r   r   rI  rK  r  )GaussianInverse)rM  r   rr   r#  r{   r   rX   r7   rN  rO  rP  rU  rQ  rR  rS  y_invr   rh   ri   r)  rW  InversePowerr*  r?   r+  ra  rA   )r-  ry   rY  yInverseLink_ModelInverseLink_Resra  s          r$   r.  zTestGaussianInverse.setup_class  s`    $% )'&IdOO
	u#'MAqD 3)>)>#>>bgtAh''!Q$./#a%Z$q!t)+b04")//$:O:O3OO		35{++BK,=,J,J,L,LMMO O O+//11"888888"?$$r&   NrC  r)   r&   r$   r\  r\    s-        % % [% % %r&   r\  c                   <    e Zd Zed             Zd Zd Zd Zd ZdS )TestGlmBinomialc                    t           | _        t          | _        ddlm} ddlm}  |            }t          j	        |j
        d          |_
        t          j	        |j        d          |_        t          |j        d          |_        t          |j
        |j        t          j                                        	                                          | _         |            | _        d
S )V
        Test Binomial family with canonical logit link using star98 dataset.
        r   r  r   )Star98r  r  Fr  r  N)rM  rX   r$  r   statsmodels.datasets.star98r  r+  rk  r7   r(  rl   r  r   r   rh   ri   Binomialr*  r?   rA   )r-  r  rk  r'  s       r$   r.  zTestGlmBinomial.setup_class  s    
 '#444444//////tvvZ
===
Jtys;;;	 E:::	tz49 k22446 6 669cee 	 688r&   c                 r   ddl m}  |            }t          |j        d          |_        |j                            t                    }t          ||j        t          j	        
                                                                          }t          |j        | j        j                   |j                            t          j                  }t          ||j        t          j	        
                                                                          }t          |j        | j        j                   d S )Nr   r  Fr  r  )rl  r  r   r  rl   astypeintr   rh   ri   rm  r*  r   r@   r?   r7   double)rD   r  r'  rl   rA   res3s         r$   test_endog_dtypez TestGlmBinomial.test_endog_dtype  s    444444tvv E:::	
!!#&&5$)BK,@,@,B,BCCCGGIITY%5666
!!"),,5$)BK,@,@,B,BCCCGGIITY%566666r&   c                 L   t           j                            ddd          }t           j                            d          }t	          j        t          d          5  t          ||t          j	        
                                           d d d            d S # 1 swxY w Y   d S )	Nr   rG  )  r   size)ru  r   zendog has more than 2 columnsr   r  )r7   rO  randintstandard_normalr   raises
ValueErrorr   rh   ri   rm  )rD   reset_randomstaterl   r  s       r$   test_invalid_endogz"TestGlmBinomial.test_invalid_endog  s    	!!!Sy!99y((33]:-LMMM 	< 	<tBK$8$8$:$:;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   /BB Bc                    d}t           j                            |df          }t           j                            dd|                              t
                    }t          j        ||d d df         |d d df         d          }t          j	        t          d	          5  t          j                            d
|t          j                                                   d d d            d S # 1 swxY w Y   d S )N   r   rv  r   r   r   rd  x1x2zarray with multiple columnsr   y ~ x1 + x2r  )r7   rO  normalrx  ro  strr   	DataFramer   rz  r{  rh   r   from_formulari   rm  )rD   r|  nr  rl   r'  s         r$   test_invalid_endog_formulaz*TestGlmBinomial.test_invalid_endog_formula  s,   yaV,,	!!!QQ!//66s;;|%tAAAqDzaaadLLMM]:-JKKK 	? 	?Ft'){';';'='=   ? ? ?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   &?C22C69C6c                    | j         }d}|j        }|j        j        }|j        j                            |||          }|j        j                            |          |z  }|                                \  }}t          ||z  |d           t          ||z  |d           |j                            |j	        ||          }	|	j
        D ]*}
t          |j
        |
         |	j
        |
         d           +d S )Nr   )n_trialsr   r   )r?   r   rg   r  rT   r   r   r
   r   r@   r   )rD   r?   r   mu_probr  r   r   r   r   r   r   s              r$   !test_get_distribution_binom_countz1TestGlmBinomial.test_get_distribution_binom_count  s   y	#J
!227I<= 3 ? ?J%..w77)C	{{}}1!QU3333	Aqu5555 ,,T[)67 - 9 9 	G 	GAEJqM6;q>FFFFF	G 	Gr&   N)	r   r   r   r<  r.  rs  r}  r  r  r)   r&   r$   rh  rh    sn          [,	7 	7 	7< < <	? 	? 	?G G G G Gr&   rh  c                   *    e Zd Zed             Zd ZdS )TestGlmBernoullic                    ddl m}  |            | _        t          | j        j        | j        j        t          j                                                  	                                | _
        t          j        | j        j        | j        j                  }|	                    | j
        j        dz  d          | _        d S )Nr   )Lbwr  ?Fstart_paramsdisp)r+  r  rA   r   rl   r  rh   ri   rm  r*  r?   discreteLogitr@   r   )r-  r  modds      r$   r.  zTestGlmBernoulli.setup_classI  s    ,,,,,,355sx~sx} k22446 6 669cee 	 ~chnchm<<883)>U8KKr&   c                 h   | j         }| j        }|j                            |j        |j        j        d d df         dz            \  }}}d}t          ||d           |j                            |j        |j        j        d d df         dz            \  }}}d}t          ||d           t          t          d	                    }|	                    d
           t          |j        |j        j        d d |f         t          j                                                                                  }|j                            |j        |j        j        d d df                   }	t#          j        |	d d                                                   }	d}
t          |	|
d           d}d S )Nr   r   r   g"<laA)?rJ  r   r   ga}{?	      r  re   )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
        )r?   rA   rg   r   r@   r  r   listrangepopr   rl   ilocrh   ri   rm  r*  r7   asarrayravel)rD   r?   rA   r  r  r  st_resselectres1btrestres_rcmd_rs               r$   test_score_rzTestGlmBernoulli.test_score_rS  s   yyZ**4;6:joaaad6KQ6N + P P
B#F....Z**4;59Z_QQQT5JA5M + O O
B#F....eAhh

1DJ	qqq&y 9;//113 3 336355 	{%%el15B1G & I Iz$rr(##))++-f40000r&   N)r   r   r   r<  r.  r  r)   r&   r$   r  r  H  s?        L L [L& & & & &r&   r  c                   $    e Zd Zed             ZdS )TestGlmGammac                    d| _         t          | _        ddlm} ddlm}  |            }t          |j        d          |_        t          j
                    5  t          j        d           t          |j        |j        t          j                                        	                                          }d
d
d
           n# 1 swxY w Y   || _         |            }|xj        dz  c_        || _        d
S )zK
        Tests Gamma family with canonical inverse link (power -1)
        r`  r   r  r   )ScotvoteFr  r   r  Nr   )rr   r$  rX   statsmodels.datasets.scotlandr  r+  r  r   r  r   r   r   r   rl   rh   ri   rw   r*  r?   rq   rA   )r-  r  r  r'  r?   rA   s         r$   r.  zTestGlmGamma.setup_class  s5    &666666111111tvv E:::	$&& 	9 	9!(+++tz49 k//113 3 336355 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 xzz

a

s   ACC
CNrC  r)   r&   r$   r  r    s-          [  r&   r  c                   $    e Zd Zed             ZdS )TestGlmGammaLogc                 `   t           | _        t          | _        t           | _        ddlm}  |            }t          |j        |j	        t          j                            t          j        j                                                                                            | _        || _        d S )Nr   )	CancerLogrU   r  )r#  rX   r%  rr   r   r+  r  r   rl   r  rh   ri   rw   rW  rX  r*  r?   rA   )r-  r  rA   s      r$   r.  zTestGlmGammaLog.setup_class  s     '%#, 222222y{{tz49;$$"+*;*?*?*A*A$BBD D DDGCEE 	r&   NrC  r)   r&   r$   r  r    -        
 
 [
 
 
r&   r  c                   $    e Zd Zed             ZdS )TestGlmGammaIdentityc                    d| _         t          | _        t          | _        t
          | _        ddlm}  |            }t          j
                    5  t          j        d           t          j                            t          j        j                                                  }t#          |j        |j        |                                          | _        d d d            n# 1 swxY w Y   || _        d S )Nir   )CancerIdentityr   r  r  )rX   r$  rB   r%  rr   rM  r   r+  r  r   r   r   rh   ri   rw   rW  Identityr   rl   r  r*  r?   rA   )r-  r  rA   fams       r$   r.  z TestGlmGammaIdentity.setup_class  s%    "&%'777777~$&& 	D 	D!(++++##):)C)C)E)E#FFC4:ty===AACCCH	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D s   B	C$$C(+C(NrC  r)   r&   r$   r  r    s-          [  r&   r  c                   $    e Zd Zed             ZdS )TestGlmPoissonc                    ddl m} t          j                    | _        t          j        | j        j        d          | j        _        t          j        | j        j        d          | j        _        t          j	        | j        j        dddf                   | j        j        dddf<   t          | j        j        d          | j        _        t          | j        j        | j        j        t          j                                        	                                          | _         |            | _        t%          j        | j        j        | j        j                  }|                    | j        j        d
z  d          | _        dS )zi
        Tests Poisson family with canonical log link.

        Test results were obtained by R.
        r   )Cpunishr  r  Nr   Fr  r  r  r  )r+  r  r   r  r'  r7   r(  rl   r  logr   r   rh   ri   Poissonr*  r?   rA   r  r@   r   )r-  r  r  s      r$   r.  zTestGlmPoisson.setup_class  s0    	100000<>>CHNEEE
38=sCCC fSX]111a4%899aaad$SX]EBBBsx~sx} k11335 5 558SUU 	799>>883)>U8KKr&   NrC  r)   r&   r$   r  r    s2        L L [L L Lr&   r  c                   *    e Zd Zed             Zd ZdS )TestGlmInvgaussc                    t           | _        t           | _        ddlm}  |            }t          |j        |j        t          j	        
                                                                          }|| _        || _        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%  rr   r   r+  r  r   rl   r  rh   ri   rx   r*  r?   rA   )r-  r  rA   r?   s       r$   r.  zTestGlmInvgauss.setup_class  s|     &'111111xzz4:ty+55779 9 99< 	r&   c                 @   | j         }|j        j                            |j        |j                  }|j        j                            |j                  |j        z  }|                                \  }}t          |j        |d           t          ||d           d S )Nr   r   )	r?   rg   rT   r   r   rd   r   r
   r   )rD   r?   r   r   r   r   s         r$   r   z%TestGlmInvgauss.test_get_distribution  s    y
!2243D37:? ?J%..t/@AADJN	{{}}1)159999	15111111r&   N)r   r   r   r<  r.  r   r)   r&   r$   r  r    s<          [*2 2 2 2 2r&   r  c                   $    e Zd Zed             ZdS )TestGlmInvgaussLogc                 >   d| _         t          | _        ddlm}  |            }t          |j        |j        t          j	        
                    t          j	        j                                                                                            | _        || _        d S )Nr   )InvGaussLogr  r  )rr   r#  rX   r+  r  r   rl   r  rh   ri   rx   rW  rX  r*  r?   rA   )r-  r  rA   s      r$   r.  zTestGlmInvgaussLog.setup_class  s      &444444{}}tz49;..[&**,, / . ./ / //2suu 	 r&   NrC  r)   r&   r$   r  r    r  r&   r  c                   $    e Zd Zed             ZdS )TestGlmInvgaussIdentityc           	         d| _         t          | _        t          | _        ddlm}  |            }t          j                    5  t          j        d           t          |j
        |j        t          j                            t          j        j                                                                                            | _        d d d            n# 1 swxY w Y   ddlm}  |            | _        d S )Nr  r   )Medpar1r   r  r  )InvGaussIdentity)rr   r#  r   rB   r+  r  r   r   r   r   rl   r  rh   ri   rx   rW  r  r*  r?   r  rA   )r-  r  r'  r  s       r$   r.  z#TestGlmInvgaussIdentity.setup_class3  sD     #, &000000wyy$&& 	J 	J!(+++4:ty#%;#>#>%'[%6%?%?%A%A $? $C $CD D DDGCEE H	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J
 	:99999##%%s   BCCCNrC  r)   r&   r$   r  r  2  s-        & & [& & &r&   r  c                   $    e Zd Zed             ZdS )TestGlmNegbinomialc                    t           | _        t          | _        d| _        t           | _        ddlm}  |            | _        t          j
        | j        j        d          | j        _        t          j
        | j        j        d          | j        _        t          j        | j        j        dddf                   | j        j        dddf<   | j        j        dddf         | j        j        dddf         z  }t          j        | j        j        |f          | j        _        t          | j        j        d	
          | j        _        t!          j                    5  t!          j        dt&                     t)          j        t,                    5  t.          j                                        }ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t5          | j        j        | j        j        |                              d          | _        ddlm}  |            }|xj        dz  c_        || _         d| _!        dS )z=
        Test Negative Binomial family with log link
        r`  r   r  r  r  Nr   r   Fr  r   categoryr  r  rc   )	CommitteeT)"rM  decimal_residr#  rB   rX   r   statsmodels.datasets.committeer  r'  r7   r(  rl   r  r  rZ   r   r   r   r   r   r   r   r   rh   ri   rj   r   r*  r?   r+  r  rq   rA   r   )r-  r  interactionr  r  rA   s         r$   r.  zTestGlmNegbinomial.setup_classO  sx    &&#, 777777466CHNEEE
38=sCCCVCHM!!!A#$677aaachmAAAaC(qqqs);;{(CDD$SX]EBBB$&& 	5 	5!(]CCCCk** 5 5k22445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 sx~sx}  CdCOO 	222222y{{

a

"s6   5GF=1G=G	GG	GGGNrC  r)   r&   r$   r  r  N  s-        # # [# # #r&   r  c                   6    e Zd Zed             Zd Zd Zd ZdS )TestGlmPoissonOffsetc                    ddl m} t          | _        t          | _        d| _        t          j                    }t          j	        |j
                  |_
        t          j	        |j                  |_        t          j        |j        d d df                   |j        d d df<   t          |j        d          |_        dgt          |j
                  z  }|| _        || _        t#          |j
        |j        t$          j                                        |                                          | _         |            | _        d S )Nr   )Cpunish_offsetr   Tr  rG  rT   exposure)r+  r  r   rB   rM   rr   r   r  r7   r  rl   r  r  r   lenr'  r  r   rh   ri   r  r*  r?   rA   )r-  r  r'  r  s       r$   r.  z TestGlmPoissonOffset.setup_class  s   777777&#|~~Z
++
Jty))	&111a411	!!!Q$ D999	53tz??*tz49R[5H5H5J5J (* * **-#%% 	!>##r&   c                 "   | j         j                                        }t          j        |g d<   t          || j         j        t          j        	                                | j
        d          }t          |j
        j        d         d           d S )Nr   r         drop)rT   r  missingr      )r'  rl   rR   r7   nanr   r  rh   ri   r  r  r   r   )rD   rl   mods      r$   test_missingz!TestGlmPoissonOffset.test_missing  sz    	$$&&6iii%0C0C0E0E!]F< < <S\'*B/////r&   c                    t           j                            d           t           j                            ddd          }t           j                            d          }t           j                            ddd          }t           j                            ddd          }t          ||t          j        	                                ||	          
                                }|t          j        |          z   }t          ||t          j        	                                |
          
                                }t          |j        |j                   t          |j        |j        d           |j        }|                                }	t          |	d         |d           t          |	d         |j        d            |j        |j        |j        fi |	}
t          |
j        |j        d           t          |
j        |j        d           |j                                        }|j                                        }t          |j        |j        d           d S )N` r   rG   rG  rG  r   rv  r   r   )rT   offsetr  )rT   r  r   r   r  g+=r  )r7   rO  rP  rx  r  uniformr   rh   ri   r  r*  r  r   r@   r   nullrg   _get_init_kwdsr  	__class__rl   r  r  fit_regularized)rD   rl   r  r  r  mod1offset2mod2mod1_r   mod3resr1resr2s                r$   test_offset_exposurez)TestGlmPoissonOffset.test_offset_exposure  s   
	v	!!!R--yW--9$$Q3//""1a--5$r{':':'<'< 85 5 558SUU 	26(+++5$r{':':'<'<!# # ##&355 	DK555	4959999 
##%%Z((????X5AAAAuu{EJ??$??u~EBBBBU\>>>> 
**,,
**,,el??????r&   c                    t           j                            d           t           j                            ddd          }t           j                            d          }t           j                            ddd          }t          ||t          j        	                                |	          
                                }t           j                            d
          }t           j                            ddd          }|                    ||          }|                    |d|z            }t          |d|z             |                                }	|                    |          }
|                    ||          }t          |	|
           t          |
|           t           j                            ddd          }t          |||t          j        	                                          
                                }|                                }|                    d|          }|                    |d|          }	t          ||           t          ||	           t          ||t          j        	                                          
                                }t           j                            ddd          }t          j        t                    5  |                    ||d          }d d d            n# 1 swxY w Y   |                    |d|z  d          }t          |||z              t!          |                    |t#          j        |                    t           j                  sJ d S )Nr  r   rG   rG  r  rv  r   r   r  )rG   r   )r  r  )r  )r  rT   r	  )r   r  )r  r   r  r  T)r  r  linearr  )r  r  r   )r7   rO  rP  rx  r  r  r   rh   ri   r  r*  r   r   r   r   FutureWarningrf   r   r   ndarray)rD   rl   r  r  r  exog1	exposure1r  pred2pred3pred4pred5r  r  r  s                  r$   test_predictz!TestGlmPoissonOffset.test_predict  s_   
	v	!!!R--yW--9$$Q3//5$r{':':'<'<$& & &&)cee 		  f --I%%aB//	 %)<<%!I+>>E1U7+++ h//$::E5)))E5))) ""1a--5$v+--//1 1 114 	6&99$fVDDE5)))E5))) 5$r{':':'<'<===AACC""1a,,\-(( 	I 	ILLeF4LHHE	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I %&IIE5<000 LLebi	.B.BLCCJ
 
 	
 	
 	
 	
 	
s   (LLLN)r   r   r   r<  r.  r  r  r  r)   r&   r$   r  r    s]        $ $ [$"0 0 0@ @ @<-
 -
 -
 -
 -
r&   r  c                 t   | d d df         }| d d d df         }||dk             }||dk             }t          |d          }t          ||t          j                                                  }t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S )Nr`  r   Tr  r  )	r   r   rh   ri   rm  r   r   r   r*  )r;   rd  rS  glms       r$   test_perfect_predr    s    QQQUAQQQVA	!q&	A	!q&	AQ%%%A
a2;//11
2
2
2C	.	/	/  			                 s   B--B14B1c                  f   ddl m}  t          j                            d           d}d}t          j                            dd|df          }d|d d df<   dt          j        d|j        d         dz             z  }|                    |          |t          j        	                    |          z  z   } | ||          
                                } | ||d d d d	f                   
                                }|                    |d
          }t          ||d d d d	f         t          j                                                  
                                }	|	j                            |	j        |d d d	d f                   }
t'          |d         dz  dz  |
d         d           d S )Nr   r0     rG        ?r   rv  r^  re   F)demeanr  r   a   g      Y@r   r   )r5  r1  r7   rO  rP  r  rN  r   r8  rU  r*  compare_lm_testr   rh   ri   r)  rg   r   r@   r   )r1  ry   sigerY  betard  res_olsres_olsccores_glmco2s              r$   test_score_test_olsr    s   777777INN1DD
	!QdAY//AAaaadG	"agaj1n---D	ddRY__T2222Ac!QiimmooGs1a3B3i  $$&&H		 	 %	 	8	8B!Qqqq#2#vYr{';';'='=>>>BBDDG
-
"
"7>a233i
"
H
HCBqEBJ%s1vE::::::r&   c                     t           j        j                                        } | j        | j        }}t          j        ||          }t          |j        j	        j
        d           d|j        j	        _
        t          |j        j	        j
        d           t          j        ||          }t          |j        j	        j
        d           d S )Nr^  r_  )rh   datasetsr   r  rl   r  r   r   rT   rU   power)r'  rl   r  	glm_model
glm_model2s        r$   "test_attribute_writable_resettabler    s    ;##%%D*di4Eud##I!&,c222"$I!&,c222t$$J"'-s33333r&   c                   $    e Zd Zed             ZdS )TestStartParamsc                 :   t           | _        t          | _        t          | _        t           | _        ddlm}  |            | _	        t          | j	        j        d          | j	        _        t          j        | j	        j        | j	        j                                                  j        }t#          | j	        j        | j	        j        t          j                                                                      |          | _        ddlm}  |            | _        d	S )
r  r   r  Fr  r  r  r   r   N)r#  rX   r$  rB   r%  r   rM   r&  r  r'  r   r  rh   r1  rl   r*  r@   r   ri   r)  r?   r+  r!  rA   )r-  r  r@   r!  s       r$   r.  zTestStartParams.setup_class  s     '&##555555466$SX]EBBB66::<<Csx~sx}!{33557 7 77:ss7O7O 	000000799r&   NrC  r)   r&   r$   r  r    s-          [  r&   r  c                     t          j        d                                t                    } t          j        g d          }t          j        | |          } t          j        g d|          }t          j        | t          j        |          t
          j        	                                          }|
                    ddg          }t           j                            |j        dd	gd
           d S )Nz0 1 0 0 0 1)2   r   r!  r   r	  rG   )r   r   rK  rG  r`  r`  r  r  g2igF.u/r  )r7   arraysplitrp  repeatrh   r   r   ri   rm  r*  testingr   r@   )y2wtr  r  ress        r$   test_glm_start_paramsr+  1  s    	-%%''	-	-B	"""	#	#B	2r		B	((("	-	-B
&R_R((1E1E1G1G
H
H
HC
''Bx'
(
(CJ""3:[/I1MMMMMr&   c                     t          j        g d          t          j        dt           j                  fd} ddgddgddgfD ]~}t	          j        t	          j                  t          j                                                  }|	                    |d	          } | |          }t          ||j                   d S )
N)
r   r   r   r   r   r   r   r   r   r   rG   )dtypec                     | d         | d         z  z   }ddt          j        |           z   z  }t          j        t          j        |          z  dz
  t          j        d|z
            z  z             S )Nr   r   )r7   rT  r   r  )r@   lin_predprrY  rd  s      r$   rt   z test_loglike_no_opt.<locals>.llfB  sj    !9vay{*!bfhY'''(var

lac26!B$<<%77888r&   r   r   r
  r  )r  maxiter)r7   r  rN  float64rh   r   r   ri   rm  r*  r   rt   )rt   r@   r  r*  likerY  rd  s        @@r$   test_loglike_no_optr4  <  s     	
11122A
	"BJ'''A9 9 9 9 9 9
 Q%!AS	) + +fQ**2;3G3G3I3IJJJgg61g55s6{{D#'****	+ +r&   c                     dd l mc m}  g ddddt          j        gdgdz  t          j                            d          g dd	}t          j        |          }t          j
                            t          j
        j                                        
          }|                     d||j        |          }t!          t#          |j                  t          j        u d           t          j        t          j                            d                    }d|j        d<   t+          t,          | j        d|||           t+          t,          t.          |j        |ddg         ||           d S )Nr   )r   r   rG      r   r   r   r   rv  )r   r   r         ?)FooBarconstantr  rY  r  z	Foo ~ Bar)r'  r  rT   zExposure is not ndarrayr   r	  )r   r9  r:  r9  r  rT   )statsmodels.formula.apiformulaapir7   r  rO  r  r   r  rh   ri   r)  rW  rX  r  r  r   typer  r   locr   r{  r   r8  )smfdr  rT   r  r  s         r$   test_formula_missing_exposurerC  N  sp   )))))))))Aq"&(9S1W")*;*;*;*C*Cnn	 	A 
aB[!!r{'8'<'<'>'>!??F
''+B  ! !CD"*,2KLLLLy***2233HBF8*cg{#F4 4 4 4*c262z5.A+B#F4 4 4 4 4 4r&   c                    t           j                            d           d}t           j                            |df          }|d d df         |d d df         dz  z   }ddt          j        |           z   z  }dt           j                            |          |k     z  }t          j        ||t          j        	                                          }|
                                }dd l}ddlm}	 d	D ]}
|                    |
          } |	|j        d         d
           t!          t"          |           |                    |
          } |	|j        d         d
           t!          t"          |           |                    |
          } |	|j        d         d
           t!          t"          |            |j        ||d d df         |d d df         d          }t          j                            d|t          j        	                                          }|
                                }d	D ]}
ddg|
         }|                    |          } |	|j        d         d
           t!          t"          |           |                    |          } |	|j        d         d
           t!          t"          |           |                    |          } |	|j        d         d
           t!          t"          |           d S )Niz  r  r   rv  r   r   r  )
add_lowessr   r   r
  )fracr  r  r  r  )r7   rO  rP  r  rT  r  rh   r   ri   rm  r*  pandas$statsmodels.graphics.regressionplotsrE  plot_added_variableaxesr%   r"   plot_partial_residualsplot_ceres_residualsr  r  )close_figuresr  r  r/  probrl   rg   resultr   rE  jr#   r'  xnames                 r$   
test_plotsrS  e  s    INN3A9!Q((DAAAqDzDAJM)HBFH9%%%&D"""**T12EF5$r{';';'='=>>>EYY[[F??????  	  	 ((++
38A;S))))c3++A..
38A;S))))c3))!,,
38A;S))))c3 2<e41:T!!!Q$ZHHIIDFtBK<P<P<R<RSSEYY[[F 
  
 tQ((//
38A;S))))c3++E22
38A;S))))c3))%00
38A;S))))c3
  
 r&   c                 &   t           j                            d           t          j        } |                                |           }||j        k    r|dk    r6dt           j                            t          |                     |k     z  }nt          j	        t          |           df          }d}t           j                            t          |           |f          |d d d f         k     
                    d          |d d df<   ||d d df         z
  |d d df<   n||j        k    r t           j                            |          }n||j        k    r!t           j                            d|          }n||j        k    r4|dt           j                            t          |                     z  z   }nX||j        k    rddlm} |                    |d          }n0||j        k    rdd	lm}	 |	                    |d
          }nt.          |S )Nih  r   r   rv  r   rG   )nbinomr
  )invgauss   rc   )r7   rO  rP  rh   ri   inverserm  r  r  emptyr   r  poissonrw   gammar)  r  rj   scipy.stats.distributionsrU  rvsrx   rV  r{  )
r/  family_classrU   binom_versionr  rW   rl   r  rU  rV  s
             r$   	gen_endogr`    s   INN3
+C		!	!Bs|##Ary((c(mm(<<rABEEHc(mmQ/00EA9,,3x==!2D,EE111d7SXXYZ[[E!!!Q$KeAAAqDk/E!!!Q$KK		$	$	!!"%%		"	"	2&&		%	%Q))s8}})====	-	-	-444444

2s##	,	,	,666666Rr**Lr&   c                     t           j                            d           d} t           j                            | df          }d|d d df<   t           j                            |           }dD ]a}t          j                                        }t	          j        |||          }|                    |	          }|	                                }bd S )
Ni  rG  r   rv  r   r   )irlscgr  rA  )
r7   rO  rP  r  rh   ri   r)  r   r*  r   )r  r  rl   rB  farg   rsltss           r$   r   r     s    INN4A9!Q((DDAJI!$$E   [!!##ud2...yyy''LLNN	 r&   c                 t     j         } j                            |dz  d          } fd}t          |dz  |          }t	          ||dd            j                            |d          }t          ||          }t	          ||d            fd}t          ||          }t	          ||d           d S )	Nr   r   rc   c                 <    j                             | d          S r   )rg   rk   rY  r.   s    r$   <lambda>z%check_score_hessian.<locals>.<lambda>  s    w},,Qa,88 r&   rJ  rQ   r   c                 <    j                             | d          S r   )rg   r   ri  s    r$   rj  z%check_score_hessian.<locals>.<lambda>  s    w}**1A*66 r&   )r@   rg   r   r   r   r   r   )	r.   r@   scllfuncsc2hesshess2scfunchess3s	   `        r$   check_score_hessianrs    s     ^F			Vd]!		4	4B8888F
v
.
.CB$T2222=  q 11D''ED%d++++6666F&&))ED%d++++++r&   c                     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                            ||f          }d|d d df<   d}|D ]2\  }}|D ](}	dD ]!}
|| j        k    r|
dk    r||	f| j        |j        fk    rd	|                    d          z   }nF||	f| j        |j
        fk    rd
|                    d          dz  z   }n||	f| j        |j        fk    rd|                    d          z   }n||	f| j        |j
        fk    rd
|                    d          z   }n||	f| j        |j        fk    r=d	d|                    d          z  z   }t          j        |dt           j                  }nh||	f| j        |j        fk    rd|                    d          dz  z   }R||	f| j        |j        fk    rd|                    d          dz  z   }n||	f| j        |j        fk    r<d	d|                    d          z  z   }t          j        |dt           j                  }n||	f| j        |j        fk    r0dt           j                            |j        d                   z   }||	f| j        |j        fk    rd|                    d          dz  z   }nB||	f| j        |j        fk    rd}n+t           j                            |j        d                   }t7          |||	|
          }t9          j                    5  t9          j        d           t          j        || | |	                                }d d d            n# 1 swxY w Y   |                     d          }||	f| j        |j        f| j        |j        f| j        |j        ffvrtC          |           d|j"        fdfD ]\  }}|dk    r|rt9          j                    5  t9          j        d           t          j        || | |	                                }d d d            n# 1 swxY w Y   |                     ||dd          }tG          |j"        |j"        dd           tG          |j$        |j$        dd           tG          |j%        |j%        dd           |j&        }|'                    |j"        d          }t          j(        t          j)        t           j*        +                    |                               }tG          ||j&        dd           tG          |j&        |j&        dd           |                     dd |j"        dd!          }tG          |j&        |j&        dd           #*4d S )"N.U rG  r   rv  r   r   FrF  rW  r`  r  r   r	  rJ  r
  r   Tr   r  r  IRLSrA  r   Nr@  i,  )max_start_irlsr  rB  r1  rP   -C6
?rQ   r   皙?eim)rx  cov_typer  rB  r1  ),r7   rO  rP  rh   ri   rW  rm  r  ProbitCLogLogrX  Cauchyr  r  Sqrtrw   rc  r)  rx   InverseSquaredrj   r  r   clipinfr  r   r`  r   r   r   r   r*  rs  r@   r   rt   rd   rL   r   sqrtdiaglinalginv)r  lnkri   r  pr  skip_oner^  family_linksrU   r_  r/  rl   mod_irls	rslt_irlsrx  r  mod_gradientrslt_gradientgradient_bseehessrslt_gradient_eims                         r$   test_gradient_irlsr    s   
 INN5
+C
+
C	3:s{CGSZXYswch?@SWclC4DEFcgs7GHI$swc>NPSPb&cd%1A3CUWZWc'degH 	A	A9!Q((DDAJH&. X] X]"l  W	] W	]D!$ V] V]3<//MQ4F4F $'CK+FFF!DHHQKK/HH"D)clCG-DDD!DHHQKK!O3HH"D)ck38-DDD 488A;;HH"D)c.A37-KKK!DHHQKK/HH"D)c.A3<-PPP!AdhhqkkM1H!wxrv>>HH"D)c.A3CU-VVV"TXXa[[1_4H"D)c.A3CS-TTT 488A;;?2HH"D)c.BCL-QQQ!AdhhqkkM1H!wxrv>>HH"D)c.BCDV-WWW"RY%6%6DJqM%6%J%JJH"D)c.BCDT-UUU 488A;;?2HH"D)clC<L-MMM#HH
  "y00djm0DDH!(L$NN,.. U U)(333!veT,,DDFF:S:S:STTTHU U U U U U U U U U U U U U U %LLL77	$d+ch0G14C<L0M141Dcl0S02 2 2 (	222 67	8H4I94T  ]  ]0NL%))h) !022 ] ] -h777')veT,,TXTXTZTZB[B[B['\'\'\] ] ] ] ] ] ] ] ] ] ] ] ] ] ] %1$4$4NBN<Dc %5 %S %SM $M$8$-$44dL L L L $M$5y})-D: : : : $M$7)-D: : : : $1#4L(001EPU0VVE#%7BGBIMM%4H4H,I,I+I#J#JL#L)-dQUVVVV#M$5y}3UYZZZZ(4(8(8BGFSFZ@HRU )9 )W )W% $$5$99=tZ[\\\\\A ]mV]W	]X] X]s$   !>P+	+P/2P/5>S??TTc                     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                            ||f          }d|d d df<   d}|D ]\  }}|D ]}	dD ]}
|| j        k    r|
dk    r||	f| j        |j        fk    rd	|                    d          z   }nF||	f| j        |j
        fk    rd
|                    d          dz  z   }n||	f| j        |j        fk    rd|                    d          z   }n||	f| j        |j
        fk    rd
|                    d          z   }n||	f| j        |j        fk    r=d	d|                    d          z  z   }t          j        |dt           j                  }nh||	f| j        |j        fk    rd|                    d          dz  z   }R||	f| j        |j        fk    rd|                    d          dz  z   }n||	f| j        |j        fk    r<d	d|                    d          z  z   }t          j        |dt           j                  }n||	f| j        |j        fk    r0dt           j                            |j        d                   z   }||	f| j        |j        fk    rd|                    d          dz  z   }nB||	f| j        |j        fk    rd}n+t           j                            |j        d                   }t7          |||	|
          }t9          j                    5  t9          j        d           t          j        || | |	                                }d d d            n# 1 swxY w Y   |                     d          }d|j!        fdfD ]_\  }}|dk    r|rt9          j                    5  t9          j        d           t          j        || | |	                                }d d d            n# 1 swxY w Y   |                     ||dd          }tE          |j!        |j!        dd           tE          |j#        |j#        dd           tE          |j$        |j$        dd           |%                    |j!        d          }t          j&        t          j'        t           j(        )                    |                               }tE          ||j*        dd           ad S )Nru  rG  r   rv  r   r   FrF  rW  r`  r  r   r	  rJ  r
  r   Tr   r  r  rv  rA  rw  r@  r{  )rx  r  rB  optim_hessianrP   ry  rQ   r   )+r7   rO  rP  rh   ri   rW  rm  r  r}  r~  rX  r  r  r  r  rw   rc  r)  rx   r  rj   r  r   r  r  r  r   r`  r   r   r   r   r*  r@   r   rt   rd   r   r  r  r  r  rL   )r  r  ri   r  r  r  r  r^  r  rU   r_  r/  rl   r  r  rx  r  r  r  r  r  s                        r$   test_gradient_irls_eimr  H  s(   
 INN5
+C
+
C	3:s{CG #
 , -swch?@SWclC4DEFcgs7GHI$sw'*'7'*'9'; < %1A(+(:CL(J K	LH 	A	A9!Q((DDAJH&. U/ U/"l  T	/ T	/D!% S/ S/3<//MQ4F4F $'CK+FFF!DHHQKK/HH"D)clCG-DDD!DHHQKK!O3HH"D)ck38-DDD 488A;;HH"D)c.A37-KKK!DHHQKK/HH"D)c.A.1l.< < <!AdhhqkkM1H!wxrv>>HH"D)c.A.1.@.B B B"TXXa[[1_4H"D)c.A.1.>.@ @ @ 488A;;?2HH"D)c.B.1l.< < <!AdhhqkkM1H!wxrv>>HH"D)c.B.1.@.B B B"RY%6%6DJqM%6%J%JJH"D)c.B.1.>.@ @ @ 488A;;?2HH"D)clC<L-MMM#HH!y00djm0DDH!(L$NN,.. H H)(333!veT-9\ttvv-F-F-F H  H  HHH H H H H H H H H H H H H H H %LLL77	 789I5J5>5@ / /0NL &))h) !022 P P -h777')veT5A\ttvv5N5N5N(P (P (PP P P P P P P P P P P P P P P %1$4$4+9)5#+*/	 %5 % %M $M$8):J)-D: : : : $M$5y})-D: : : : $M$7)-D: : : : )001E:? 1 A AE#%7BGBIMM%4H4H,I,I+I#J#JL#L)-d)-/ / / / /=/iS/T	/U/ U/s$   !>P+	+P/2P/9>SS
Sc                     d\  } }t           j                            d           t           j                            | |dz
            }t	          |d          }|                    d          t           j                            |           z   }t          ||          }|                                }|                    dd          }|                    d	d          }|                    |j        d
          }	|||fD ]2}
t          |
j
        d         d           t          |
j        d           3t          |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)has_constantpinvT)
wls_method
attach_wlsqrbfgs)r  rB  	optimizerrv  r  lstsq
pinv_wexogexog_Q)r7   rO  rP  rU  r   r   r   r*  r@   r   mle_settingsrB  r   r   results_wlsrg   )ry   k_varsrY  r  rd  r  r?   rA   rr  res_g1rs              r$   test_glm_irls_methodr    s   LD&INN6
	fqj))A...Dbiood+++A
a,,C7799D77f766D77dt744DWW$+fW==FD$ ' 'Q^K0&999QXv&&&&"<0':::"<0&999"<0$777GD$*L99:::GD$*H55666 '''''r&   c                   ~    e Zd ZeZed             Zd ZeZd Z	eZ
	 d Zd Zd Zd ZeZd ZeZd	 ZeZd
 ZeZd ZdS )CheckWtdDuplicationMixinc                 \   t          j                    | _        t          j        | j        j                  | j        _        t          j        | j        j                  | j        _        | j        j        | _        | j        j        | _        t          j                            d           t          j        	                    ddt          | j                            | _        t          j        | j        | j                  | _        t          j        | j        | j        d          | _        d S )N  r	  rG  r   axis)r   r  r'  r7   r  rl   r  rO  rP  rx  r  weightr&  	endog_bigexog_big)r-  s    r$   r.  z$CheckWtdDuplicationMixin.setup_class  s    <>>CHN33
38=11HN	8=
	tY&&q#s39~~>>
	#)SZ88y3:A>>>r&   c                 T    t          | j        j        | j        j        dd           d S NrP   rI   r   r?   r@   rA   rC   s    r$   rE   z$CheckWtdDuplicationMixin.test_params  s6    	($)*:$!	# 	# 	# 	# 	# 	#r&   c                 T    t          | j        j        | j        j        dd           d S )NrH   rP   rQ   r   r?   rL   rA   rC   s    r$   rN   z-CheckWtdDuplicationMixin.test_standard_errors  s'    	ty}4dKKKKKKr&   c                 T    t          | j        j        | j        j        dd           d S r  )r   r?   rp   rA   rC   s    r$   test_aicz!CheckWtdDuplicationMixin.test_aic  s)     		ty}DtLLLLLLr&   c                 T    t          | j        j        | j        j        dd           d S r  r   r?   r~   rA   rC   s    r$   r   z&CheckWtdDuplicationMixin.test_deviance  s6    	*DI,>d!	# 	# 	# 	# 	# 	#r&   c                 T    t          | j        j        | j        j        dd           d S r  )r   r?   rd   rA   rC   s    r$   r   z#CheckWtdDuplicationMixin.test_scale  s'    	t$OOOOOOr&   c                 P    t          | j        j        | j        j        d           d S )NrP   )r   r?   rt   rA   rC   s    r$   r   z%CheckWtdDuplicationMixin.test_loglike  s$     		ty}d;;;;;r&   c                     t          j                    5  t          j        dt                     t	          | j        j        | j        j        dd           d d d            d S # 1 swxY w Y   d S Nr   rP   rI   )r   r   r   r   r   r?   r   rA   rC   s    r$   r   z+CheckWtdDuplicationMixin.test_null_deviance  s    $&& 	' 	'!(M:::DI3 I3!%!%' ' ' '	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   AA##A'*A'c                     t          j                    5  t          j        d           t          | j        j        | j        j        dd           d d d            d S # 1 swxY w Y   d S r  )r   r   r   r   r?   r   rA   rC   s    r$   r   z!CheckWtdDuplicationMixin.test_bic   s    $&& 	Q 	Q!(+++DIM49=4PPPP	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Q 	Qs   <AA!$A!c                     | j                             | j        j        j                  }t          | j        j        |dd           d S NrH   rI   )rA   r   r?   rg   r  r   r   )rD   res2_fitteds     r$   r   z*CheckWtdDuplicationMixin.test_fittedvalues'  sM    i''	(<==	.$!	# 	# 	# 	# 	# 	#r&   c                 $   t          | j        j        | j        j        dd           t          | j        j        | j        j        dd           t          | j                                        | j                                        dd           d S )NrP   g-C6*?rI   )r   r?   r   rA   r   r   rC   s    r$   r   z&CheckWtdDuplicationMixin.test_tpvalues.  s     		)49+<4!	# 	# 	# 	#	)49+<4!	# 	# 	# 	#	**,,di.@.@.B.B!	# 	# 	# 	# 	# 	#r&   N)r   r   r   r   rB   r<  r.  rE   rM   rN   rX   r  r   r   r   r   r   r   r   r   r   decimal_tpvaluesr   r)   r&   r$   r  r    s       N	? 	? [	?# # # KL L L NM M M
# # #P P P< < <
 &' ' ' KQ Q Q
 %# # #
 !# # # # #r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmPoissonc                    t                                                       t          j        | j                  | _        t          j        | j                  | _        t          | j        | j        | j        t          j	        
                                                                          | _        t          | j        | j        t          j	        
                                                                          | _        dS )?
        Tests Poisson family with canonical log link.
        rn   rT   r  N)superr.  r7   r  rl   r  r   r  rh   ri   r  r*  r?   r  r  rA   r-  r  s    r$   r.  zTestWtdGlmPoisson.setup_class;  s    
 	Jsy))	:ch''sy#(%(Z!{22446 6 669cee 	 s}cl!{22446 6 669cee 	r&   r   r   r   r<  r.  __classcell__r  s   @r$   r  r  9  sB        < < < < [< < < < <r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmPoissonNewtonc                    t                                                       t          j        g d          }t	          d          } t          | j        | j        | j        t          j
                                                  j        di || _        t	          d|          } t          | j        | j        t          j
                                                  j        di || _        dS )	r  gy\%'?g8:QigKsFgS'3gI.+@g084r@  rA  r  )rB  r  r  Nr)   r  r.  r7   r$  dictr   rl   r  r  rh   ri   r  r*  r?   r  r  rA   r-  r  fit_kwdsr  s      r$   r.  z#TestWtdGlmPoissonNewton.setup_classL  s   
 	x !B !B !B C C x(((:3sy#(%(Z!{22446 6 669F F<DF F xlCCC:3s}cl!{22446 6 669F F<DF Fr&   r  r  s   @r$   r  r  K  sK        F F F F [F F F F Fr&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmPoissonHC0c                    t                                                       t          j        g d          }t	          d          } t          | j        | j        | j        t          j
                                                  j        di || _        t	          d|          } t          | j        | j        t          j
                                                  j        di || _        dS )	r  r  HC0)r|  r  )r|  r  r  Nr)   r  r  s      r$   r.  z TestWtdGlmPoissonHC0.setup_classa  s    	x !B !B !B C C ''':3sy#(%(Z!{22446 6 669F F<DF F \BBB:3s}cl!{22446 6 669F F<DF Fr&   r  r  s   @r$   r  r  `  sK        F F F F [F F F F Fr&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmPoissonCluc           	         t                                                       t          j        g d          }t          j        dt          | j                  dz             dz  }t          d|dd          }dd	l} |j	                    5   |j
        d
            t          | j        | j        | j        t          j                                                  j        di || _        t          j        || j                  }t          d|dd          } t          | j        | j        t          j                                                  j        dd|i|| _        d	d	d	           d	S # 1 swxY w Y   d	S )r  r  r   r   clusterF)groupsuse_correction)r|  cov_kwdsr   Nr   r  r  r  r)   )r  r.  r7   r$  rN  r  rl   r  r   r   r   r   r  r  rh   ri   r  r*  r?   r&  r  r  rA   )r-  r  gidr  r   gidrr  s         r$   r.  z TestWtdGlmPoissonClu.setup_classw  s    	x !B !B !B C C i3sy>>A-..!3V[5\5\]]]$X$&& 		J 		J!H!(+++>s39ch),#%;#6#6#8#8: : ::=J J@HJ JCH 9S#*--DYD[`9a9abbbH>s3=#,#%;#6#6#8#8: : ::=J JKWJ@HJ JCH		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		J 		Js   CE00E47E4r  r  s   @r$   r  r  v  sK        J J J J [J J J J Jr&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmBinomialc                    t                                                       | j        dz  | _        | j        dz  | _        t	          | j        | j        | j        t          j        	                                          
                                | _        t	          | j        | j        t          j        	                                          
                                | _        dS )zB
        Tests Binomial family with canonical logit link.
        rG  r  r  N)r  r.  rl   r  r   r  r  rh   ri   rm  r*  r?   r  rA   r  s    r$   r.  zTestWtdGlmBinomial.setup_class  s     	IO	+sy#($'J k22446 6 669cee 	 s}cl k22446 6 669cee 	r&   r  r  s   @r$   r  r    sB        < < < < [< < < < <r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmNegativeBinomialc                 :   t                                                       d}t          j                    5  t          j        dt
                     t          j                            t          j        j	                            |          |          }t          | j        | j        | j        |                                          | _        t          | j        | j        |                                          | _        ddd           dS # 1 swxY w Y   dS )	zh
        Tests Negative Binomial family with canonical link
        g(p) = log(p/(p + 1/alpha))
        r^  r   r  )alpha)rU   r  r  r  N)r  r.  r   r   r   r   rh   ri   rj   rW  r   rl   r  r  r*  r?   r  r  rA   )r-  r  family_linkr  s      r$   r.  z&TestWtdGlmNegativeBinomial.setup_class  sD    	$&& 		5 		5!(]CCCC+66[&77e7DD 7  K 39ch(+
"-/ / //2suu H 3=#,"-/ / //2suu H		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5 		5s   CDDDr  r  s   @r$   r  r    sB        5 5 5 5 [5 5 5 5 5r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmGammac                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                                          | _        t          | j        | j        |                                          | _        dS )3
        Tests Gamma family with log link.
        r  r  Nr  r.  rh   ri   rw   rW  rX  r   rl   r  r  r*  r?   r  r  rA   r-  r  r  s     r$   r.  zTestWtdGlmGamma.setup_class  s     	k''(9(=(=(?(?@@sy#($'J)+ + ++.355 	 s}cl)+ + ++.355 	r&   r  r  s   @r$   r  r    sB        1 1 1 1 [1 1 1 1 1r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmGaussianc                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                                          | _        t          | j        | j        |                                          | _        dS )z6
        Tests Gaussian family with log link.
        r  r  N)r  r.  rh   ri   r)  rW  rX  r   rl   r  r  r*  r?   r  r  rA   r  s     r$   r.  zTestWtdGlmGaussian.setup_class  s    
 	k**2;+<+@+@+B+BCCsy#($'J)+ + ++.355 	 s}cl)+ + ++.355 	r&   r  r  s   @r$   r  r    B        
1 
1 
1 
1 [
1 
1 
1 
1 
1r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmInverseGaussianc                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                                          | _        t          | j        | j        |                                          | _        dS )z=
        Tests InverseGaussian family with log link.
        r  r  N)r  r.  rh   ri   rx   rW  rX  r   rl   r  r  r*  r?   r  r  rA   r  s     r$   r.  z%TestWtdGlmInverseGaussian.setup_class  s    
 	k11"+2C2G2G2I2IJJsy#($'J)+ + ++.355 	 s}cl)+ + ++.355 	r&   r  r  s   @r$   r  r    r  r&   r  c                   4     e Zd Ze fd            Zd Z xZS )TestWtdGlmGammaNewtonc                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                              d          | _        t          | j        | j        |                              d          | _        dS )r  r  r@  rA  r  Nr  r  s     r$   r.  z!TestWtdGlmGammaNewton.setup_class  s    
 	k''(9(=(=(?(?@@sy#($'J)   H-- 	 s}cl)  H-- 	r&   c                 2   t           j                            t           j        j                                                  }t          j        t          d          5  t          | j	        | j
        || j                   d d d            d S # 1 swxY w Y   d S )Nzunknown kwargsr   )rT   weights)rh   ri   rw   rW  rX  r   r   r   r   rl   r  r  )rD   r  s     r$   test_init_kwargsz&TestWtdGlmGammaNewton.test_init_kwargs  s    k''(9(=(=(?(?@@\,.>??? 	 	
DIk   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   #BBB)r   r   r   r<  r.  r  r  r  s   @r$   r  r    sQ        . . . . [.      r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdGlmGammaScale_X2c                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                              d          | _        t          | j        | j        |                              d          | _        dS )r  r  X2rc   r  Nr  r  s     r$   r.  z#TestWtdGlmGammaScale_X2.setup_class  s    
 	k''(9(=(=(?(?@@sy#($'J)   4 	 s}cl)  4 	r&   r  r  s   @r$   r   r     sB        ) ) ) ) [) ) ) ) )r&   r   c                   4     e Zd Ze fd            Zd Z xZS )TestWtdGlmGammaScale_devc                    t                                                       t          j                            t          j        j                                                  }t          | j        | j	        | j
        |                              d          | _        t          | j        | j        |                              d          | _        dS )r  r  devrc   r  Nr  r  s     r$   r.  z$TestWtdGlmGammaScale_dev.setup_class  s    
 	k''(9(=(=(?(?@@sy#($'J)   5)) 	 s}cl)  5)) 	r&   c                 >   | j         j                                        }| j         j                                        }t          j        |d<   t          j        |g d<   | j        }t          ||| j        j	        j
        |d          }t          |j        j        d         |j        j        d                    t          |j        j        d         |j        j        d                    t	          j        g d          }t          |j        | j        |                    d S )Nr   r   r  r  )rT   rn   r  r   )r   r   r	  r  r  rG         r           )r'  rl   rR   r  r7   r  r  r   r?   rg   rT   r   rn   r   r$  )rD   rl   r  rn   mod_misisngkeep_idxs         r$   r  z%TestWtdGlmGammaScale_dev.test_missing#  s   	$$&&y~""$$VT
 flll{%dio.D'3VE E E[-3A6 &,Q/	1 	1 	1[-3A6 %+A.	0 	0 	08KKKLL[-t{8/DEEEEEr&   )r   r   r   r<  r.  r  r  r  s   @r$   r  r    sX        * * * * [*F F F F F F Fr&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdTweedieLogc                    t                                                       t          j                            t          j        j                                        d          }t          | j        | j	        | j
        |                                          | _        t          | j        | j        |                                          | _        dS )zE
        Tests Tweedie family with log link and var_power=1.
        r   rU   	var_powerr  r  N)r  r.  rh   ri   TweedierW  rX  r   rl   r  r  r*  r?   r  r  rA   r  s     r$   r.  zTestWtdTweedieLog.setup_class4  s    
 	k))r{/@/D/D/F/F45 * 7 7sy#(%(Z*, , ,,/CEE 	 s}cl*, , ,,/CEE 	r&   r  r  s   @r$   r  r  3  B        2 2 2 2 [2 2 2 2 2r&   r  c                   $    e Zd Zed             ZdS )TestWtdTweediePower2c                 @   t          j                    | _        | j        j        | _        | j        j        ddg         | _        t
          j                            d           t
          j                            ddt          | j                            | _
        t          j        | j        j        | j
                  | _        t          j        | j        j        | j
        d          | _        t          j        j                                        }t          j                            |d	          }t)          | j        | j        | j
        |
                                          | _        t)          | j        | j        |                                          | _        dS )zJ
        Tests Tweedie family with Power(1) link and var_power=2.
        INCOMESOUTHr  r	  rG  r   r  r   r  r  r  N)r   load_pandasr'  rl   r  r7   rO  rP  rx  r  r  r&  r  r  r  rh   ri   rW  Powerr  r   r*  r?   rA   )r-  rU   r  s      r$   r.  z TestWtdTweediePower2.setup_classD  s8   
 &((HN	8=(G!45
	tY&&q#s39~~>>
	#)"2CJ??y#*1EEE{ &&((k))tq)AAsy#($'J)+ + ++.355 	 s}cl)+ + ++.355 	r&   NrC  r)   r&   r$   r  r  C  s-        1 1 [1 1 1r&   r  c                   .     e Zd Ze fd            Z xZS )TestWtdTweediePower15c                    t                                                       t          j                            t          j        j                            d          d          }t          | j        | j	        | j
        |                                          | _        t          | j        | j        |                                          | _        dS )zN
        Tests Tweedie family with Power(0.5) link and var_power=1.5.
        r
  r7  r  r  r  N)r  r.  rh   ri   r  rW  r  r   rl   r  r  r*  r?   r  r  rA   r  s     r$   r.  z!TestWtdTweediePower15.setup_classZ  s    
 	k))r{/@/F/Fs/K/K47 * 9 9sy#(%(Z*, , ,,/CEE 	 s}cl*, , ,,/CEE 	r&   r  r  s   @r$   r  r  Y  r  r&   r  c                  N   dd l } t          j                    }t          j        |j        d          |_        t          j        |j        d          |_        t          j        |j        d<   t          j        |j        g d<    | j        |j        |j	                  |_         |j        |j         d<   t          j
        dt          |j                  dz             }d	}t          j        ||j         |
          }t          |j        j        d         |j        j        d                    t          |j        j        d         |j        j        d                    t          |j        j        d         d           t          j        g d          }t          |j        |           d S )Nr   r  r  r  r  )columns
EXECUTIONSr   zXEXECUTIONS ~ INCOME + PERPOVERTY + PERBLACK + VC100k96 +
                 SOUTH + DEGREE)r'  rn   r
  )r   r   r  r  rG   r	  r
  r  r  r  r     )rH  r   r  r7   r(  rl   r  r  r  	exog_namerN  r  r   r  r   rn   r   r$  )r   r'  r  r=  r  keep_weightss         r$   test_wtd_patsy_missingr'  i  s{   <>>DDJS999DJ
493777DIfDIdO!vDJ|||",ty$.AAADK $
DKi3tz??1,--G#G"7079 9 9K)/2"(+- - -)/2!'*, , ,)/2B7778KKKLLL)<88888r&   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	CheckTweediec                 ~   t          | j        j                  dz
  }t          | j        j                  dz
  }t	          t          j        | j        j        d d         | j        j        |         gf          t          j        | j        j        d d         | j        j        |         gf          dd           t	          t          j        | j        j        d d         | j        j        |         gf          t          j        | j        j        d d         | j        j        |         gf          dd           t	          t          j        | j        j        d d         | j        j        |         gf          t          j        | j        j        d d         | j        j        |         gf          dd           t	          t          j        | j        j	        d d         | j        j	        |         gf          t          j        | j        j	        d d         | j        j	        |         gf          dd           d S )Nr   r$  rH   rQ   )
r  r?   r^   rA   r   r7   concatenater[   r\   r]   rD   idx1idx2s      r$   
test_residzCheckTweedie.test_resid  sd   49+,,q049+,,q0	(@"(E)-)A$)G(H(J K K	(@"(E)-)A$)G(H(J K K!		. 	. 	. 	.
 		(?(D)-)@)F(G(I J J	(?(D)-)@)F(G(I J J!		. 	. 	. 	.
 		(@"(E)-)A$)G(H(J K K	(@"(E)-)A$)G(H(J K K!		. 	. 	. 	. 		(?(D)-)@)F(G(I J J	(?(D)-)@)F(G(I J J!		. 	. 	. 	. 	. 	.r&   c                 T    t          | j        j        | j        j        dd           d S )NrP   g    .ArI   r  rC   s    r$   test_bsezCheckTweedie.test_bse  s'    	ty}4cJJJJJJr&   c                 T    t          | j        j        | j        j        dd           d S r  r  rC   s    r$   rE   zCheckTweedie.test_params  s6    	($)*:!	# 	# 	# 	# 	# 	#r&   c                 T    t          | j        j        | j        j        dd           d S r  r  rC   s    r$   r   zCheckTweedie.test_deviance  s6    	*DI,>T!	# 	# 	# 	# 	# 	#r&   c                     t          | j        j        | j        j                   t          | j        j        | j        j                   d S r   )r   r?   ro   rA   r   rC   s    r$   test_dfzCheckTweedie.test_df  s<    TY');<<<TY');<<<<<r&   c                 x   t          | j        j                  dz
  }t          | j        j                  dz
  }t          t          j        | j        j        d d         | j        j        |         gf          t          j        | j        j        d d         | j        j        |         gf          dd           d S )Nr   r$  rJ  rI   )r  r?   r   rA   r^   r   r7   r+  r,  s      r$   r   zCheckTweedie.test_fittedvalues  s    49)**Q.49+,,q0	(>ss(C)-)?)E(F(H I I	(>ss(C)-)?)E(F(H I I!		. 	. 	. 	. 	. 	.r&   c                 j    | j                                          | j                                          d S r   )r?   r   r   rC   s    r$   r   zCheckTweedie.test_summary  s0    		r&   N)
r   r   r   r/  r1  rE   r   r5  r   r   r)   r&   r$   r)  r)    s        . . .4K K K# # ## # #= = =. . .    r&   r)  c                   $    e Zd Zed             ZdS )TestTweediePower15c                    ddl m} t          j                    | _        | j        j        ddg         | _        | j        j        | _        t          j        	                    t          j        j
                            d          d          }t          j        | j        j        | j        j        ddg         |                                          | _         |            | _        d S )Nr   )CpunishTweediePower15r  r  r7  r  rl   r  rT   )r+  r;  r   r  r'  r  rl   rh   ri   r  rW  r  r   r*  r?   rA   )r-  r;  r  s      r$   r.  zTestTweediePower15.setup_class  s    >>>>>>&((8=(G!45HN	k))r{/@/F/Fq/I/I47 * 9 96"x}h-@A!,. . ..1cee 	 )(**r&   NrC  r)   r&   r$   r9  r9    s-        
+ 
+ [
+ 
+ 
+r&   r9  c                   $    e Zd Zed             ZdS )TestTweediePower2c                    ddl m} t          j                    | _        | j        j        ddg         | _        | j        j        | _        t          j        	                    t          j        j
                            d          d          }t          j        | j        j        | j        j        ddg         |                                          | _         |            | _        d S )Nr   )CpunishTweediePower2r  r  r_  r  r<  )r+  r@  r   r  r'  r  rl   rh   ri   r  rW  r  r   r*  r?   rA   )r-  r@  r  s      r$   r.  zTestTweediePower2.setup_class  s    ======&((8=(G!45HN	k))r{/@/F/Fq/I/I46 * 8 86"x}h-@A!,. . ..1cee 	 ('))r&   NrC  r)   r&   r$   r>  r>    s-        
* 
* [
* 
* 
*r&   r>  c                   $    e Zd Zed             ZdS )TestTweedieLog1c                    ddl m} t          j                    | _        | j        j        ddg         | _        | j        j        | _        t          j        	                    t          j        j
                                        d          }t          j        | j        j        | j        j        ddg         |                                          | _         |            | _        d S )Nr   )CpunishTweedieLog1r  r  r^  r  r<  )r+  rD  r   r  r'  r  rl   rh   ri   r  rW  rX  r   r*  r?   rA   )r-  rD  r  s      r$   r.  zTestTweedieLog1.setup_class  s    ;;;;;;&((8=(G!45HN	k))r{/@/D/D/F/F46 * 8 86"x}h-@A!,. . ..1cee 	 &%''r&   NrC  r)   r&   r$   rB  rB    s-        
( 
( [
( 
( 
(r&   rB  c                   $    e Zd Zed             ZdS )TestTweedieLog15Fairc                 T   ddl m} ddlm}  |            }t          j                            t          j        j                                        d          }t	          j	        |j
        |j        g d         |                                          | _         |            | _        d S )	Nr   )r  r   )FairTweedieLog15r7  r  )rate_marriageageyrs_marriedr<  )statsmodels.datasets.fairr  r+  rH  rh   ri   r  rW  rX  r   rl   r  r*  r?   rA   )r-  r  rH  r'  r  s        r$   r.  z TestTweedieLog15Fair.setup_class  s    999999999999{}}k))r{/@/D/D/F/F47 * 9 96
#y *9 *9 *9  :!,. . . /2cee 	 $#%%r&   NrC  r)   r&   r$   rF  rF    s-        & & [& & &r&   rF  c                       e Zd Zd Zd ZdS )CheckTweedieSpecialc                 T    t          | j        j        | j        j        dd           d S NrH   rQ   )r   r?   rW   rA   rC   s    r$   test_muzCheckTweedieSpecial.test_mu  s'    	dilDIIIIIIr&   c                    t          | j        j        | j        j        dd           t          | j        j        | j        j        dd           t          | j        j        | j        j        dd           t          | j        j        | j        j        dd           t          | j        j        | j        j        dd           d S rP  )r   r?   r^   rA   r[   r\   r]   rY   rC   s    r$   r/  zCheckTweedieSpecial.test_resid  s    	0$)2J!	. 	. 	. 	.	/1H!	. 	. 	. 	.	0$)2J!	. 	. 	. 	.	/1H!	. 	. 	. 	.	9	9!	. 	. 	. 	. 	. 	.r&   N)r   r   r   rQ  r/  r)   r&   r$   rN  rN    s5        J J J. . . . .r&   rN  c                   $    e Zd Zed             ZdS )TestTweedieSpecialLog0c                    t          j                    | _        | j        j        ddg         | _        | j        j        | _        t
          j                            t
          j        j        	                                          }t          j
        | j        j        | j        j        ddg         |                                          | _        t
          j                            t
          j        j        	                                d          }t          j
        | j        j        | j        j        ddg         |                                          | _        d S )Nr  r  r  r<  r   r  )r   r  r'  r  rl   rh   ri   r)  rW  rX  r   r*  r?   r  rA   r-  family1family2s      r$   r.  z"TestTweedieSpecialLog0.setup_class  s   &((8=(G!45HN	+&&BK,=,A,A,C,C&DD6"x}h-@A!(* * **-#%% 	 +%%2;+<+@+@+B+B01 & 3 36"x}h-@A!(* * **-#%% 	r&   NrC  r)   r&   r$   rT  rT    -        0 0 [0 0 0r&   rT  c                   $    e Zd Zed             ZdS )TestTweedieSpecialLog1c                    t          j                    | _        | j        j        ddg         | _        | j        j        | _        t
          j                            t
          j        j        	                                          }t          j
        | j        j        | j        j        ddg         |                                          | _        t
          j                            t
          j        j        	                                d          }t          j
        | j        j        | j        j        ddg         |                                          | _        d S )Nr  r  r  r<  r   r  )r   r  r'  r  rl   rh   ri   r  rW  rX  r   r*  r?   r  rA   rV  s      r$   r.  z"TestTweedieSpecialLog1.setup_class  s   &((8=(G!45HN	+%%2;+<+@+@+B+B%CC6"x}h-@A!(* * **-#%% 	 +%%2;+<+@+@+B+B01 & 3 36"x}h-@A!(* * **-#%% 	r&   NrC  r)   r&   r$   r[  r[    rY  r&   r[  c                   $    e Zd Zed             ZdS )TestTweedieSpecialLog2c                    t          j                    | _        | j        j        ddg         | _        | j        j        | _        t
          j                            t
          j        j        	                                          }t          j
        | j        j        | j        j        ddg         |                                          | _        t
          j                            t
          j        j        	                                d          }t          j
        | j        j        | j        j        ddg         |                                          | _        d S )Nr  r  r  r<  r   r  )r   r  r'  r  rl   rh   ri   rw   rW  rX  r   r*  r?   r  rA   rV  s      r$   r.  z"TestTweedieSpecialLog2.setup_class*  s   &((8=(G!45HN	+##):)>)>)@)@#AA6"x}h-@A!(* * **-#%% 	 +%%2;+<+@+@+B+B01 & 3 36"x}h-@A!(* * **-#%% 	r&   NrC  r)   r&   r$   r^  r^  )  rY  r&   r^  c                   $    e Zd Zed             ZdS )TestTweedieSpecialLog3c                    t          j                    | _        | j        j        ddg         | _        | j        j        | _        t
          j                            t
          j        j        	                                          }t          j
        | j        j        | j        j        ddg         |                                          | _        t
          j                            t
          j        j        	                                d          }t          j
        | j        j        | j        j        ddg         |                                          | _        d S )Nr  r  r  r<  r   r  )r   r  r'  r  rl   rh   ri   rx   rW  rX  r   r*  r?   r  rA   rV  s      r$   r.  z"TestTweedieSpecialLog3.setup_class;  s   &((8=(G!45HN	+--2;3D3H3H3J3J-KK6"x}h-@A!(* * **-#%% 	 +%%2;+<+@+@+B+B01 & 3 36"x}h-@A!(* * **-#%% 	r&   NrC  r)   r&   r$   ra  ra  :  rY  r&   ra  c                 p   t           j                            d           d}t           j                            |df          }t          j        |t           j        d                   }t          j        |          }d|d| z
  z  z  d| z
  z  }d| z
  | dz
  z  }d|d| z
  z  z  | dz
  z  }t          j        |          }t           j                            |          }	t          |          D ]G}
t           j        
                    |d||
         z  |	|
                                                   ||
<   H||fS )	N    r   rv  r   r`  r   r
  rG   r   r   )r7   rO  rP  r  r8  r_rT  rY  rZ  r  r[  r   )r  r  rY  lprrW   lamalpbetrd  Nis              r$   gen_tweediern  J  s   INN4A
	q!f%%A
&BE-(
)
)C	B
rAE{
a!e
$Cq5QU
C
rAE{
a!e
$C 	A
	#A1XX < <ysAAJ!5599;;!a4Kr&   zignore:GLM ridge optimizationc            	      \   d} t          |           \  }}t          j                            | d          }t          j        |||          }|                    d          }t          |j        t          j	        g d          dd	           t          j        |||          }|                    d
          }t          |j        |j                   t          |j
        |j
        d           t          j        |||          }|                    dddd          }	d\  }
}t          |	j        t          j	        g d          |
|	           t          j	        g d          t          j	        g d          t          j	        g d          f}t          g d          D ]\  }}t          j        |||          }|                    d|          }t          |j        ||         |
|	           |                    d|t          j        |j        d                   z            }t          |j        |j        |
|	           |t          j        |j        d                   z  }d|d<   |                    d|          }t          j        |j        |j                  rJ d S )Nr7  Tr  eqlr  r@  rA  )g`8:[?g%gcxp?g
m:?rH   rQ   rb  {Gz?r   r   gQ?r  )L1_wtr  r1  	cnvrg_tol)rr  rJ  )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   rs  r  )rn  rh   ri   r  r   r*  r   r@   r7   r$  rL   r  	enumeraterR  r   allclose)r  rd  rY  r  model1result1model1xresult1xmodel2result2rK   rJ   evrQ  r  model3result3result4result5s                      r$   test_tweedie_EQLr  ]  s   
 	Aq>>DAq +

t

4
4CVAq%%%Fjjj))GGN	xAAABBt   
 fQ#&&&G{{&{))HGNHO444GKD9999
 VAq%%%F$$1D#! % # #G JD$GN
44455   
 (:::
;
;
(CCC
D
D
(<<<
=
=
?B ...// 	? 	?51S)))((q(>>1DtDDDD((qPQ
@S@S8S(TTTMMMM
+++a((q(>>;w~w~>>>>>>	? 	?r&   c                     d} t          |           \  }}t          j                            | d          }t          j        |||          }g }t          j        ddd          D ][}|                    d|	          }|                    t          j	        |j
                  dk                                               \t          j        |          }t          |          d
k    sJ d S )Nr7  Trp  r  r   rG   rW  r
  rv  r	  )rn  rh   ri   r  r   r7   linspacer  appendr   r@   r   uniquer  )r  rd  rY  r  ry  nnzr  rz  s           r$   test_tweedie_elastic_netr    s     	Aq>>DAq +

t

4
4CVAq%%%F
CQB'' 7 7((s%(@@

BF7>**Q.33556666
)C..Cs88q======r&   c                     t           j                            d           d} t           j                            | df          }d|d d df<   d|d d dd f                             d          z   }t          j        |          }t           j                            |          }dD ]}t          j        	                    dd	
          }t          j
        |||          }|                    d|          }t          j
        ||t          j                                                  }	|	                    d|          }
t          |j        |
j        dd           t          |j        |
j        dd           d S )Nrd  re  r   rv  r   r   r   )r^  r  r  Trp  r  r@  rB  rd   rP   rI   )r7   rO  rP  r  r   rT  rZ  rh   ri   r  r   r*  r  r   r@   rL   )r  rY  rh  mnrd  rd   r  ry  rz  r}  r~  s              r$   test_tweedie_EQL_poisson_limitr    sa    INN4A
	q!f%%AAaaadG
a122hll1oo
C	B
	"A! > > k!!A4!881S)))**HE*:: 1R[%8%8%:%:;;;**HE*::TMMMMW[$====> >r&   c                  D   t           j                            d           d} t           j                            | df          }d|d d df<   d|d d dd f                             d          z   }t          j        |          }t           j                            |          }dD ]y}t          j        	                    d	d
          }t          j
        |||          }|                    d|          }t          |j        t           j        d         dd           zd S )Nrd  re  r   rv  r   r   r   )r  r  r^  r   Trp  r  r@  r  )r   r   r   rK  r   rI   )r7   rO  rP  r  r   rT  rZ  rh   ri   r  r   r*  r   r@   rg  )	r  rY  rh  r  rd  rd   r  ry  rz  s	            r$   test_tweedie_EQL_upper_limitr    s   
 INN4A
	q!f%%AAaaadG
a122hll1oo
C	B
	"A! N N k!!A4!881S)))**HE*::gTMMMMMN Nr&   c            
         t          j                    } g d}t          j        || j        ddg         t          j                            t          j        j                                        d                    }|	                                }t          j        ||j
        z
  dz  t          j        t          j        t          |j
                            t          j        |j
                  f          t          j                            t          j        j                                                            }|	                                }|                    |j
                  }t%          ||j        d         d	
           d S )N)g(\q@gC@gQ,D@g̒$@gl ]l@go@g<m%@gcv7ˌ@g~Ӥ?g"?gQ75>g ;#Pg>geҞ>ru  ru  ru  ru  r  r  r7  r  r  r   r   g      ?r   )r   r  rh   r   r  ri   r  rW  rX  r*  rW   r7   rZ   rR  r  r  rw   estimate_tweedie_powerr   r@   )r'  rd  ry  r?   r}  rA   r  s          r$   testTweediePowerEstimater    sI   .   D	+ 	+ 	+A VAty(G!45;..BK4E4I4I4K4K9< / > >? ? ?F ::<<DVQ[Q&ORWS\\%:%:BF47OO$LMM;,,R[->-B-B-D-DEEG G GF ::<<D 	%%dg..AAt{1~D111111r&   c            	         t           j                            d           ddlm}  d}t          j        |df          }t          j        d|          |d d df<   d|d d df         z   t           j                            dd|          z   }t           j        d         }d	D ]m}| t          fD ]a}d
D ]\} |||          }|| k    r|
                    d|          }	n|                    dd |          }	t          ||	j        dd           ]bnd S )N{   r   r0  r!  r   r   ru  )gK1]>@gZY@?)r  N)r   r   )r  rs  )r  r  rB  rP   rI   )r7   rO  rP  r5  r1  rR  rN  r  rg  r   r  
_fit_ridger   r@   )
r1  r  rY  rd  r@   rB  fun
L1_wtValuerg   r*  s
             r$   test_glm_lasso_6431r    sO    INN3777777
A
AAi1ooAaaadGqAw))!Q222AU*+F J J: 	J 	JC
 ( J J
Aq		#:://az/JJCC**f*UUC
DIIIIIJ	JJ Jr&   c                       e Zd Zd ZdS )TestRegularizedc           	      2   dd l }ddlm} dD ]}|j                            |j                            t                              }t          j        |j        	                    |dd|z            d          }|d d df         |d d dd f         }t          j        j        t          j        j        d|         }t          d	          D ]}d
||fz  }	t          ||	          }
|
d         |
d         |
dd          }t!          | |                                                    }t%          ||j        dd           fd} ||          } ||j                  }t)          t          j        ||z
            d           Őd S )Nr   r   )glmnet_r_results)binomialrZ  r.   zenet_%s.csvr/   )r0   r  z
rslt_%s_%dr   r  rv  rr  g333333?rI   c           	                               |           t                    z  }|dz
  t          j        | dz            z  dz  t          j        t          j        |                     z  z   z  z
  }|S )Nr   r   )rk   r  r7   r   r   )r@   rt   rs  r  rl   rg   s     r$   plfz-TestRegularized.test_regularized.<locals>.plf?	  sr    --//#e**<C!e)RVFAI5F5F)F)JUSUSYZ\Z`agZhZhSiSiMi)i jjCJr&   )r2   r.   r  r3   r4   r5   r6   r7   loadtxtr9   rh   ri   rm  r  r  r   r   r  r   r@   r   sign)rD   r2   r  r-  r:   r'  r  r  rQ  vnr_resultr@   	sm_resultr  llf_rllf_smrs  r  rl   rg   s                   @@@@r$   test_regularizedz TestRegularized.test_regularized	  s   			------* #	9 #	9Egoobgooh&?&?@@G:bgll7I}u?TUU(+- - -D AJE122;D " 4!{24 449;C 1XX 9 9!UAJ."#3R88  !!""E4666!11U1KK	  	(8t#NNNN        FY-..RWVe^44a8888/9#	9 #	9r&   N)r   r   r   r  r)   r&   r$   r  r  	  s#        )9 )9 )9 )9 )9r&   r  c                   P    e Zd Zed             ZddZd Zd Zd Zd	 Z	d
 Z
d ZdS )TestConvergencec                     ddl m}  |            }t          |j        d          |_        t	          |j        |j        t          j                                                  | _	        dS )rj  r   r  Fr  r  N)
rl  r  r   r  r   rl   rh   ri   rm  rg   )r-  r  r'  s      r$   r.  zTestConvergence.setup_classK	  sj    
 	544444tvv E:::	
DI " 4 4 6 68 8 8			r&   r3  r   r~   c                    t          | j        j        |                   D ]T\  }}| j        j        |         |         }| j        j        |         |dz            }t          j        ||||          r|c S Ut          d          )Nr   rI   z2CONVERGENCE CHECK: It seems this doens't converge!)rw  r*  fit_historyr7   rx  r{  )rD   rJ   rK   tol_criterionrm  r  orignews           r$   _when_convergedzTestConvergence._when_convergedV	  s     4] CDD 	 	FAs8'6q9D(&}5a!e<C{44d;;; NOOOr&   c                 "   d}d}| j                             ||          | _        |                     ||          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr3  r   rI   	iterationr~   r   rg   r*  r*  r  r  r   r  rD   rJ   rK   expected_iterationsactual_iterationss        r$   test_convergence_atol_onlyz*TestConvergence.test_convergence_atol_only^	  s    :>>t$>77"2242HH H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   c                 "   d}d}| j                             ||          | _        |                     ||          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr   r3  rI   r  r~   r   r  r  s        r$   test_convergence_rtol_onlyz*TestConvergence.test_convergence_rtol_onlyl	  s    :>>t$>77"2242HH H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   c                 "   d}d}| j                             ||          | _        |                     ||          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr3  rI   r  r~   r   r  r  s        r$   test_convergence_atol_rtolz*TestConvergence.test_convergence_atol_rtolz	  s    :>>t$>77"2242HH H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   c                 &   d}d}| j                             ||d          | _        |                     ||d          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr3  r   r@   rJ   rK   r  r  r~   r   r  r  s        r$   !test_convergence_atol_only_paramsz1TestConvergence.test_convergence_atol_only_params	  s    :>>t$h>OO"224AI 3 K K H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   c                 &   d}d}| j                             ||d          | _        |                     ||d          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr   r3  r@   r  r  r~   r   r  r  s        r$   !test_convergence_rtol_only_paramsz1TestConvergence.test_convergence_rtol_only_params	  s    :>>t$h>OO"224AI 3 K K H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   c                 &   d}d}| j                             ||d          | _        |                     ||d          }| j        j        d         }t          ||           t          t          | j        j        d                   dz
  |           d S )Nr3  r@   r  r  r~   r   r  r  s        r$   !test_convergence_atol_rtol_paramsz1TestConvergence.test_convergence_atol_rtol_params	  s    :>>t$h>OO"224AI 3 K K H0=
 	(*;<<<S-j9::Q>&	( 	( 	( 	( 	(r&   N)r3  r   r~   )r   r   r   r<  r.  r  r  r  r  r  r  r  r)   r&   r$   r  r  J	  s        8 8 [8P P P P( ( (( ( (( ( (( ( (( ( (( ( ( ( (r&   r  c                     t           j                            d           d\  } }t          j        t           j                            | |                    }t          j        |                    d                    }t           j                            ||           }t          j	        ||d d d d f         t          j
        j                                                  }|                                }|j        }|j        }|j                            ||dz             |j                            ||j                  z
  dz  }	t'          ||dz                                  d	           t'          ||	d	           t          j	        ||d d dd f         t          j
        j                                                  }
|
                                }|j        }|j        }|j                            ||dz             |j                            ||j                  z
  dz  }	t'          ||dz                                  d	           t'          ||	d	           d S )
NiS )r!  r   r   rv  r  r   r   g-q=r   )r7   rO  rP  rh   r   rU  rT  r   rZ  r   genmodri   r  r*  r\   r~   rT   rk   r   r   )ry   r  rY  mu_truerd  r  r*  d_irB  lrmod_ncres_ncs               r$   test_poisson_deviancer  	  s   INN6LD&
	f5566AfQUU1XXG
	'--A
&AaaadGBI$6$>$>$@$@
A
A
AC
''))C

CA
*

Q%
(
(
*

Q 0
1
1256
7B AQ||~~E2222Ar&&&& VAqABBx	(:(B(B(D(DEEEFZZ\\F

CA
*

Q%
(
(
*

Q 3
4
4589
:B AQ||~~E2222Ar&&&&&&r&   c                     t          j                    } d| j        d d <   t          j                    5  t          j        d           t          j        | j        | j        t          j	        
                                          }|                    ddd          }|                                 d d d            d S # 1 swxY w Y   d S )Nr   r   r  r  r   )r1  rB  rx  )r   r  rl   r   r   r   rh   r   r  ri   rw   r*  r   r'  r  r*  s      r$   )test_non_invertible_hessian_fails_summaryr  	  s      DDJqqqM		 	"	"   	h'''fTZ2;3D3D3F3FGGGggaqgAA                 s   A>B>>CCc                  B   t          j                    } t          | j        | j        t
          j                                                  }|                    d          }t          |j
        t          j                  sJ |j        j        t          j        k    sJ d S )Nr  r   rc   )r   r  r   rl   r  rh   ri   r)  r*  rf   r@   r   r   rd   r-  r7   r2  r  s      r$   test_int_scaler  	  s}    <>>D
dj$)BK,@,@,B,B
C
C
CC
'''

Ccj"),,,,,9?bj((((((r&   r-  c                 p   d\  }}}}||g}t          j        ddgddgg                              |           }t          j        ||g          }t          |||t          j                                                  }|                    dd          }	t          |	j	        t           j
                  sJ d S )N)<   g    "@   gffff@r   r   r;  r  )rB  rx  )r7   r  ro  r   rh   ri   r  r*  rf   r@   r  )
r-  count1n1count2n2rd  rY  r  r  r*  s
             r$   test_int_exogr  	  s     6FB	A

QFQF#$$++E22Az2r(##H
aXbk.A.A.C.C
D
D
DC
'''
2
2Ccj"*-------r&   c                 X   t           j        t          j        d          | dd d df         f         }t          j        |           dd df                             t           j                  }|dz  }t          d           t          ||t          j	        
                                                                          }t          |j        dd	           t          |j        dd	           t          d
           t          |j        |j        d	           t          d            d S )NrG  r!  r   r   Tr  g6<RvA@r   )decimalF)r7   rQ  rR  r$  ro  int32r   r   rh   ri   rm  r*  r   r   bic_llfbic_deviancer;   rS  rd  rg   s       r$   test_glm_bicr  	  s   
bgcllDbqbM)*A
rssAv%%bh//AFAD1R[113344488::E	7A6666w::::E	5#5qAAAADr&   c                    t           j        t          j        d          | dd d df         f         }t          j        |           dd df                             t           j                  }|dz  }t          ||t          j        	                                          
                                }t          j        t          d          5  t          |j        t                     sJ 	 d d d            d S # 1 swxY w Y   d S )NrG  r!  r   r   r  zThe bicr   )r7   rQ  rR  r$  ro  r  r   rh   ri   rm  r*  r   r   r  rf   r   r   r  s       r$   test_glm_bic_warningr  
  s    
bgcllDbqbM)*A
rssAv%%bh//AFA1R[113344488::E	m9	5	5	5 , ,%)U++++++, , , , , , , , , , , , , , , , , ,s   C99C= C=c                 ,   d t          d          D             }t          j                            d                              ddd          }fdt          ||          D             }t          |          }t          |||t          j	        
                                                                          }t          ||d d df         |t          j	        
                                                                          }t          ||d d df         t          j	        
                                	                                          }t          |j        |j                   t          j        |j        |j        z
            d
k    sJ d S )Nc                 B    g | ]}t          j        |d z            dz   S )rW  r   )r7   sin).0rm  s     r$   
<listcomp>z-test_output_exposure_null.<locals>.<listcomp>
  s)    	2	2	2"&R..1
	2	2	2r&   ru  r   rG  r  rv  c                 h    g | ].\  }}t          j                            ||                     /S )rv  )r7   r   rZ  )r  rY  erss      r$   r  z-test_output_exposure_null.<locals>.<listcomp>
  s7    EEE41a

11
%%	&	&EEEr&   )rl   r  r  rT   r<  r   )r  r7   rO  RandomStaterx  zipr   r   rh   ri   r  r*  r   llnullrt   r   )	r|  x0r  rd  rY  rg   
null_modelnull_model_without_exposurer  s	           @r$   test_output_exposure_nullr  
  s{    
3	2eDkk	2	2	2B			q	!	!Bzz#sz..HEEEE3r83D3DEEEARAa(2;3F3F3H3H  	cee 
 a1g9L9L9N9N  	cee  #&a1gbk&9&9&;&;# # #	cee   EL*.1116-1EL@AAAEEEEEEr&   c                     dd l } t          j        t          j        d          t          j        d          f          }dgdz  dgdz  z   }g d}t	          j        |||d          }d|d         z
  |d	<   |d         |d
<   |d	dg         j        }|                     d|d          }t          ||t          j
                                                  }|                                }d}	|                    d|	          }
t          |
ddd           |                    d|	d          }t          |ddd           d S )Nr   r  MF)rG   r   r  r
     rW  r   r   r  rG   r
  r  )ldosesexnumdeadrW  r  numaliveSFz	sex*ldose	dataframe)r'  return_typer  g8 "5M@qaic)critrd   g|y!=@rH   rQ   r   )r  rd   	dk_paramsg|y!?@)patsyr7   r+  rN  r   r  r  dmatrixr   rh   ri   rm  r*  info_criteriar   )r  r  r  r  r  rd  rY  r   r  rd   r  qaic1s               r$   	test_qaicr  )
  sI    LLLNBIaLL")A,,788E%'SE!G
C999G	cgFF	G	GB"Y-'BzN)}BtH
J	"#*AkDDAAq--//000A	AE??e?44D D(D9999OOuOBBEE8$T::::::r&   c                     t           j                            d           d} t           j                            | df          }t          j        |t           j        d                   }t          j        |          }d}d|d|z
  z  z  d|z
  z  }d|z
  |d	z
  z  }d|d	|z
  z  z  |d	z
  z  }t          j        |           }t           j                            |          }	t          |           D ]G}
t           j        
                    |d	||
         z  |	|
                                                   ||
<   Hd
D ]}dD ]}|du rt          rt          j        d           t          j                            ||          }t%          |||                                          }|j        dt           j                            |j        j                  z  z   }t-          |fd          }                    |d	          }t1          ||dd           t3          |fd          }                    |d	          }t1          ||dd           !d S )Nrd  re  r   rv  rf  r7  rG   r   r   )TF)r   r7  r   Fz%skip, scipy too old, no bessel_wrightrp  r  rz  c                 2                         | d          S r   rk   rY  rg   s    r$   rj  z$test_tweedie_score.<locals>.<lambda>a
  s    5==!=3L3L r&   rc   r3  rI   c                 2                         | d          S r   r  r  s    r$   rj  z$test_tweedie_score.<locals>.<lambda>e
  s    q1J1J r&   gHj>)r7   rO  rP  r  r8  rg  rT  rY  rZ  r  r[  r   r   r   r   rh   ri   r  r   r*  r@   rw  r   r   r   r   r   )r  rY  rh  rW   p0ri  rj  rk  rd  rl  rm  rq  r  r  rP  pangradagradnhessahessrg   s                       @r$   test_tweedie_scorer  E
  sY   INN4A
	q!f%%A
&BE-(
)
)C	B	B
rAF|
q2v
&Cr6b1f
C
rAF|
rAv
&C
A
	#A1XX < <ysAAJ!5599;;! @ @ 	@ 	@Ae|||CDDD+%%s%;;C1S)))EYY[[FRY%5%56=;M%5%N%N!NNB$R)L)L)L)LMMEKK!K,,EE5t$????"2'J'J'J'JKKEMM"AM..EE5t$?????!	@@ @r&   )r   )r   r2   r   numpyr7   numpy.testingr   r   r   r   r   r   rH  r   pandas.testingr	   r   scipyr
   statsmodels.apir>  rh   statsmodels.compat.scipyr   statsmodels.datasetsr   r   statsmodels.discreter   r  +statsmodels.genmod.generalized_linear_modelr   r   statsmodels.tools.numdiffr   r   r   r   statsmodels.tools.sm_exceptionsr   r   r   statsmodels.tools.toolsr   r   r#  r$  rM  r%  r    matplotlib.backends.backend_pdfr   r"   r%   r*   fixturer;   r=   r   r  r>  rE  r\  rh  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r4  rC  r   
matplotlibrS  r`  r   r   rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r'  r)  r9  r>  rB  rF  rN  rT  r[  r^  ra  rn  filterwarningsr  r  r  r  r  r  r  r  r  r  r  parametrizeint8int16r  int64r  r  r  r  r  r  r)   r&   r$   <module>r$     s    
			                         . . . . . .              - - - - - - 1 1 1 1 1 1 1 1 ; ; ; ; ; ; L L L L L L L L                    
 1 0 0 0 0 0 					
 888888
(>
"
"CC
C  
  
 h7 7  7AH AH AH AH AH AH AH AHH:A :A :A :A :A :A :A :Az9A 9A 9A 9A 9A, 9A 9A 9AJ    o   .! ! ! ! !, ! ! !>% % % % %0 % % %>GG GG GG GG GG, GG GG GGJ1 1 1 1 1-/C 1 1 1R    )   6    ,   0    1   2L L L L L+-A L L L82 2 2 2 2, 2 2 2B    /   0& & & & &4 & & &8# # # # #/ # # #nf
 f
 f
 f
 f
1 f
 f
 f
R	 	 	; ; ;*	4 	4 	4    ,   ,N N N+ + +$4 4 4. *  *  * X   D   , , ,&n] n] n]bo/ o/ o/d( ( (:_# _# _# _# _# _# _# _#D< < < < <0 < < <$F F F F F6 F F F*F F F F F3 F F F,J J J J J3 J J J:< < < < <1 < < <"5 5 5 5 5!9 5 5 5.1 1 1 1 1. 1 1 1 1 1 1 1 11 1 1 11 1 1 1 1 8 1 1 1    4   2) ) ) ) )6 ) ) )"F F F F F7 F F F@2 2 2 2 20 2 2 2 1 1 1 1 13 1 1 1,2 2 2 2 24 2 2 2 9 9 9.5 5 5 5 5 5 5 5p+ + + + + + + +* * * * * * * *( ( ( ( (l ( ( (& & & & &< & & & . . . . . . . .$0 0 0 0 00 0 0 0"0 0 0 0 00 0 0 0"0 0 0 0 00 0 0 0"0 0 0 0 00 0 0 0   & ;<<.? .? =<.?`  &> > >8N N N.)2 )2 )2VJ J J:+9 +9 +9 +9 +9 +9 +9 +9\i( i( i( i( i( i( i( i(X' ' 'B  ) ) ) 27BHbh"IJJ. . KJ.  , , ,F F F0; ; ;8"@ "@ "@ "@ "@r&   