
    !g2                    @   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jn                  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j                  j                  dC        ZSddDZTej                  j                  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j                  j                  d      d        Zxd Zyd Zzd Z{d Z|d Z} G d d      Z~ G d d      Zd Zd Zd Zej                  j                  dej                  ej
                  ej                  ej                  g      d        Zd Zd Zd Zd Zd Zy)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                 4    t         r| j                  |       y y N)
pdf_outputsavefig)pdffigs     ^/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/genmod/tests/test_glm.pyclose_or_saver%   7   s    C     c                  :    t         rt        j                          y y r   )r    r"   close r&   r$   teardown_moduler*   <   s    		 r&   module)scopec                      t         j                  j                  t         j                  j                  t                    } t        j                  t         j                  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   sJ    ggoobggooh78G==gy*E#&A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@                  jB                  d        Z"ej@                  jB                  d        Z#d Z$y)CheckModelResultsMixinzo
    res2 should be either the results from RModelWrap
    or the results as defined in model_results_data
    c                     t        | j                  j                  | j                  j                  | j                         y r   )r   res1paramsres2decimal_paramsselfs    r$   test_paramsz"CheckModelResultsMixin.test_paramsO   s+    DII,,dii.>.>##	%r&   c                     t        | j                  j                  | j                  j                  d| j                   z  d       y )N
   h㈵>atolrtol)r   r?   bserA   decimal_bserC   s    r$   test_standard_errorsz+CheckModelResultsMixin.test_standard_errorsT   s2    		tyy}}4#3#3"344	Ar&   c                 >   dd l }|j                  | j                  j                        }|d d dfxx   | j                  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|       y )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     	 499++,q!t		((--33DIILLA1DDT((()))33$))"9"9		(($))*A*A11"3 4 	T=r&   c                    | j                   j                  dk7  rd}nd}t        | j                   j                  j                  t
        j                  j                        r| j                   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$                         y )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     99??aCCdiioo,,r{{/K/KM))//((001F1F15151L1L151M1M78	 1 :C
 c6!TYY//122C))--CCGTYY__""	$r&   c                 V   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                  j                  d      }d|z  d| j                  j                  dz   z  z   | j                  j                  z  }n-| j                  j                   | j                  j                  z  }t#        || j$                  j&                  | j(                         y )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   diioo,,r{{/@/@/1{{/J/J/1{{/K/K/M N ))//((001F1F15151L1L151M1M78	 1 :C
 c6!TYY//122DIINNBC))--		.CC!4!4d6L6LMr&   c                     t        | j                  j                  | j                  j                  | j                         y r   )r   r?   deviancerA   decimal_deviancerC   s    r$   test_deviancez$CheckModelResultsMixin.test_deviance   s+    DII..		0B0B%%	'r&   c                     t        | j                  j                  | j                  j                  | j                         y r   )r   r?   rd   rA   decimal_scalerC   s    r$   
test_scalez!CheckModelResultsMixin.test_scale   s'    DIIOOTYY__""	$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                  j                  d      }n| j                  j                  }t        || j                   j                  | j"                         y 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     diioo,,r{{/@/@/1{{/J/J/1{{/K/K/M N ))//((001F1F15151L1L151M1M78	 1 :C ))--CC0D0DEr&   c                    t        j                         5  t        j                  dt               t	        | j
                  j                  | j                  j                  | j                         d d d        y # 1 sw Y   y xY w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 $		 7 7 $ : :<	< 	< 	<s   AA88Bc                     t        j                         5  t        j                  d       t        | j                  j
                  | j                  j                  | j                         d d d        y # 1 sw Y   y xY wr   )	r   r   r   r   r?   bicrA   	bic_Statadecimal_bicrC   s    r$   test_biczCheckModelResultsMixin.test_bic   sY    $$& 	2!!(+		 $		 3 3 $ 0 02	2 	2 	2s   AA33A<c                     t        | j                  j                  j                  | j                  j                         y r   )r   r?   rg   df_residrA   rC   s    r$   test_degreesz#CheckModelResultsMixin.test_degrees   s$    TYY__--dii.@.@Ar&   c                     t        | j                  j                  | j                  j                  | j                         y r   )r   r?   fittedvaluesrA   decimal_fittedvaluesrC   s    r$   test_fittedvaluesz(CheckModelResultsMixin.test_fittedvalues   s+    DII22DII4J4J))	+r&   c                    | j                   j                  }|| j                   j                  z  }t        j                  j                  t        j                  |            dz  }t        j                  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                   j#                         |       y )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     !!499==(**--w014ZZ^^E*TYY]]:
??FZ$7*9L#MNgryy)		 1 17;		 1 17;DII--w7DII..0(;r&   c                     t        | j                  d      r8t        | j                  j                  | j                  j                  dd       y y )Npearson_chi2rP   rI   )hasattrrA   r   r?   r   rC   s    r$   test_pearson_chi2z(CheckModelResultsMixin.test_pearson_chi2   s:    499n-DII22DII4J4J!%D2 .r&   c                 `   t        | j                  d      r<t        | j                  j	                  d      | j                  j
                  d       t        | j                  d      rFt        t        | j                  j	                  d            | j                  j                  d       y y )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    499k*DII5555A II//d< 49934E$))";";";"FG II99F 5r&   c                 8    | j                   j                          y r   )r?   summaryrC   s    r$   test_summaryz#CheckModelResultsMixin.test_summary   s    		r&   c                     t        j                         5  t        j                  dt               | j                  j                          d d d        y # 1 sw Y   y xY wr   )r   r   r   r   r?   summary2rC   s    r$   test_summary2z$CheckModelResultsMixin.test_summary2   sC    $$& 	!!!(M:II 	! 	! 	!s   5A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                  j                  |j                        |z  }|j                         \  }}t        |j                  |d       t        ||d       |j                  j                  |j                   |      }|j"                  D ]*  }t        |j"                  |   |j"                  |   d       , |j%                  d      }	t        |	|z  |d       t'        | dd	      r5t	        j(                  t*        d
      5  |j                         }
d d d        n|j                         }
|j"                  D ]*  }t        
j"                  |   |j"                  |   d       , y # 1 sw Y   CxY w)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   s   yytzz((*<=KK89djj'')E)EFI

I

!!2243D3D3<>JJ%%..t/@/@AIM	{{}1))159	151,,T[[)D 	GAEJJqM6;;q>F	G ||.|1y()%@ 4*E2kA 1..01 1 **,F 	HAFKKNFKKNG	H	1 1s   H22H;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 N>  M$& "N !' M$  OF &< K2B %+<2
F [[  [[! !
!Hr&   r=   c                       e Zd Zd Zd Zd Zy)CheckComparisonMixinc                    | j                   }| j                  }t        |j                  |j                  d       |j                  j                  |j                  dz        }|j                  j                  |j                  dz        }t        ||d       |j                  j                  |j                  dz        }t        ||j                  d      d       |j                  j                  |j                        }t        |t        j                  |j                  d         d       |j                  j                  |j                  dz  d	
      }|j                  j                  |j                  dz        }t        ||d       |j                  j                  |j                  dz  d
      }|j                  j                  |j                  dz        }t        ||d       y )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  sp   yyyy$((7ZZ))$++*<=
ZZ))$++*<=

JU; !!$++"45
q 1>!!$++.)9)9!)< =DI::%%dkkD&85%I::%%dkkD&89(7::%%dkkD&84%H::%%dkkD&89(6r&   c                 |   | j                   }|j                  j                  |j                  d      \  }}}t	        |dd       t	        |dd       t        |d       |j                  j                  |j                  d      \  }}}t	        |dd       t        t        j                  |      t        |             t        |d       |j                  j                  d d df   dz  }|j                  j                  |j                  |	      \  }}}t        d
|       t        d
|       t        |d       y )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%  s    yyZZ**4;;a*H
BAE*AE*RZZ**4;;a*H
BAE*$r(+R ZZ__QqS)1,
ZZ**4;;:*N
B#r"#r"Rr&   c                    | j                   j                         }| j                  j                         }t        |j                  |j
                  d       t        |j                  |j                  d       t        |j                         j                  |j                         j                  d       | j                   j                  d      }| j                  j                         }t        |j                  |j                  d       t        |j                  |j                  d       t        |j                         j                  |j                         j                  d       y )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  s    		((*		((*)=)=EJ%--d;++-44++-444	A 		((v(6		((*uE%((6++-44++-444	Ar&   N)r   r   r   r   r  r  r)   r&   r$   r   r     s    7.(Ar&   r   c                   "    e Zd Zed        Zd Zy)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"                  j%                               j'                         | _        dd	lm}  |       | _        y
)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6CHHNNE

388==sC$SXX]]EBsxx~~sxx}}!{{33577:su 	09r&   c                 z   | j                   }ddlm}  || j                  j                  | j                  j
                        j                  d      }|| _        t        |j                  |j                  d       |j                  j                  |j                  d       }|j                  d d d f   |j                  z  |j                  j
                  z  }t        ||d       |j                  j                  |j                  d	      }|j                  d d d f   |j                  j
                  z  }t        ||d       |j                  j                  |j                  d       }d
|j                  z  |j                  j
                  j                   j#                  |j                  j
                        z  }t        ||d       |j%                         }|j%                         }	t        |	j&                  |j(                  d       t        |	j*                  |j,                  d       t        |	j/                         j0                  d d d df   |j/                         j0                  d       | j                   j%                  d      }| j                  j%                         }	t        |	j&                  |j&                  d       t        |	j*                  |j*                  d       t        |	j/                         j0                  d d d df   |j/                         j0                  d       y )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`  sX   yy;499??DIINN377e7D	$((7ZZ))$++T)B
ZZ4(4::5

G

JT:ZZ))$++Q)?
ZZ4(4::??:

JT:JJ&&t{{$&?	$**$tzz'8'8'<'<TZZ__'MM		948##%##%)=)=EJ%--d;++-44QU;++-444	A 		((v(6		((*uE%((6++-44QU;++-444	Ar&   N)r   r   r   classmethodr.  r;  r)   r&   r$   r  r  I  s     *"Ar&   r  c                       e Zd Zed        Zy)TestGlmGaussianGradientc                    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"                  j%                               j'                  d	      | _        d
dlm}  |       | _        y)r  r   r  r  r  Fr  r  newtonmethodr   r   Nr"  r,  s      r$   r.  z#TestGlmGaussianGradient.setup_class  s     '&##56CHHNNE

388==sC$SXX]]EBsxx~~sxx}} kk224669cc6J 	09r&   Nr   r   r   r<  r.  r)   r&   r$   r>  r>    s     r&   r>  c                       e Zd Zed        Zy)TestGaussianLogc                    t         | _        t        | _        t         | _        t
        | _        d}t        j                  |      }t        j                  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                  j                  |      z  z   | _        t#        | j                   | j                  t$        j&                  j)                  t$        j&                  j*                  j-                               	      }|j/                         | _        dd
lm}  |       | _        y )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  s
    & )'$-!IIdO
		ubggtAh'!Q$./&&4$q&=6!Q$;678		 556 SWWcee$&KK$8$89J9J9N9N9P$QS!%%'4=r&   NrC  r)   r&   r$   rE  rE    s    ! !r&   rE  c                       e Zd Zed        Zy)TestGaussianInversec                 :   t         | _        t         | _        t        | _        t         | _        t        | _        d}t        j                  |      }t        j                  j                  d       dd|z  z   |dz  z   dt        j                  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                  j                  |      z  z   | _        t!        | j                  | j                  t"        j$                  j'                  t"        j$                  j(                  j+                                     }|j-                         }|| _        ddlm}  |       | _        y )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  s9    $% )'&IIdO
		u#'MAqD 3)>#>>bggtAh'!Q$./#a%Z$q!t)+b04"))//$:O3OO			355{{++BKK,=,=,J,J,LMO+//1"8"$r&   NrC  r)   r&   r$   r\  r\    s    % %r&   r\  c                   4    e Zd Zed        Zd Zd Zd Zd Zy)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                  j!                         	      j#                         | _         |       | _        y
)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/vZZ

=
JJtyys;	 E:	tzz499 kk224669ce 	 8r&   c                    ddl m}  |       }t        |j                  d      |_        |j                  j                  t              }t        ||j                  t        j                  j                               j                         }t        |j                  | j                  j                         |j                  j                  t        j                         }t        ||j                  t        j                  j                               j                         }t        |j                  | j                  j                         y )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v E:	

!!#&5$))BKK,@,@,BCGGITYY%5%56

!!")),5$))BKK,@,@,BCGGITYY%5%56r&   c                 :   t         j                  j                  ddd      }t         j                  j                  d      }t	        j
                  t        d      5  t        ||t        j                  j                                d d d        y # 1 sw Y   y xY w)	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  sn    		!!!Sy!9yy((3]]:-LM 	<tBKK$8$8$:;	< 	< 	<s   +BBc                    d}t         j                  j                  |df      }t         j                  j                  dd|      j	                  t
              }t        j                  ||d d df   |d d df   d      }t        j                  t        d	      5  t        j                  j                  d
|t        j                  j                                d d d        y # 1 sw Y   y xY w)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    yyaV,		!!!QQ!/66s;||%tAqDzadLM]]:-JK 	?FFt'){{';';'=   ?	? 	? 	?s   ?C$$C-c                 0   | j                   }d}|j                  }|j                  j                  }|j                  j                  j                  |||      }|j                  j                  j                  |      |z  }|j                         \  }}t        ||z  |d       t        ||z  |d       |j                  j                  |j                  ||      }	|	j                  D ]*  }
t        |j                  |
   |	j                  |
   d       , y )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    yy	##JJ

!!227I<= 3 ?JJ%%..w7)C	{{}1!QU3	Aqu5 ,,T[[)67 - 9 	GAEJJqM6;;q>F	Gr&   N)	r   r   r   r<  r.  rs  r}  r  r  r)   r&   r$   rh  rh    s)     ,	7<	?Gr&   rh  c                   "    e Zd Zed        Zd Zy)TestGlmBernoullic                    ddl m}  |       | _        t        | j                  j                  | j                  j
                  t        j                  j                               j                         | _
        t        j                  | j                  j                  | j                  j
                        }|j                  | j                  j                  dz  d      | _        y )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    ,5sxx~~sxx}} kk224669ce 	 ~~chhnnchhmm<883)>U8Kr&   c                    | j                   }| j                  }|j                  j                  |j                  |j                  j
                  d d df   dz        \  }}}d}t        ||d       |j                  j                  |j                  |j                  j
                  d d df   dz        \  }}}d}t        ||d       t        t        d	            }|j                  d
       t        |j                  |j
                  j                  d d |f   t        j                  j                               j!                         }|j                  j                  |j                  |j                  j
                  d d df         }	t#        j$                  |	d d       j'                         }	d}
t        |	|
d       d}y )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  sr   yyyyZZ**4;;6:jjooad6KQ6N + P
B#F.ZZ**4;;59ZZ__QT5JA5M + O
B#F.eAh

1DJJ		q&y 9;;//133635 	{{%%ell15B1G & Izz$r(#))+-f40r&   N)r   r   r   r<  r.  r  r)   r&   r$   r  r  H  s    L L&r&   r  c                       e Zd Zed        Zy)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                  j!                         	      j#                         }d
d
d
       | _         |       }|xj&                  dz  c_        || _        y
# 1 sw Y   4xY w)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  s     &61v E:	$$& 	9!!(+tzz499 kk//133635 	9 z

a
	9 	9s   A"C++C4NrC  r)   r&   r$   r  r    s     r&   r  c                       e Zd Zed        Zy)TestGlmGammaLogc                 `   t         | _        t        | _        t         | _        ddlm}  |       }t        |j                  |j                  t        j                  j                  t        j                  j                  j                                     j                         | _        || _        y )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  sx     '%#, 2{tzz499;;$$"++*;*;*?*?*A$BDDGCE 	r&   NrC  r)   r&   r$   r  r        
 
r&   r  c                       e Zd Zed        Zy)TestGlmGammaIdentityc                    d| _         t        | _        t        | _        t
        | _        ddlm}  |       }t        j                         5  t        j                  d       t        j                  j                  t        j                  j                  j!                               }t#        |j$                  |j&                  |      j)                         | _        d d d        || _        y # 1 sw Y   || _        y xY w)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$$& 	D!!(+++##):):)C)C)E#FC4::tyy=AACCH	D 		D s   
BC++C;NrC  r)   r&   r$   r  r    s     r&   r  c                       e Zd Zed        Zy)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                  j                         	      j                         | _         |       | _        t%        j                  | j                  j                  | j                  j                        }|j                  | j                   j&                  d
z  d      | _        y)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  s     	1<<>CHHNNE

388==sC ffSXX]]1a4%89ad$SXX]]EBsxx~~sxx}} kk113558SU 	9>883)>U8Kr&   NrC  r)   r&   r$   r  r    s    L Lr&   r  c                   "    e Zd Zed        Zd Zy)TestGlmInvgaussc                     t         | _        t         | _        ddlm}  |       }t        |j                  |j                  t        j                  j                               j                         }|| _        || _        y)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z4::tyy++55799< 	r&   c                 z   | j                   }|j                  j                  j                  |j                  |j
                        }|j                  j                  j                  |j                        |j
                  z  }|j                         \  }}t        |j                  |d       t        ||d       y )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    yy

!!2243D3D37::?JJ%%..t/@/@ADJJN	{{}1))159	151r&   N)r   r   r   r<  r.  r   r)   r&   r$   r  r    s     *2r&   r  c                       e Zd Zed        Zy)TestGlmInvgaussLogc                 B   d| _         t        | _        ddlm}  |       }t        |j                  |j                  t        j                  j                  t        j                  j                  j                                     j                         | _        || _        y )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  sv      &4}tzz499;;..[[&&**, / .//2su 	 r&   NrC  r)   r&   r$   r  r    r  r&   r  c                       e Zd Zed        Zy)TestGlmInvgaussIdentityc           	         d| _         t        | _        t        | _        ddlm}  |       }t        j                         5  t        j                  d       t        |j                  |j                  t        j                  j                  t        j                  j                  j!                                     j#                         | _        d d d        ddlm}  |       | _        y # 1 sw Y   xY w)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  s      #, &0y$$& 	J!!(+4::tyy#%;;#>#>%'[[%6%6%?%?%A $? $CDDGCE H	J
 	:#%	J 	Js   BC))C2NrC  r)   r&   r$   r  r  2  s    & &r&   r  c                       e Zd Zed        Zy)TestGlmNegbinomialc                 V   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.        j0                  j3                         }ddd       ddd       t5        | j                  j                  | j                  j                        j7                  d      | _        ddlm}  |       }|xj>                  dz  c_        || _         d| _!        y# 1 sw Y   xY w# 1 sw Y   xY w)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  s    &&#, 76CHHNNE

388==sCVVCHHMM!A#$67achhmmAaC(qs);;{(CD$SXX]]EB$$& 	5!!(]Ck* 5kk2245	5
 sxx~~sxx}}CdCO 	2{

a
"5 5	5 	5s$   35J(JJJ	JJ(NrC  r)   r&   r$   r  r  N  s    # #r&   r  c                   .    e Zd Zed        Zd Zd Zd Zy)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&                  j)                         |      j+                         | _         |       | _        y )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&#||~ZZ

+
JJtyy)	&&1a41		!Q$ D9	53tzz?*tzz499R[[5H5H5J (**-#% 	!#r&   c                 P   | j                   j                  j                         }t        j                  |g d<   t        || j                   j                  t        j                  j                         | j                  d      }t        |j                  j                  d   d       y )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  sm    		$$&66i%0C0C0E!]]F<S\\''*B/r&   c                    t         j                  j                  d       t         j                  j                  ddd      }t         j                  j	                  d      }t         j                  j                  ddd      }t         j                  j                  ddd      }t        ||t        j                  j                         ||	      j                         }|t        j                  |      z   }t        ||t        j                  j                         |
      j                         }t        |j                  |j                         t        |j                  |j                  d       |j                   }|j#                         }	t        |	d   |d       t        |	d   |j$                  d        |j&                  |j(                  |j*                  fi |	}
t        |
j,                  |j,                  d       t        |
j$                  |j$                  d       |j                   j/                         }|j                   j/                         }t        |j                  |j                  d       y )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-yyW-99$$Q3/""1a-5$r{{':':'< 8558SU 	266(++5$r{{':':'<!##&35 	DKK5		49959 

##%Z((?X5Auu{{EJJ?$?u~~EBU\\> 

**,

**,ell?r&   c                 X   t         j                  j                  d       t         j                  j                  ddd      }t         j                  j	                  d      }t         j                  j                  ddd      }t        ||t        j                  j                         |	      j                         }t         j                  j	                  d
      }t         j                  j                  ddd      }|j                  ||      }|j                  |d|z        }t        |d|z         |j                         }	|j                  |      }
|j                  ||      }t        |	|
       t        |
|       t         j                  j                  ddd      }t        |||t        j                  j                               j                         }|j                         }|j                  d|      }|j                  |d|      }	t        ||       t        ||	       t        ||t        j                  j                               j                         }t         j                  j                  ddd      }t        j                  t              5  |j                  ||d      }d d d        |j                  |d|z  d      }t        |||z          t!        |j                  |t#        j$                  |            t         j&                        sJ y # 1 sw Y   pxY w)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-yyW-99$$Q3/5$r{{':':'<$&&)ce 			  f -II%%aB/	 %)<%!I+>E1U7+ h/$:E5)E5) ""1a-5$v++--/114 	6&9$fVDE5)E5) 5$r{{':':'<=AAC""1a,\\-( 	ILLeF4LHE	I %&IE5<0 LLebii	.BLCJJ
 	
 
	I 	Is   L  L)N)r   r   r   r<  r.  r  r  r  r)   r&   r$   r  r    s$    $ $"0@<-
r&   r  c                 6   | d d df   }| d d d df   }||dk7     }||dk7     }t        |d      }t        ||t        j                  j	                               }t        j                  t              5  |j                          d d d        y # 1 sw Y   y xY w)Nr`  r   Tr  r  )	r   r   rh   ri   rm  r   r   r   r*  )r;   rd  rS  glms       r$   test_perfect_predr    s    QUAQVA	!q&	A	!q&	AQ%A
a2;;//1
2C	.	/ 	  s   5BBc                     ddl m}  t        j                  j	                  d       d}d}t        j                  j                  dd|df      }d|d d df<   dt        j                  d|j                  d   dz         z  }|j                  |      |t        j                  j                  |      z  z   } | ||      j                         } | ||d d d d	f         j                         }|j                  |d
      }t        ||d d d d	f   t        j                  j                               j                         }	|	j                   j#                  |	j$                  |d d d	d f         }
t'        |d   dz  dz  |
d   d       y )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    sK   7IINN1DD
		!QdAY/AAadG		"aggaj1n--D	ddRYY__T222A!QimmoG1a3B3i $$&H		 	 %	 	8B!Qq#2#vYr{{';';'=>BBDG
--
"
"7>>a23i
"
HCBqEBJ%s1vE:r&   c                     t         j                  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       y )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**dii4Eud#I!!&&,,c2"$I!!&&,,c2t$J""''--s3r&   c                       e Zd Zed        Zy)TestStartParamsc                 ~   t         | _        t        | _        t        | _        t         | _        ddlm}  |       | _	        t        | j                  j                  d      | j                  _        t        j                  | j                  j                  | j                  j                        j                         j                   }t#        | j                  j                  | j                  j                  t        j$                  j'                               j                  |      | _        ddlm}  |       | _        y	)
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6$SXX]]EB6::<CCsxx~~sxx}}!{{33577:ss7O 	09r&   NrC  r)   r&   r$   r  r    s     r&   r  c                     t        j                  dj                         t              } t        j                  g d      }t        j                  | |      } t        j                  g d|      }t        j                  | t        j                  |      t
        j                  j                               }|j                  ddg      }t         j                  j                  |j                  dd	gd
       y )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(1E1E1G
HC
''Bx'
(CJJ""3::[/I1Mr&   c                     t        j                  g d      t        j                  dt         j                        fd} ddgddgddgfD ]z  }t	        j
                  t	        j                        t        j                  j                               }|j                  |d	      } | |      }t        ||j                         | y )
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  sh    !9vay{*!bffhY''(vvar
lac266!B$<%77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2A
		"BJJ'A9
 Q%!AS	) +ffQ*2;;3G3G3IJgg61g56{D#''*	+r&   c                     dd l mc m}  g ddddt        j                  gdgdz  t        j
                  j                  d      g dd	}t        j                  |      }t        j                  j                  t        j                  j                  j                         
      }| j                  d||j                  |      }t!        t#        |j                        t        j$                  u d       t        j&                  t        j
                  j                  d            }d|j(                  d<   t+        t,        | j                  d|||       t+        t,        t.        |j0                  |ddg   ||       y )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  s!   ))Aq"&&(9S1W"))*;*;*;*C	A 
aB[[!!r{{'8'8'<'<'>!?F
''+B  !CD"**,2KLyy***23HBFF8*cgg{#F4*c2662z5.A+B#F4r&   c                    t         j                  j                  d       d}t         j                  j                  |df      }|d d df   |d d df   dz  z   }ddt        j                  |       z   z  }dt         j                  j                  |      |k  z  }t        j                  ||t        j                  j                               }|j                         }dd l}ddlm}	 d	D ]  }
|j                  |
      } |	|j                  d   d
       t!        t"        |       |j%                  |
      } |	|j                  d   d
       t!        t"        |       |j'                  |
      } |	|j                  d   d
       t!        t"        |         |j(                  ||d d df   |d d df   d      }t        j                  j+                  d|t        j                  j                               }|j                         }d	D ]  }
ddg|
   }|j                  |      } |	|j                  d   d
       t!        t"        |       |j%                  |      } |	|j                  d   d
       t!        t"        |       |j'                  |      } |	|j                  d   d
       t!        t"        |        y )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  sN    IINN3A99!Q(DAqDzDAJM)HBFFH9%%&D"""*T12EFF5$r{{';';'=>EYY[F?  	 ((+388A;S)c3++A.388A;S)c3))!,388A;S)c3	  2<<e41:T!Q$ZHIDFFtBKK<P<P<RSEYY[F 
 tQ((/388A;S)c3++E2388A;S)c3))%0388A;S)c3
 r&   c                    t         j                  j                  d       t        j                  } |       j                  |       }||j                  k(  r|dk(  r1dt         j                  j                  t        |             |k  z  }|S t        j                  t        |       df      }d}t         j                  j                  t        |       |f      |d d d f   k  j                  d      |d d df<   ||d d df   z
  |d d df<   |S ||j                  k(  r!t         j                  j                  |      }|S ||j                  k(  r"t         j                  j                  d|      }|S ||j                  k(  r1|dt         j                  j!                  t        |             z  z   }|S ||j"                  k(  rddlm} |j)                  |d      }|S ||j*                  k(  rdd	lm}	 |	j)                  |d
      }|S t.        )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   IINN3
++C		!Bs||#Aryy((c(m(<rABE* L' HHc(mQ/0EA99,,3x=!2D,E1d7SXXYZ[E!Q$KeAqDk/E!Q$K  L 
	$		!!"% L 
	"		2& L 
	%Q))s8})=== L 
--	-4

2s# L 
,,	,6Rr* L r&   c                     t         j                  j                  d       d} t         j                  j                  | df      }d|d d df<   t         j                  j                  |       }dD ]Z  }t        j
                  j                         }t	        j                  |||      }|j                  |	      }|j                         }\ y )
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    IINN4A99!Q(DDAJII!$E  [[!!#ud2.yyy'LLN	r&   c                 P     j                   } j                  j                  |dz  d      } fd}t        |dz  |      }t	        ||dd        j                  j                  |d      }t        ||      }t	        ||d        fd}t        ||      }t	        ||d       y )	Nr   r   rc   c                 >    j                   j                  | d      S r   )rg   rk   rY  r.   s    r$   <lambda>z%check_score_hessian.<locals>.<lambda>  s    w}},,Qa,8 r&   rJ  rQ   r   c                 >    j                   j                  | d      S r   )rg   r   ri  s    r$   rj  z%check_score_hessian.<locals>.<lambda>  s    w}}**1A*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]!		4B8F
v
.CB$T2==  q 1D'ED%d+6F&&)ED%d+r&   c                     t         j                  j                  d       t        j                  } t        j                  j
                  }| j                  |j                  |j                  |j                  |j                  |j                  gf| j                  |j                  |j                  |j                  gf| j                  |j                  |j                  |j                   gf| j"                  |j                  |j                  |j                   gf| j$                  |j                  |j                  |j                   |j&                  gf| j(                  |j                  |j                   |j&                  |j                  gfg}d}d}t         j                  j+                  ||f      }d|d d df<   d}|D ]  \  }}|D ]  }	dD ]  }
|| j                  k7  r|
dk(  r||	f| j                  |j                  fk(  rd	|j-                  d      z   }n||	f| j                  |j                  fk(  rd
|j-                  d      dz  z   }nX||	f| j                  |j                  fk(  rd|j-                  d      z   }n%||	f| j$                  |j                  fk(  rd
|j-                  d      z   }n||	f| j$                  |j                  fk(  r>d	d|j-                  d      z  z   }t        j.                  |dt         j0                        }n||	f| j$                  |j&                  fk(  rd|j-                  d      dz  z   }y||	f| j$                  |j                   fk(  rd|j-                  d      dz  z   }n+||	f| j(                  |j                  fk(  r=d	d|j-                  d      z  z   }t        j.                  |dt         j0                        }n||	f| j(                  |j&                  fk(  r2dt         j                  j3                  |j4                  d         z   }X||	f| j(                  |j                   fk(  rd|j-                  d      dz  z   }nM||	f| j"                  |j                   fk(  rd}n-t         j                  j3                  |j4                  d         }t7        ||	|
      }t9        j:                         5  t9        j<                  d       t        j>                  || | |	                   }d d d        jA                  d      }||	f| j                  |j                  f| j                  |j                   f| j$                  |j                  ffvrtC        |       d|jD                  fdfD ]  \  }}|dkD  r|rt9        j:                         5  t9        j<                  d       t        j>                  || | |	                   }d d d        jA                  ||dd      }tG        |jD                  |jD                  dd       tG        |jH                  |jH                  dd       tG        |jJ                  |jJ                  dd       |jL                  }|jO                  |jD                  d      }t        jP                  t        jR                  t         jT                  jW                  |                   }tG        ||jL                  dd       tG        |jL                  |jL                  dd       |jA                  dd |jD                  dd!      }tG        |jL                  |jL                  dd           y # 1 sw Y   `xY w# 1 sw Y   xY w)"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   
 IINN5
++C
++

C		3::s{{CGGSZZXYswwchh?@SWWcllC4D4DEFcggs7G7GHI$$swwc>N>NPSPbPb&cd%%1A1A3CUCUWZWcWc'degH 	A	A99!Q(DDAJH&. X]"l  W	]D!$ V]3<</MQ4F $'CKK+FF!DHHQK/H"D)cllCGG-DD!DHHQK!O3H"D)ckk388-DD 488A;H"D)c.A.A377-KK!DHHQK/H"D)c.A.A3<<-PP!AdhhqkM1H!wwxrvv>H"D)c.A.A3CUCU-VV"TXXa[1_4H"D)c.A.A3CSCS-TT 488A;?2H"D)c.B.BCLL-QQ!AdhhqkM1H!wwxrvv>H"D)c.B.BCDVDV-WW"RYY%6%6DJJqM%6%JJH"D)c.B.BCDTDT-UU 488A;?2H"D)cllC<L<L-MM#H
  "yy00djjm0DH!(L$N,,. U))(3!vveT,DF:STHU %LLL7	$d+chh0G14C<L<L0M141D1Dcll0S02 2 (	2 67	8H8H4I94T  ]0NL%)h !002 ] --h7')vveT,TXTZB['\] %1$4$4NBN<Dc %5 %SM $M$8$8$-$4$44dL $M$5$5y}})-D: $M$7$7)-D: $1#4#4L(001E1EPU0VE#%77BGGBIIMM%4H,I+I#JL#L)--dQUV#M$5$5y}}3UYZ(4(8(8BGFSFZFZ@HRU )9 )W% $$5$9$99==tZ[\A ]mV]W	]X]XU U ] ]s   
:]"	':]/"],/]9c                  h   t         j                  j                  d       t        j                  } t        j                  j
                  }| j                  |j                  |j                  |j                  |j                  |j                  gf| j                  |j                  |j                  |j                  gf| j                  |j                  |j                  |j                   gf| j"                  |j                  |j                  |j                   gf| j$                  |j                  |j                  |j                   |j&                  gf| j(                  |j                  |j                   |j&                  |j                  gfg}d}d}t         j                  j+                  ||f      }d|d d df<   d}|D ]  \  }}|D ]  }	dD ]  }
|| j                  k7  r|
dk(  r||	f| j                  |j                  fk(  rd	|j-                  d      z   }n||	f| j                  |j                  fk(  rd
|j-                  d      dz  z   }nX||	f| j                  |j                  fk(  rd|j-                  d      z   }n%||	f| j$                  |j                  fk(  rd
|j-                  d      z   }n||	f| j$                  |j                  fk(  r>d	d|j-                  d      z  z   }t        j.                  |dt         j0                        }n||	f| j$                  |j&                  fk(  rd|j-                  d      dz  z   }y||	f| j$                  |j                   fk(  rd|j-                  d      dz  z   }n+||	f| j(                  |j                  fk(  r=d	d|j-                  d      z  z   }t        j.                  |dt         j0                        }n||	f| j(                  |j&                  fk(  r2dt         j                  j3                  |j4                  d         z   }X||	f| j(                  |j                   fk(  rd|j-                  d      dz  z   }nM||	f| j"                  |j                   fk(  rd}n-t         j                  j3                  |j4                  d         }t7        ||	|
      }t9        j:                         5  t9        j<                  d       t        j>                  || | |	                   }d d d        jA                  d      }d|jB                  fdfD ]^  \  }}|dkD  r|rt9        j:                         5  t9        j<                  d       t        j>                  || | |	                   }d d d        jA                  ||dd      }tE        |jB                  |jB                  dd       tE        |jF                  |jF                  dd       tE        |jH                  |jH                  dd       |jK                  |jB                  d      }t        jL                  t        jN                  t         jP                  jS                  |                   }tE        ||jT                  dd       a    y # 1 sw Y   xY w# 1 sw Y   xY w)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   
 IINN5
++C
++

C		3::s{{CGG #

 , -swwchh?@SWWcllC4D4DEFcggs7G7GHI$$sww'*'7'7'*'9'9'; < %%1A1A(+(:(:CLL(J K	LH 	A	A99!Q(DDAJH&. U/"l  T	/D!% S/3<</MQ4F $'CKK+FF!DHHQK/H"D)cllCGG-DD!DHHQK!O3H"D)ckk388-DD 488A;H"D)c.A.A377-KK!DHHQK/H"D)c.A.A.1ll.< <!AdhhqkM1H!wwxrvv>H"D)c.A.A.1.@.@.B B"TXXa[1_4H"D)c.A.A.1.>.>.@ @ 488A;?2H"D)c.B.B.1ll.< <!AdhhqkM1H!wwxrvv>H"D)c.B.B.1.@.@.B B"RYY%6%6DJJqM%6%JJH"D)c.B.B.1.>.>.@ @ 488A;?2H"D)cllC<L<L-MM#H!yy00djjm0DH!(L$N,,. H))(3!vveT-9tv-F HHH %LLL7	 789I9I5J5>5@ /0NL &)h !002 P --h7')vveT5Atv5N(PP %1$4$4+9)5#+*/	 %5 %M $M$8$8):J:J)-D: $M$5$5y}})-D: $M$7$7)-D: )001E1E:? 1 AE#%77BGGBIIMM%4H,I+I#JL#L)--d)-/=/iS/T	/U/^H HP Ps   
:Z	:Z'Z$'Z1c                     d\  } }t         j                  j                  d       t         j                  j                  | |dz
        }t	        |d      }|j                  d      t         j                  j                  |       z   }t        ||      }|j                         }|j                  dd      }|j                  d	d      }|j                  |j                  d
      }	|||fD ]1  }
t        |
j                  d   d       t        |
j                  d       3 t        |j                  d   d       t        |j                  d   d       t        |j                  d   d	       t        t        |j                  j                  d             t        t        |j                  j                  d             t        |	j                  d
       y )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    sl   LD&IINN6
		fqj)A.Dbiiood++A
a,C779D77f76D77dt74DWW$++fW=FD$ 'Q^^K0&9QXXv&' ""<0':""<0&9""<0$7GD$$**L9:GD$$**H56 'r&   c                   v    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y)CheckWtdDuplicationMixinc                    t        j                         | _        t        j                  | j                  j
                        | j                  _        t        j                  | j                  j                        | j                  _        | j                  j
                  | _        | j                  j                  | _        t        j                  j                  d       t        j                  j                  ddt        | j
                              | _        t        j                  | j
                  | j                        | _        t        j                  | j                  | j                  d      | _        y )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    <<>CHHNN3

388==1HHNN	88==
		tYY&&q#s399~>
		#))SZZ8yy3::A>r&   c                 r    t        | j                  j                  | j                  j                  dd       y NrP   rI   r   r?   r@   rA   rC   s    r$   rE   z$CheckWtdDuplicationMixin.test_params  s'    		(($))*:*:$!	#r&   c                 r    t        | j                  j                  | j                  j                  dd       y )NrH   rP   rQ   r   r?   rL   rA   rC   s    r$   rN   z-CheckWtdDuplicationMixin.test_standard_errors  s     		tyy}}4dKr&   c                 r    t        | j                  j                  | j                  j                  dd       y r  )r   r?   rp   rA   rC   s    r$   test_aicz!CheckWtdDuplicationMixin.test_aic  s"     			tyy}}DtLr&   c                 r    t        | j                  j                  | j                  j                  dd       y r  r   r?   r~   rA   rC   s    r$   r   z&CheckWtdDuplicationMixin.test_deviance  s'    		**DII,>,>d!	#r&   c                 r    t        | j                  j                  | j                  j                  dd       y r  )r   r?   rd   rA   rC   s    r$   r   z#CheckWtdDuplicationMixin.test_scale  s     		t$Or&   c                 n    t        | j                  j                  | j                  j                  d       y )NrP   )r   r?   rt   rA   rC   s    r$   r   z%CheckWtdDuplicationMixin.test_loglike  s      			tyy}}d;r&   c                     t        j                         5  t        j                  dt               t	        | j
                  j                  | j                  j                  dd       d d d        y # 1 sw Y   y xY wNr   rP   rI   )r   r   r   r   r   r?   r   rA   rC   s    r$   r   z+CheckWtdDuplicationMixin.test_null_deviance  sZ    $$& 	'!!(M:DII33 II33!%!%'	' 	' 	's   AA00A9c                     t        j                         5  t        j                  d       t        | j                  j
                  | j                  j
                  dd       d d d        y # 1 sw Y   y xY wr  )r   r   r   r   r?   r   rA   rC   s    r$   r   z!CheckWtdDuplicationMixin.test_bic   sS    $$& 	Q!!(+DIIMM499==4P	Q 	Q 	Qs   AA++A4c                     | j                   j                  | j                  j                  j                        }t        | j                  j                  |dd       y NrH   rI   )rA   r   r?   rg   r  r   r   )rD   res2_fitteds     r$   r   z*CheckWtdDuplicationMixin.test_fittedvalues'  s?    ii''		(<(<=		..$!	#r&   c                 ^   t        | j                  j                  | j                  j                  dd       t        | j                  j                  | j                  j                  dd       t        | j                  j                         | j                  j                         dd       y )NrP   g-C6*?rI   )r   r?   r   rA   r   r   rC   s    r$   r   z&CheckWtdDuplicationMixin.test_tpvalues.  sy     			))499+<+<4!	#		))499+<+<4!	#		**,dii.@.@.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 NM
#P<
 &' K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                  j                               j                         | _        t        | j                  | j                  t        j                  j                               j                         | _        y)?
        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    
 	JJsyy)	::chh'syy#((%(ZZ!{{224669ce 	 s}}cll!{{224669ce 	r&   r   r   r   r<  r.  __classcell__r  s   @r$   r  r  9  s    < <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                               j                  di || _        t	        d|      } t        | j                  | j                  t        j                  j                               j                  di || _        y)	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    
 	xx !B C x(:3syy#((%(ZZ!{{224669cF<DF xlC:3s}}cll!{{224669cF<DFr&   r  r  s   @r$   r  r  K  s    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                               j                  di || _        t	        d|      } t        | j                  | j                  t        j                  j                               j                  di || _        y)	r  r  HC0)r|  r  )r|  r  r  Nr)   r  r  s      r$   r.  z TestWtdGlmPoissonHC0.setup_classa  s     	xx !B C ':3syy#((%(ZZ!{{224669cF<DF \B:3s}}cll!{{224669cF<DFr&   r  r  s   @r$   r  r  `  s    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!                               j"                  di || _        t        j&                  || j                        }t        d|dd      } t        | j(                  | j*                  t        j                  j!                               j"                  dd|i|| _        d	d	d	       y	# 1 sw Y   y	xY w)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  sM    	xx !B C ii3syy>A-.!3V[5\]$X$$& 		J!H!!(+>s399chh),#%;;#6#6#8::=#J@HJCH 99S#**-DYD[`9abH>s3==#,,#%;;#6#6#8::=#JKWJ@HJCH		J 		J 		Js   ;C6E::Fr  r  s   @r$   r  r  v  s    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                  j                               j                         | _        t	        | j                  | j                  t        j                  j                               j                         | _        y)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     	IIO	+syy#(($'JJ kk224669ce 	 s}}cll kk224669ce 	r&   r  r  s   @r$   r  r    s    < <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                  j                  t        j                  j                  j                  |      |      }t        | j                  | j                  | j                  |      j                         | _        t        | j                   | j"                  |      j                         | _        ddd       y# 1 sw Y   yxY w)	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  s     	$$& 		5!!(]C++66[[&&77e7D 7 K 399chh(+

"-//2su H 3==#,,"-//2su H		5 		5 		5s   CD		Dr  r  s   @r$   r  r    s    5 5r&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdGlmGammac                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                         | _        t        | j                  | j                  |      j                         | _        y)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     	kk''(9(9(=(=(?@syy#(($'JJ)++.35 	 s}}cll)++.35 	r&   r  r  s   @r$   r  r    s    1 1r&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdGlmGaussianc                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                         | _        t        | j                  | j                  |      j                         | _        y)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    
 	kk**2;;+<+<+@+@+BCsyy#(($'JJ)++.35 	 s}}cll)++.35 	r&   r  r  s   @r$   r  r        
1 
1r&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdGlmInverseGaussianc                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                         | _        t        | j                  | j                  |      j                         | _        y)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    
 	kk11"++2C2C2G2G2IJsyy#(($'JJ)++.35 	 s}}cll)++.35 	r&   r  r  s   @r$   r  r    r  r&   r  c                   .     e Zd Ze fd       Zd Z xZS )TestWtdGlmGammaNewtonc                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                  d      | _        t        | j                  | j                  |      j                  d      | _        y)r  r  r@  rA  r  Nr  r  s     r$   r.  z!TestWtdGlmGammaNewton.setup_class  s    
 	kk''(9(9(=(=(?@syy#(($'JJ) H- 	 s}}cll)H- 	r&   c                 H   t         j                  j                  t         j                  j                  j	                               }t        j                  t        d      5  t        | j                  | j                  || j                         d d d        y # 1 sw Y   y xY w)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  sj    kk''(9(9(=(=(?@\\,.>? 	

DIIk	 	 	s   !.BB!)r   r   r   r<  r.  r  r  r  s   @r$   r  r    s    . .r&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdGlmGammaScale_X2c                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                  d      | _        t        | j                  | j                  |      j                  d      | _        y)r  r  X2rc   r  Nr  r  s     r$   r.  z#TestWtdGlmGammaScale_X2.setup_class  s    
 	kk''(9(9(=(=(?@syy#(($'JJ) 4 	 s}}cll)4 	r&   r  r  s   @r$   r   r     s    ) )r&   r   c                   .     e Zd Ze fd       Zd Z xZS )TestWtdGlmGammaScale_devc                    t         |           t        j                  j	                  t        j                  j
                  j                               }t        | j                  | j                  | j                  |      j                  d      | _        t        | j                  | j                  |      j                  d      | _        y)r  r  devrc   r  Nr  r  s     r$   r.  z$TestWtdGlmGammaScale_dev.setup_class  s    
 	kk''(9(9(=(=(?@syy#(($'JJ) 5) 	 s}}cll)5) 	r&   c                    | j                   j                  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                  |          y )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    		$$&yy~~""$VVT
 ffl{{%diioo.D.D'3VE[--33A6 &&,,Q/	1[--33A6 %%++A.	088KL[--t{{8/DEr&   )r   r   r   r<  r.  r  r  r  s   @r$   r  r    s    * *Fr&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdTweedieLogc                    t         |           t        j                  j	                  t        j                  j
                  j                         d      }t        | j                  | j                  | j                  |      j                         | _        t        | j                  | j                  |      j                         | _        y)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    
 	kk))r{{/@/@/D/D/F45 * 7syy#((%(ZZ*,,/CE 	 s}}cll*,,/CE 	r&   r  r  s   @r$   r  r  3      2 2r&   r  c                       e Zd Zed        Zy)TestWtdTweediePower2c                    t        j                         | _        | j                  j                  | _        | j                  j                  ddg   | _        t
        j                  j                  d       t
        j                  j                  ddt        | j                              | _
        t        j                  | j                  j                  | j                        | _        t        j                  | j                  j                  | j                  d      | _        t        j                   j"                  j%                         }t        j                   j'                  |d	      }t)        | j                  | j                  | j                  |
      j+                         | _        t)        | j                  | j                  |      j+                         | _        y)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  s2   
 &&(HHNN	88==(G!45
		tYY&&q#s399~>
		#))"2"2CJJ?yy#**1E{{  &&(kk))tq)Asyy#(($'JJ)++.35 	 s}}cll)++.35 	r&   NrC  r)   r&   r$   r  r  C  s    1 1r&   r  c                   (     e Zd Ze fd       Z xZS )TestWtdTweediePower15c                    t         |           t        j                  j	                  t        j                  j
                  j                  d      d      }t        | j                  | j                  | j                  |      j                         | _        t        | j                  | j                  |      j                         | _        y)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    
 	kk))r{{/@/@/F/Fs/K47 * 9syy#((%(ZZ*,,/CE 	 s}}cll*,,/CE 	r&   r  r  s   @r$   r  r  Y  r  r&   r  c                     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                  |       y )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  sd   <<>DDJJS9DJ

49937DIffDIIdO!vvDJJ|",,tyy$..ADK $

DKKii3tzz?1,-G#G""7079K))//2""((+-))//2!!''*,))//2B788KLL))<8r&   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	CheckTweediec                 D   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       y )Nr   r$  rH   rQ   )
r  r?   r^   rA   r   r7   concatenater[   r\   r]   rD   idx1idx2s      r$   
test_residzCheckTweedie.test_resid  sB   499++,q0499++,q0		(@(@"(E)-)A)A$)G(H(J K		(@(@"(E)-)A)A$)G(H(J K!		.
 			(?(?(D)-)@)@)F(G(I J		(?(?(D)-)@)@)F(G(I J!		.
 			(@(@"(E)-)A)A$)G(H(J K		(@(@"(E)-)A)A$)G(H(J K!		. 			(?(?(D)-)@)@)F(G(I J		(?(?(D)-)@)@)F(G(I J!		.r&   c                 r    t        | j                  j                  | j                  j                  dd       y )NrP   g    .ArI   r  rC   s    r$   test_bsezCheckTweedie.test_bse  s     		tyy}}4cJr&   c                 r    t        | j                  j                  | j                  j                  dd       y r  r  rC   s    r$   rE   zCheckTweedie.test_params  s'    		(($))*:*:!	#r&   c                 r    t        | j                  j                  | j                  j                  dd       y r  r  rC   s    r$   r   zCheckTweedie.test_deviance  s'    		**DII,>,>T!	#r&   c                     t        | j                  j                  | j                  j                         t        | j                  j                  | j                  j                         y r   )r   r?   ro   rA   r   rC   s    r$   test_dfzCheckTweedie.test_df  s>    TYY''););<TYY''););<r&   c                    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       y )Nr   r$  rJ  rI   )r  r?   r   rA   r^   r   r7   r+  r,  s      r$   r   zCheckTweedie.test_fittedvalues  s    499))*Q.499++,q0		(>(>s(C)-)?)?)E(F(H I		(>(>s(C)-)?)?)E(F(H I!		.r&   c                 l    | j                   j                          | j                   j                          y r   )r?   r   r   rC   s    r$   r   zCheckTweedie.test_summary  s"    				r&   N)
r   r   r   r/  r1  rE   r   r5  r   r   r)   r&   r$   r)  r)    s&    .4K##=.r&   r)  c                       e Zd Zed        Zy)TestTweediePower15c                    ddl m} t        j                         | _        | j                  j
                  ddg   | _        | j                  j                  | _        t        j                  j                  t        j                  j                  j                  d      d      }t        j                  | j                  j                  | j                  j
                  ddg   |      j                         | _         |       | _        y )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    >&&(88==(G!45HHNN	kk))r{{/@/@/F/Fq/I47 * 966"xx}}h-@A!,..1ce 	 )*r&   NrC  r)   r&   r$   r9  r9    s    
+ 
+r&   r9  c                       e Zd Zed        Zy)TestTweediePower2c                    ddl m} t        j                         | _        | j                  j
                  ddg   | _        | j                  j                  | _        t        j                  j                  t        j                  j                  j                  d      d      }t        j                  | j                  j                  | j                  j
                  ddg   |      j                         | _         |       | _        y )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    =&&(88==(G!45HHNN	kk))r{{/@/@/F/Fq/I46 * 866"xx}}h-@A!,..1ce 	 ()r&   NrC  r)   r&   r$   r>  r>    s    
* 
*r&   r>  c                       e Zd Zed        Zy)TestTweedieLog1c                    ddl m} t        j                         | _        | j                  j
                  ddg   | _        | j                  j                  | _        t        j                  j                  t        j                  j                  j                         d      }t        j                  | j                  j                  | j                  j
                  ddg   |      j                         | _         |       | _        y )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    ;&&(88==(G!45HHNN	kk))r{{/@/@/D/D/F46 * 866"xx}}h-@A!,..1ce 	 &'r&   NrC  r)   r&   r$   rB  rB    s    
( 
(r&   rB  c                       e Zd Zed        Zy)TestTweedieLog15Fairc                 X   ddl m} ddlm}  |       }t        j
                  j                  t        j
                  j                  j                         d      }t	        j                  |j                  |j                  g d   |      j                         | _         |       | _        y )	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}kk))r{{/@/@/D/D/F47 * 966

#yy *9  :!,. /2ce 	 $%r&   NrC  r)   r&   r$   rF  rF    s    & &r&   rF  c                       e Zd Zd Zd Zy)CheckTweedieSpecialc                 r    t        | j                  j                  | j                  j                  dd       y NrH   rQ   )r   r?   rW   rA   rC   s    r$   test_muzCheckTweedieSpecial.test_mu  s     		diillD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       y rP  )r   r?   r^   rA   r[   r\   r]   rY   rC   s    r$   r/  zCheckTweedieSpecial.test_resid  s    		00$))2J2J!	.		//1H1H!	.		00$))2J2J!	.		//1H1H!	.		99		99!	.r&   N)r   r   r   rQ  r/  r)   r&   r$   rN  rN    s    J.r&   rN  c                       e Zd Zed        Zy)TestTweedieSpecialLog0c                 &   t        j                         | _        | j                  j                  ddg   | _        | j                  j                  | _        t
        j                  j                  t
        j                  j                  j                               }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        t
        j                  j                  t
        j                  j                  j                         d      }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        y )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   &&(88==(G!45HHNN	++&&BKK,=,=,A,A,C&D66"xx}}h-@A!(**-#% 	 ++%%2;;+<+<+@+@+B01 & 366"xx}}h-@A!(**-#% 	r&   NrC  r)   r&   r$   rT  rT        0 0r&   rT  c                       e Zd Zed        Zy)TestTweedieSpecialLog1c                 &   t        j                         | _        | j                  j                  ddg   | _        | j                  j                  | _        t
        j                  j                  t
        j                  j                  j                               }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        t
        j                  j                  t
        j                  j                  j                         d      }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        y )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   &&(88==(G!45HHNN	++%%2;;+<+<+@+@+B%C66"xx}}h-@A!(**-#% 	 ++%%2;;+<+<+@+@+B01 & 366"xx}}h-@A!(**-#% 	r&   NrC  r)   r&   r$   r[  r[    rY  r&   r[  c                       e Zd Zed        Zy)TestTweedieSpecialLog2c                 &   t        j                         | _        | j                  j                  ddg   | _        | j                  j                  | _        t
        j                  j                  t
        j                  j                  j                               }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        t
        j                  j                  t
        j                  j                  j                         d      }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        y )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   &&(88==(G!45HHNN	++##):):)>)>)@#A66"xx}}h-@A!(**-#% 	 ++%%2;;+<+<+@+@+B01 & 366"xx}}h-@A!(**-#% 	r&   NrC  r)   r&   r$   r^  r^  )  rY  r&   r^  c                       e Zd Zed        Zy)TestTweedieSpecialLog3c                 &   t        j                         | _        | j                  j                  ddg   | _        | j                  j                  | _        t
        j                  j                  t
        j                  j                  j                               }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        t
        j                  j                  t
        j                  j                  j                         d      }t        j                  | j                  j                  | j                  j                  ddg   |      j                         | _        y )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   &&(88==(G!45HHNN	++--2;;3D3D3H3H3J-K66"xx}}h-@A!(**-#% 	 ++%%2;;+<+<+@+@+B01 & 366"xx}}h-@A!(**-#% 	r&   NrC  r)   r&   r$   ra  ra  :  rY  r&   ra  c                 `   t         j                  j                  d       d}t         j                  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                  j                  |      }	t        |      D ]=  }
t         j                  j                  |d||
   z  |	|
         j                         ||
<   ? ||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   IINN4A
		q!f%A
&&BEE-(
)C	B
rAE{
a!e
$Cq5QU
C
rAE{
a!e
$C 	A
		#A1X <yysAAJ!599;!< a4Kr&   zignore:GLM ridge optimizationc            	      v   d} t        |       \  }}t        j                  j                  | d      }t        j                  |||      }|j                  d      }t        |j                  t        j                  g d      dd	       t        j                  |||      }|j                  d
      }t        |j                  |j                         t        |j                  |j                  d       t        j                  |||      }|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                  |||      }|j                  d|      }t        |j                  ||   |
|	       |j                  d|t        j                  |j                  d         z        }t        |j                  |j                  |
|	       |t        j                  |j                  d         z  }d|d<   |j                  d|      }t        j                  |j                  |j                        sJ  y )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  ]  s9   
 	Aq>DAq ++

t

4CVVAq%Fjjj)GGNN	xxABt
 ffQ#&G{{&{)HGNNHOO4GKKD9
 VVAq%F$$1D#! % #G JD$GNN
45
 ((:
;
((C
D
((<
=
?B ./ 	?51S)((q(>1DtD((qPQ
@S8S(TTM
++a((q(>;;w~~w~~>>>	?r&   c                     d} t        |       \  }}t        j                  j                  | d      }t        j                  |||      }g }t        j                  ddd      D ]T  }|j                  d|	      }|j                  t        j                  |j                        dkD  j                                V t        j                  |      }t        |      d
k(  sJ y )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

4CVVAq%F
CQB' 7((s%(@

BFF7>>*Q.33567 ))C.Cs8q==r&   c                     t         j                  j                  d       d} t         j                  j                  | df      }d|d d df<   d|d d dd f   j	                  d      z   }t        j
                  |      }t         j                  j                  |      }dD ]  }t        j                  j                  dd	
      }t        j                  |||      }|j                  d|      }t        j                  ||t        j                  j                               }	|	j                  d|      }
t        |j                  |
j                  dd       t        |j                  |
j                  dd        y )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    s+    IINN4A
		q!f%AAadG
a12hll1o
C	B
		"A! > kk!!A4!81S)**HE*: 1R[[%8%8%:;**HE*:TMW[[$=>r&   c                  8   t         j                  j                  d       d} t         j                  j                  | df      }d|d d df<   d|d d dd f   j	                  d      z   }t        j
                  |      }t         j                  j                  |      }dD ]x  }t        j                  j                  d	d
      }t        j                  |||      }|j                  d|      }t        |j                  t         j                  d   dd       z y )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    
 IINN4A
		q!f%AAadG
a12hll1o
C	B
		"A! N kk!!A4!81S)**HE*:gTMNr&   c            
      >   t        j                         } g d}t        j                  || j                  ddg   t        j
                  j                  t        j
                  j                  j                         d            }|j                         }t        j                  ||j                  z
  dz  t        j                  t        j                  t        |j                              t        j                  |j                        f      t        j
                  j!                  t        j
                  j                  j                                     }|j                         }|j#                  |j                        }t%        ||j&                  d   d	
       y )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    s   .  D	+A VVAtyy(G!45;;..BKK4E4E4I4I4K9< / >?F ::<DVVQ[Q&OORWWS\%:BFF477O$LM;;,,R[[->->-B-B-DEGF ::<D 	%%dgg.AAt{{1~D1r&   c            	         t         j                  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                  j                  dd|      z   }t         j                  d   }d	D ]e  }| t        fD ]X  }d
D ]Q  } |||      }|| k(  r|j                  d|      }	n|j                  dd |      }	t        ||	j                  dd       S Z g y )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    s    IINN37
A
AAii1oAadGqAw))!Q22AUU*+F J: 	JC
 ( J
Aq	#://az/JC**f*UC

DIJ	JJr&   c                       e Zd Zd Zy)TestRegularizedc           	         dd l }ddlm} dD ]q  }|j                  j	                  |j                  j                  t                    }t        j                  |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!        | |             j#                        }t%        ||j&                  dd       fd} ||      } ||j&                        }t)        t        j*                  ||z
        d        t y )Nr   r   )glmnet_r_results)binomialrZ  r.   zenet_%s.csvr/   )r0   r  z
rslt_%s_%dr   r  rv  rr  g333333?rI   c           	          j                  |       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?	  sl    --/#e*<C!e)RVVFAI5F)F)JUSUSYSYZ\Z`Z`agZhSiMi)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	  sf   -* #	9Eggoobggooh&?@G::bggll7I}u?TU(+-D AJE12;D " 4 4!{{22449;C 1X 9!UAJ."#3R8  !!"E46!11U1K	  	(8(8t#N FY--.RWWVe^4a8/9#	9r&   N)r   r   r   r  r)   r&   r$   r  r  	  s    )9r&   r  c                   H    e Zd Zed        Zd
dZd Zd Zd Zd Z	d Z
d Zy	)TestConvergencec                     ddl m}  |       }t        |j                  d      |_        t	        |j
                  |j                  t        j                  j                               | _	        y)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	  sH    
 	5v E:	

DII " 4 4 68	r&   c                    t        | j                  j                  |         D ]]  \  }}| j                  j                  |   |   }| j                  j                  |   |dz      }t        j                  ||||      s[|c S  t        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 4] CD 	FAs88''6q9D((&&}5a!e<C{{44d;		
 NOOr&   c                    d}d}| j                   j                  ||      | _        | j                  ||      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )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"2242H HH00=
 	(*;<S--j9:Q>&	(r&   c                    d}d}| j                   j                  ||      | _        | j                  ||      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )Nr   r3  rI   r  r~   r   r  r  s        r$   test_convergence_rtol_onlyz*TestConvergence.test_convergence_rtol_onlyl	  s    ::>>t$>7"2242H HH00=
 	(*;<S--j9:Q>&	(r&   c                    d}d}| j                   j                  ||      | _        | j                  ||      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )Nr3  rI   r  r~   r   r  r  s        r$   test_convergence_atol_rtolz*TestConvergence.test_convergence_atol_rtolz	  s    ::>>t$>7"2242H HH00=
 	(*;<S--j9:Q>&	(r&   c                 "   d}d}| j                   j                  ||d      | _        | j                  ||d      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )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"224AI 3 K HH00=
 	(*;<S--j9:Q>&	(r&   c                 "   d}d}| j                   j                  ||d      | _        | j                  ||d      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )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"224AI 3 K HH00=
 	(*;<S--j9:Q>&	(r&   c                 "   d}d}| j                   j                  ||d      | _        | j                  ||d      }| j                  j                  d   }t        ||       t        t        | j                  j                  d         dz
  |       y )Nr3  r@   r  r  r~   r   r  r  s        r$   !test_convergence_atol_rtol_paramsz1TestConvergence.test_convergence_atol_rtol_params	  s    ::>>t$h>O"224AI 3 K HH0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	  s8    8 8P((((((r&   r  c                     t         j                  j                  d       d\  } }t        j                  t         j                  j                  | |            }t        j                  |j                  d            }t         j                  j                  ||       }t        j                  ||d d d d f   t        j                  j                  j                               }|j                         }|j                  }|j                  }|j                   j#                  ||dz         |j                   j#                  ||j$                        z
  dz  }	t'        ||dz  j                         d	       t'        ||	d	       t        j                  ||d d dd f   t        j                  j                  j                               }
|
j                         }|j                  }|j                  }|j                   j#                  ||dz         |j                   j#                  ||j$                        z
  dz  }	t'        ||dz  j                         d	       t'        ||	d	       y )
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   IINN6LD&
		f56AffQUU1XG
		'-A
&&AadGBII$6$6$>$>$@
AC
'')C


CA
**

Q%
(
**

Q 0 0
1256
7B AQ||~E2Ar& VVAqABx		(:(:(B(B(DEFZZ\F


CA
**

Q%
(
**

Q 3 3
4589
:B AQ||~E2Ar&r&   c                     t        j                         } d| j                  d d  t        j                         5  t        j
                  d       t        j                  | j                  | j                  t        j                  j                               }|j                  ddd      }|j                          d d d        y # 1 sw Y   y xY w)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DJJqM		 	 	"  	h'ffTZZ2;;3D3D3FGggaqgA  s   BCCc                  j   t        j                         } t        | j                  | j                  t
        j                  j                               }|j                  d      }t        |j                  t        j                        sJ |j                  j                  t        j                   k(  sJ y )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  	  sr    <<>D
djj$))BKK,@,@,B
CC
'''
Ccjj")),,,99??bjj(((r&   r-  c                 d   d\  }}}}||g}t        j                  ddgddgg      j                  |       }t        j                  ||g      }t        |||t        j
                  j                               }|j                  dd      }	t        |	j                  t         j                        sJ y )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2Azz2r(#H
aXbkk.A.A.C
DC
'''
2Ccjj"**---r&   c                 8   t         j                  t        j                  d      | dd d df   f   }t        j                  |       dd df   j	                  t         j
                        }|dz  }t        d       t        ||t        j                  j                               j                         }t        |j                  dd	       t        |j                  dd	       t        d
       t        |j                  |j                  d	       t        d        y )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    
bggclDbqbM)*A
rsAv%%bhh/AFAD1R[[113488:E		7A6w:E		5#5#5qADr&   c                    t         j                  t        j                  d      | dd d df   f   }t        j                  |       dd df   j	                  t         j
                        }|dz  }t        ||t        j                  j                               j                         }t        j                  t        d      5  t        |j                  t               sJ 	 d d d        y # 1 sw Y   y xY w)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    
bggclDbqbM)*A
rsAv%%bhh/AFA1R[[113488:E	m9	5 ,%))U+++, , ,s   C**C3c           
         t        d      D cg c]  }t        j                  |dz        dz    }}t        j                  j	                  d      }|j                  ddd      }t        ||      D cg c]+  \  }}t        j                  |j                  ||            - }}}t        |      }t        |||t        j                  j                               j                         }t        ||d d df   |t        j                  j                               j                         }	t        ||d d df   t        j                  j                         	      j                         }
t        |j                   |	j"                         t        j$                  |
j"                  |j                   z
        d
kD  sJ y c c}w c c}}w )Nru  rW  r   r   rG  r  rv  )rl   r  r  rT   r<  r   )r  r7   sinrO  RandomStaterx  zipr   rZ  r   r   rh   ri   r  r*  r   llnullrt   r   )r|  rm  x0rsr  rY  erd  rg   
null_modelnull_model_without_exposures              r$   test_output_exposure_nullr  
  sh    ',Dk	2"&&R.1
	2B	2			q	!Bzz#sz.H36r83DE41a

11
%	&EAERAa(2;;3F3F3H	ce 
 a1g9L9L9N	ce  #&a1gbkk&9&9&;#	ce   ELL*..166-11ELL@AAEEE% 
3 	Fs   "F<40Gc                  L   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                  }| j                  d|d      }t        ||t        j                  j                               }|j                         }d}	|j                  d|	      }
t        |
ddd       |j                  d|	d      }t        |ddd       y )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  )
  s    NNBIIaL"))A,78E%'SE!G
C9G	cgF	GB"Y-'BzN)}BtH
J	"#**AkDAAq--/0A	AE??e?4D D(D9OOuOBEE8$T:r&   c                     t         j                  j                  d       d} t         j                  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                  j                  |      }	t        |       D ]=  }
t         j                  j                  |d	||
   z  |	|
         j                         ||
<   ? d
D ]  }dD ]  }|du rt        rt        j                  d       t        j                   j#                  ||      }t%        |||      j'                         }|j(                  dt         j                  j                  |j(                  j*                        z  z   }t-        |fd      }j/                  |d	      }t1        ||dd       t3        |fd      }j5                  |d	      }t1        ||dd       
  y )Nrd  re  r   rv  rf  r7  rG   r   r   )TF)r   r7  r   Fz%skip, scipy too old, no bessel_wrightrp  r  rz  c                 *    j                  | d      S r   rk   rY  rg   s    r$   rj  z$test_tweedie_score.<locals>.<lambda>a
  s    5==!=3L r&   rc   r3  rI   c                 *    j                  | d      S r   r  r  s    r$   rj  z$test_tweedie_score.<locals>.<lambda>e
  s    q1J 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
  s   IINN4A
		q!f%A
&&BEE-(
)C	B	B
rAF|
q2v
&Cr6b1f
C
rAF|
rAv
&C
A
		#A1X <yysAAJ!599;!<  @ 	@Ae|CD++%%s%;C1S)EYY[FRYY%5%56==;M;M%5%N!NNB$R)LMEKK!K,EE5t$?"2'J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      sN   
     .    - 1 ; L  
 1 					
8
>
"C
C

 h7  7AH AHH:A :Az9A, 9AJo .!, !>%0 %>GG, GGJ1-/C 1R) 6, 01 2L+-A L82, 2B/ 0&4 &8#/ #nf
1 f
R	;*	4, ,N+$4. *  * XD  ,&n]bo/d(:_# _#D<0 <$F6 F*F3 F,J3 J:<1 <"5!9 5.1. 1 11 11 8 14 2)6 )"F7 F@20 2 13 1,24 2 9.5 5p+ +* *(l (&< & . .$00 0"00 0"00 0"00 0 & ;<.? =.?`&>8N.)2VJ:+9 +9\i( i(X'B) 277BHHbhh"IJ. K.,F0;8"@r&   