
    M/Ph$7                    ~   d Z ddlm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mZ ddlmc mZ ddlmZ ddlmc mZ ddlmZ ddlmZ ddlmc mZ ddlZ ddl!m"Z" ddl#Z#	 ddl$m%Z& n# e'$ r Y nw xY wdZ(e(rdd	l)m*Z*  e*d
          Z+ndZ+d Z,d,dZ-d Z. G d d          Z/ G d d          Z0 G d de0          Z1 G d de0          Z2 G d de0          Z3 G d de0          Z4d Z5d Z6ej7        j8        ej7        j9        d                         Z:d Z;d Z<ej7        =                    d ej>        ej?        g          d!             Z@ej7        =                    d ej>        ejA        ej?        g          d"             ZBd# ZCej7        =                    d$ddg          d%             ZDd& ZEd' ZFd( ZGd) ZHd* ZId+ ZJdS )-ak  
Test functions for GEE

External comparisons are to R and Stata.  The statsmodels GEE
implementation should generally agree with the R GEE implementation
for the independence and exchangeable correlation structures.  For
other correlation structures, the details of the correlation
estimation differ among implementations and the results will not agree
exactly.
    )lrangeN)assert_almost_equalassert_equalassert_allcloseassert_array_lessassert_raisesassert_warnsassert_)families
cov_struct)normF)PdfPagesztest_glm.pdfc                 B    t           r|                     |           d S d S N)
pdf_outputsavefig)pdffigs     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/genmod/tests/test_gee.pyclose_or_saver   ,   s,     C     Tc                    t           j                            t           j                            t                              }t          j        t           j                            |d|           d          }|dddf         }|dddf         }|ddddf         }|r7t          j        t          j	        |j
        d         df          |fd          }|||fS )	a#  
    Load a data set from the results directory.  The data set should
    be a CSV file with the following format:

    Column 0: Group indicator
    Column 1: endog variable
    Columns 2-end: exog variables

    If `icept` is True, an intercept is prepended to the exog
    variables.
    results,)	delimiterNr         axis)ospathdirnameabspath__file__np
genfromtxtjoinconcatenateonesshape)fnameiceptcur_dirZgroupendogexogs          r   	load_datar3   1   s     goobgooh7788G
bgll7Iu== #	% 	% 	%A aaadGEaaadGEQQQU8D &~rw
1q'9::DA#$& & & $r   c                    t          t          | j        t          j                             t          t          | j        t          j                             t          t          | j        t          j                             t          t          | j        t          j                             t          t          | j        j        t          j
                             t          t          | j        j        t          j
                             t          t          | j        j        t          j
                             t          t          | j        j        t          j
                             d S r   )r
   
isinstanceparamspdSeriesfittedvaluesresidcentered_resid_resultsr&   ndarray)r   s    r   check_wrapperr>   M   s    Jw~ry11222Jw+RY77888Jw}bi00111Jw-ry99:::Jw'.
;;<<<Jw'4bjAABBBJw'-rz::;;;Jw'6
CCDDDDDr   c                      e Zd Zd Zd Zd Zd Zej        j	        ej        j
        d                         Zd Zd Zd Zd	 Zd
 Zd Zej                            dddg          ej                            dddg          d                         Zd Zd Zd Zd Zd Zej                            dej        ej        g          d             Zd Zd Zd Zd Z d Z!d Z"d Z#ej        j	        d             Z$ej        j	        d              Z%ej        j	        d!             Z&ej        j	        ej        j
        d"                         Z'd# Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3S )4TestGEEc                    d}t           j                            d           t           j                            |df          }d|d d df<   t          j        t          j        |dz            t           j        d                   }|d d df         t           j                            |          z   }t          j        |||          }|	                    g d	
          }|
                                }t          |j        |j        dd                     t          |j        |j        dd                     |                                 d S )N(   麅     sizer   r      r   r   r   r   g?gcͯ?g̒?start_params)r&   randomseednormalkronaranger_geeGEEfitget_margeffr   margeffr6   
margeff_sebsesummary)selfnr2   groupsr1   modelresultmargs           r   test_margins_gaussianzTestGEE.test_margins_gaussian\   s.    
	uyaV,,QQQT
1q5))25+<==QQQT
RY--1-555tV,,FFF  H H !!##fmABB&7888ABB888 	r   c                 F   d}t           j                            d           t           j                            |df          }d|d d df<   t          j        t          j        |dz            t           j        d                   }|d d df         t           j                            |          z   }d	 |D             }t          |          }t          |          }t          j	        |||          }|
                    g d
          }	|	                                }
t          |
j        |	j        dd                     t          |
j        |	j        dd                     t#          d |D                       }t#          |          }t#          |          }t          j	        |||          }|
                    g d
          }	|	                                }
t          |
j        |	j        dd                     t          |
j        |	j        dd                     d S )NrB   rC   rD   rE   r   r   rG   rH   c                 ,    g | ]}t          |          S  )list.0rows     r   
<listcomp>z>TestGEE.test_margins_gaussian_lists_tuples.<locals>.<listcomp>   s    3333T#YY333r   rI   rJ   c              3   4   K   | ]}t          |          V  d S r   )tuplere   s     r   	<genexpr>z=TestGEE.test_margins_gaussian_lists_tuples.<locals>.<genexpr>   s(      ::#5::::::::r   )r&   rL   rM   rN   rO   rP   rQ   rd   rR   rS   rT   rU   r   rV   r6   rW   rX   rj   )rZ   r[   exog_arr
groups_arr	endog_arr	exog_listgroups_list
endog_listr]   r^   r_   
exog_tuplegroups_tupleendog_tuples                 r   "test_margins_gaussian_lists_tuplesz*TestGEE.test_margins_gaussian_lists_tuplest   s    
	u9##!Q#00AWRYq1u--ruZ/@AA
QQQTNRY%5%51%5%=%==	 43(333	:&&)__

I{;;FFF  H H !!##fmABB&7888ABB888 :::::::
Z((I&&Z>>FFF  H H !!##fmABB&7888ABB88888r   c                 .   t           j                            d           t           j        d         }t          j        d          }t           j        d         |d d df<   t          j        d          }t          j        |||t          j	                              }|
                    dd	d
g          }|                                }t          |j        t           j        d                    t          |j        t           j        d         d           d S )NrC   r   r   r   r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   ry   familynaivegΌ]
g{@cov_typerK   gX']?sܩ?ư>rtol)r&   rL   rM   rQ   r*   rP   rR   rS   r   BinomialrT   rU   r   rV   rW   rZ   r1   r2   r\   r]   r^   r_   s          r   test_margins_logisticzTestGEE.test_margins_logistic   s     		u,-wvU12QQQT
1tVH4E4G4GHHHK*+E  G G !!##beI&6777y)9EEEEEEr   c                    t           j                            d           t           j        d         }t          j        d          }t           j        d         |d d df<   t          j        d          }t          j        |||          }|                    ddd	g
          }|	                                }t          |j        t           j        d         d           t          |j        t           j        d         d           d S )NrC   rw   rx   rz   r   ry   r}   ]
@gr~   gg]ڿh㈵>r   r   r   )r&   rL   rM   rQ   r*   rP   rR   
NominalGEErT   rU   r   rV   rW   r   s          r   test_margins_multinomialz TestGEE.test_margins_multinomial   s    
 		u,-wvU12QQQT
1udF33G#Y;0 1 1 !!##beK&8tDDDDy)9EEEEEEr   c                    t           j                            d           t           j        d         }t          j        d          }t           j        d         |d d df<   t          j        d          }t          j        |||          }|                    ddd	g
          }|	                                }t          t          |t          j                  d           d S )NrC   rw   rx   rz   r   ry   r}   r   r   r~   T)r&   rL   rM   rQ   r*   rP   rR   r   rT   plot_distributionr   r5   pltFigure)rZ   close_figuresr1   r2   r\   r]   r^   r   s           r   test_nominal_plotzTestGEE.test_nominal_plot   s     		u,-wvU12QQQT
1udF33G)19(=  ? ? &&((ZSZ00$77777r   c                 2   t           j                            d           t           j        d         }t          j        d          }t           j        d         |d d df<   t          j        d          }t          j        |||t          j	                              }|
                    dd	d
g          }|                                }t          |j        t           j        d         d           t          |j        t           j        d         d           d S )NrC   )
                        rx   rw   r   ry   r{   r}   g74@gU&:?r~   g:#J{/&@r   r   gIV&
@)r&   rL   rM   rQ   r*   rP   rR   rS   r   PoissonrT   rU   r   rV   rW   r   s          r   test_margins_poissonzTestGEE.test_margins_poisson   s     		u45wvU12QQQT
1tVH4D4F4FGGGG%z;3 4 4 !!##beGn4@@@@xtDDDDDDr   c                 8   t           j                            d           t           j        d         }t          j        d          }t           j        d         |dddf<   t          j        d          }t          j        |||          }|                    dd	d
g          }t          j	        |||t          j                              }|                    d          }t          |j        |j         d           t          |j        |j        d           dS )zf
        Check the 2-class multinomial (nominal) GEE fit against
        logistic regression.
        rC   rw   rx   rz   Nr   ry   r}   r   r   r~   r{   r   r   r   )r&   rL   rM   rQ   r*   rP   rR   r   rT   rS   r   r   r   r6   rX   )rZ   r1   r2   r\   r]   r   logit_modellogit_resultss           r   test_multinomialzTestGEE.test_multinomial   s    		u,-wvU12QQQT
1udF33))W$i<1) 2 2 geT6%-%6%8%8: : :#99)=(=DIIII]%6TBBBBBBr   c                    t          j        d          }t          j        d          }d|dd<   t          j        d          }|ddxx         dz  cc<   t          j        t          j        d          t           j        d                   }t          j        ||||          }|                                }t          |j
        t           j        d                    t          j        d          }d|dd <   t           j        d	         }t           j        d
         }t           j        d         }t          j        t          j        d          |f          }t          j        ||||t          j                              }t          j        g d          }dt          d|z
            z  }	|                    d|	          }t          |j
        t           j        d         d           t          |j        d           t          |j        t           j        d         d           t          j        ||||t          j                              }|                    d           d S )Nr   r   r   r   r   r   r   weightsgUUUUUU?)r   r   rD   r   rD   rG   rD   rG      rG   r      r   r      r   r   ry   r   ry   )r   r   r   r   r   r   r   r   rD   rD   rD   rD   rG   rG   rG   rG   rD   rD   rD   rD   )r   r   r   r   r   r   rG   rG   r   r   r   r   r   r   ry   ry   	   r   r   r   )r   r   )r   rG   r   r   rG   r   r   r   )
ddof_scalescaling_factor)g4%?g
?r   )atolgIEc?)g'i֦?gU?r   r   )r&   r*   zerosrO   rP   rQ   rR   rS   rT   r   r6   column_stackr   IndependencemeanfloatscalerX   Exchangeable)
rZ   r2   r   r1   r\   r]   r^   exog1gfacs
             r   test_weightedzTestGEE.test_weighted  s    wr{{'"++"adq2d44tVW===ruV}555 '"++ ! " ! " * +U344 tVW#-#:#<#<> > >G,,,--5a== a<<ru-?'@tLLLLh/// 	
BE*=$>TJJJJ tVW#-#:#<#<> > >		Q	r   c                    t           j                            t           j                            t                              }t           j                            |dd          }t          j        |          }t          j	                    }t          j                    }t          j                            d|d         |||          }|                    d          }dd	lm} |                    d|t          j	                    
          }	|	                                }
|j        }|
j        }
t'          |j        |
j        dd           t'          |j        |
j        dd           d S )Nr   zepil.csvzy ~ age + trt + basesubject)r   r|   r}   r   r   )GLMr{   r   r   r   )r!   r"   r#   r$   r%   r(   r7   read_csvr   r   r   r   rR   rS   from_formularT   +statsmodels.genmod.generalized_linear_modelr   r<   r   r6   rX   )rZ   r.   r,   datafamindmod1rslt1r   mod2rslt2s              r   test_poisson_epilzTestGEE.test_poisson_epil.  s?   '//"'//(";";<<Wi<<{5!!  %''w##$:DO$(S $ F F'** 	DCCCCC 6'/'7'9'9   ; ;

 elDIIII	594dCCCCCCr   c                    t           j                            d           t           j                            d          }t           j                            d          }d|d d df<   t          j        t          d          t          j        d                    }t           j        |d<   t           j        |dd	<   t           j        |d
ddf<   t          j	        |||d          }|
                                }t          t          |j                  d           t          t          j        |j        j                  t           j        d                    t          j        |          t          j        |                              d          z  }t          j	        ||         ||d d f         ||         d          }|
                                }t          |j        |j                   t          |j        |j                   d S )NrC   d   rE   )r   rD   r   r   r   r   r   r   r   drop)missing_   )r   rD   none)r&   rL   rM   rN   rO   r   r*   nanrR   rS   rT   r   lenr1   asarrayr2   r+   rQ   isfiniteallr6   rX   )	rZ   r1   r2   r\   r   r   iir   r   s	            r   test_missingzTestGEE.test_missingH  s    		u	  c **yX..QQQT
RWQZZ006aVac
RUAXwudFF;;;

C
OOR000BJty77uFFF["+d"3"3"7"7":"::wuRy$r111u+vbz6JJJ

EL%,777EIuy11111r   c                 $   t           j                            d           t           j                            d          }t           j                            d          }t           j                            d          }t           j                            d          }t          j        t          d          t          j        d                    }t           j        |d<   t           j        |dd<   t           j        |dd	<   t          j	        |||||d
          }dD ]m}|
                                }i }	|dk    rd|d<   d|d<   d|	d<   d|	d<   t          j        j        dd|dd|	}
|
                                }t          t!          |
j                  d           t          t          j        |
j        j                  t           j        d                    |                                }i }	|dk    r|d         |	d<   |d         |	d<   t          j        j        d|d         |dd|	}|                                }t          |j        j        |j        j                   t          |j        j        |j        j                   od S )NrC   r   rE   r   r   r   r   r   r   )r1   r   exog2exog3r\   )r   r   r   offsettimeendog ~ exog1 + exog2 + exog3r\   r   )r\   r   r   r   )r   rG   r   )r   )r&   rL   rM   rN   rO   r   r*   r   r7   	DataFramecopyrR   rS   r   rT   r   r   r1   r   r2   r+   rQ   dropnar6   valuesrX   )rZ   r1   r   r   r   r\   data0kr   kwargsr   r   r   r   s                 r   test_missing_formulazTestGEE.test_missing_formulad  sz    		u	  c **	  c **	  c **	  c **RWQZZ006aVac
vbeuuu',@ @ A A  	D 	DA::<<DFAvv!"X V#+x !'v7' B/7d06B B:@B BD HHJJEDJ444
49? ; ;RU5\JJJ;;==DFAvv#'>x !%fv7' B/3H~D06B B:@B BD HHJJE 3U\5HIII	 0%)2BCCCC=	D 	Dr   k1FTk2c                    t          d          D ]}g d}d||<   t          j        |d                   }t          j        |d         df          }i }t          j        |d                   |d<   |rt          j        d          |d<   |rt          j        d          |d	<   t          t                    5  t          j        ||fi | d d d            n# 1 swxY w Y   d S )
NrD   )r   r   r   r   r   r   r   r\   exposurer   )ranger&   r   r   
ValueErrorrR   rS   )rZ   r   r   jpr1   r2   r   s           r   test_invalid_argszTestGEE.test_invalid_args  s)    q 	/ 	/AAAaDHQqTNNE8QqT1I&&DF!x!~~F8 2%'Xb\\z" .!#"vz** / /t..v.../ / / / / / / / / / / / / / /	/ 	/s   6CC	C	c                    t          d          \  }}}t          j        t          |                    }t	          |          }|D ]9}t          j        ||k              }t          t          |                    ||<   :t          j                    }t          j
        d          }	t          j        |||||	          }
|
                                }t          j        ||||||	          }|                                }t          |j        |j        d           t          |                                |                                d           d S )Ngee_logistic_1.csvFgridr|   r   r   r|   r   r   decimal)r3   r&   r   r   setflatnonzeror   r   r   r   AutoregressiverR   rS   rT   r   r6   standard_errors)rZ   r1   r2   r0   Tidxr   jjr|   vamd1mdf1md2mdf2s                 r   test_default_timezTestGEE.test_default_time  sE    '';<<tU HSZZ  %jj 	$ 	$B,,B3r77OOAbEE"$$&E222geT5BGGGwwyygeT5q!#% % %wwyyDKa@@@@D0022 0022A	? 	? 	? 	? 	? 	?r   c           	      L   t          d          \  }}}t          j        t          |                    }t	          |          }|D ]9}t          j        ||k              }t          t          |                    ||<   :t          j                    }t          j
                    }	t          j                    }
t          j        d          }g dg dg dg}g dg dg d	g}t          |
|	|f          D ]\  }}t          j        ||||||          }|                                }t#          |          t#          |          k    rGt%          |j        ||         d
           t%          |                                ||         d
           t          j        |d d d f         |d d d f         |d d dd f         fd          }t-          j        |          }ddgd t1          |j        d         dz
            D             z   |_        t          |
|	f          D ]\  }}t          j                            dd|||          }|                                }t%          |j        ||         d
           t%          |                                ||         d
           d S )Nr   Fr   )gg) ?gv3?gi+8Fg?)gi`dS?grX?gfgxcR[n?)g~Xs?g ?gOg g˽?)gGiWK?gnsEW?g
Z?gY!|)?)g<3C?g~$.?g[r></?g-V*?)g4ViI?g UZ?g~z	.t?g5	9?r   r   r   r   YIdc                     g | ]
}d |dz   z  S zX%dr   rc   rf   r   s     r   rh   z)TestGEE.test_logistic.<locals>.<listcomp>  6     %H %H %H)* &+a!e_ %H %H %Hr   Y ~ X1 + X2 + X3r   )r3   r&   r   r   r   r   r   r   r   r   r   r   r   	enumeraterR   rS   rT   idr   r6   r   r)   r7   r   r   r+   columnsr   )rZ   r1   r2   r0   r   r   r   r   r|   vevir   cfser   vmdmdfDs                      r   test_logisticzTestGEE.test_logistic  s   F '';<<tU HSZZ  %jj 	$ 	$B,,B3r77OOAbEE"$$$&&$&&&E2224 4 44 4 44 4 4	55 5 55 5 55 5 5	6 r2rl++ 	/ 	/DAqeQ::B&&((C!uu2#CJ1qAAAA#C$7$7$9$92a5,-/ / / / NE!!!T'NE!!!T'NDABBKH !# # #LOO$M %H %H.3DJqMA4E.F.F%H %H %H H	r2h'' 	+ 	+DAq%%&8$-3 & C CB&&((C
BqE1==== 3 3 5 5r!u()+ + + + +	+ 	+r   c                    g d}g dg dg dg}t           j                            d           d}d}d}t          j                    }d	D ]}t          j        |          d d d f         t          j        |          d d d f         z
  }t          j        |          }||z  }	t           j                            |	          }
g }g }g }t          |          D ]}t           j        
                    ||f
          }|                    |           |                    d          }t          j        |
t           j        
                    |
                    }|                    ||z              |                    |t          j        |          z             t          j        |          }t          j        |          }t          j        |d          }t!          j        d          }t%          j        |||||          }|                                }t+          |j        ||dz
                      t+          |j        ||dz
                      d S )N)r   gD?g$ĸ?)g(P8yI?gPiޒ?g6s?)g1?gc?gB?)g9k"?g0E?gK13?iHor         ?rD   )r   r   rD   rE   r   r   r   Fr   r   )r&   rL   rM   r   GaussianrP   abslinalgcholeskyr   rN   appendsumdotr*   r)   r   r   rR   rS   rT   r   
dep_paramsr6   )rZ   dep_params_trueparams_true	num_groupar_paramr   gagsizeixcmatcmat_rr1   r2   r\   ixexpvalerrorsarr  r  s                        r   test_autoregressivezTestGEE.test_autoregressive  sC   ===;;;:::;;;= 		y!!!	   	D 	DE5!!!!!T'*RYu-=-=dAAAg-FFBBr>DY''--FEDF9%% 2 2I$$5!*$55Aq	(8(8e(8(D(DEEVf_---a"'%..01111N5))E^F++F>$Q///D*666BfRBGGGB&&((Cuqy/IJJJ
K	,BCCCC5	D 	Dr   c                    t          j                    }t          d          \  }}}t          j                    }t          j        |||d ||          }|                                }t          t          j
        ||j                  |j                   t          |t          j
        ||j                  z
  |j                   d S )Ngee_linear_1.csv)r   r  r3   r   r   rR   rS   rT   r   r&   r  r6   r9   r:   )rZ   r|   r1   r2   r0   r  r  r  s           r   test_post_estimationzTestGEE.test_post_estimationI  s    "$$&'9::tU$&&WUD%vr::ffhhBF444,	. 	. 	.EBF4$<$<<I	' 	' 	' 	' 	'r   c           
      H	   t           j                            d           d}t           j                            |df          }|d d df         |d d df         z   |d d df         z   }|dt           j                            |          z  z  }t          j        t          j        |dz            t          j        d                    }t          j        g d	g          }t          j        d
g          }t          j	                    }t          j                    }t          j        |||||||f          }	|	                                }
t          |
                                d         d           t          |
                                d         d           t          j        g d	g          }t          j        dg          }t          j	                    }t          j                    }t          j        |||||||f          }|                                }t          |                                d         d           t          |                                d         d           t           j                            |df          }t          j        ddgg          }t          j        d
g          }t           j        d         }t%          d          D ]}|d d df         d|dz  z   |d d df         z  z   t           j                            |          z   }t          j	                    }t          j                    }t          j        |||||          }|                                }t          j	                    }t          j                    }t          j        |||||||f          }	|	                                }
t          j        t          j        |t          j        |                                |                              }t          j        ||j                  |z  }dt/          j        t          j        |                     z  }|
                                d         }t5          t          j        ||z
            d           d S )N      rG   rE   r   r   r   rD         ?r   r           r|   r   
constraint	statisticgL?p-valueg8o;?r6  gV@gBvw?r7  )r   r7  r   r  g      $@r   g{Gz?)r&   rL   rM   rN   rO   rP   r*   arrayr   r  r   r   rR   rS   rT   r   
score_testrQ   r   sqrtr  
cov_paramsr6   r   cdfr  r   )rZ   r[   r2   r1   r0   LRr|   r   r   res1r   res2fr)  mod0rslt0r  wald_zwald_pscore_ps                        r   test_scoretestzTestGEE.test_scoretestX  s.    		tyaV,,QQQT
T!!!Q$Z'$qqq!t*4RY%%1%----	!a%(("'!**55 Hnnn%&&HbV"$$$&&wudE&"$!Q9 9 9xxzzDOO--k:&	( 	( 	(DOO--i8(	* 	* 	* Hnnn%&&HcW"$$$&&wudE&"$!Q9 9 9xxzzDOO--k:'	) 	) 	)DOO--i8(	* 	* 	* yaV,,Hq"gYHbTNNE%Lr 	> 	>AAJ#C-41:!==	  a (()E&((F(**B75$f&(* * *DHHJJE&((F(**B75$f&(aV= = =D88::D26%*:*:*<*<a#@#@AABBBVAu|,,r1F26&>>/222Foo''	2GbfVg%566====#	> 	>r   r   c                 *   t           j                            d           d}t           j                            |df          }t          j        t          j        |dz            t          j        d                    }|d d ddgf         }|                    d          dt           j                            |          z  z   }t          j        g dg d	g          }t          j	        d
          }t          j        |||||f |                      }	|	                                 t          j        ||| |                      }
|
                                }dD ]}t          j        ||| |                      }|r|                                 |                    |          }t          |d         |	j        d                    t          |d         |	j        d                    t          |d         |	j        d                    d S )Nr3  r4  rG   rE   r   rD   r   )r   r   r   r   )r   r   r   r   r   )r:  r   r   FTr;  r<  df)r&   rL   rM   rN   rO   rP   r*   r  r   r   rR   rS   rT   compare_score_testr   score_test_results)rZ   r   r[   r2   r0   exog_subr1   rB  rC  mod_lrmod_subres_subcall_fitmodscore_resultss                  r   test_compare_score_testzTestGEE.test_compare_score_test  s    		tyaV,,	!a%(("'!**55Aq6	?Q!bi&6&6A&6&>&>">>Jlll344HQKKeA$.JLL2 2 2

'%5ZZ\\JJJ++--% 	1 	1H'%uFFFC 			227;;Mk*)+68 8 8  i())46 6 6  d#)$/1 1 1 1	1 	1r   c                    t           j                            d           d}t           j                            |df          }t          j        t          j        |dz            t          j        d                    }|d d ddgf         }|                    d          dt           j                            |          z  z   }t          t                    5  t          j        |||t          j                              }|                                }t          j        |||t          j                              }|                    |           d d d            n# 1 swxY w Y   t          t                    5  t          j        |||t#          j                    	          }|                                }t          j        |||t#          j                    	          }|                    |           d d d            n# 1 swxY w Y   t)          t*                    5  t          j        |||          }|                                }t          j        |dd
         |d d
d d f         |dd
                   }|                    |           d d d            n# 1 swxY w Y   t          t                    5  t           j                            |          }	t          j        ||||	          }|                                }t          j        |||          }|                    |           d d d            n# 1 swxY w Y   t/          j        t                    5  t           j                            |          }	t          j        |||          }|                                }t          j        |||          }|                    |           d d d            d S # 1 swxY w Y   d S )Nr3  r4  rG   rE   r   rD   r   r   r{   r   r   )r&   rL   rM   rN   rO   rP   r*   r  r	   UserWarningrR   rS   r   r   rT   r   rP  r   r  r   r   	Exceptionuniformpytestwarns)
rZ   r[   r2   r0   rR  r1   rT  rU  rW  ws
             r    test_compare_score_test_warningsz(TestGEE.test_compare_score_test_warnings  s   
	tyaV,,	!a%(("'!**55Aq6	?Q!bi&6&6A&6&>&>">> +&& 	, 	,geXu)3)@)B)BD D DGkkmmG'%u%/%<%>%>@ @ @C""7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, +&& 	, 	,geXu%-%6%8%8: : :GkkmmG'%uX5E5G5GHHHC""7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 9%% 	, 	,geXu55GkkmmG'%#,TcT111WuQsU|DDC""7+++		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, +&& 	, 	,	!!q!))AgeXua@@@GkkmmG'%u--C""7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, \+&& 	, 	,	!!q!))AgeT511GkkmmG'%u--C""7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s_   A<E##E'*E'A<H

HH)A2J''J+.J+A8M

MM.A6O11O58O5c           
         t           j                            d           d}t           j                            |df          }|d d df         |d d df         z   |d d df         z   }|dt           j                            |          z  z  }t          j        t          j        |dz            t          j        d                    }t          j        g d	g          }t          j        d
g          }t          j	                    }t          j                    }dD ]}	t          j        |||||||f          }
|
                    |	          }|                    |	           t!          |j        j        t           j        d                    t!          |j        j        t           j        d                    |	dk    r*t!          |j        j        t           j        d                    d S )Nr3  r4  rG   rE   r   r   r   rD   r5  r8  )robustr}   bias_reducedr9  r   )rG   rG   rd  )r&   rL   rM   rN   rO   rP   r*   r=  r   r  r   r   rR   rS   rT   r   r   
cov_robustr+   rQ   	cov_naivecov_robust_bc)rZ   r[   r2   r1   r0   rB  rC  r|   r   r   r]   r^   s               r   test_constraint_covtypezTestGEE.test_constraint_covtype  s   
	tyaV,,QQQT
T!!!Q$Z'$qqq!t*4RY%%1%----	!a%(("'!**55Hnnn%&&HbV"$$$&&9 	I 	IHGE4v')q!f> > >EYYY11F""H"555F-3RU4[AAAF,2BE$K@@@>)) 4 :BE$KHHH	I 	Ir   c           	         t          j                    }t          d          \  }}}t          j                    }t          j                    }g dg dg}g dg dg}t          ||f          D ]y\  }	}
t          j        |||d ||
          }|	                                }t          |j        ||	         d           t          |                                ||	         d           zt          j        |d d d f         |d d d f         |d d dd f         fd	          }t          j        |          }d
dgd t#          |j        d         dz
            D             z   |_        t          ||f          D ]\  }	}
t          j                            dd|||
          }|	                                }t          |j        ||	         d           t          |                                ||	         d           d S )Nr0  )g:AghG{C?g-.1Xgihj?)gw6'g=֥?g7guYd?)gBuLhȐ?ggvd_?gRJe?gR!Iz?)g>G5?grz^?g`Z?ga%P?r   r   r   r   r  r  c                     g | ]
}d |dz   z  S r  rc   r  s     r   rh   z'TestGEE.test_linear.<locals>.<listcomp>8  r  r   r	  r   )r   r  r3   r   r   r   r
  rR   rS   rT   r   r6   r   r&   r)   r7   r   r   r+   r  r   )rZ   r|   r1   r2   r0   r  r  r  r  r   r  r  r  r  s                 r   test_linearzTestGEE.test_linear   sn   8 "$$&'9::tU$&&$&&5 5 55 5 567 7 76 6 67
 r2h'' 	, 	,DAqeT61==B&&((C
BqE2>>>> 3 3 5 5r!u(*, , , , , NE!!!T'NE!!!T'NDABBKH !# # #LOO$M %H %H.3DJqMA4E.F.F%H %H %H H	r2h'' 	, 	,DAq%%&8$-3 & C CB&&((C
BqE2>>>> 3 3 5 5r!u(*, , , , ,	, 	,r   c                    t          j                    }t          j                            d           t          j                            d          }d|d d df<   t          j        |t          j        d                   t          j                            d          z   }t          j        t          j	        d          t          j        d	                   }t          j                    }t          j                    }t          j        g d
g         }t          j        d         }t          ||f          D ]S\  }	}
t          j        |||d ||
||f          }|                                }t#          |j        d         dd           Td S )NrC   ),  rG   rE   r   r   )r   r   r   皙?rm  r   r   r   r   )r   r   r   r   r   )r:  rD   r   r   )r   r  r&   rL   rM   rN   r  rQ   rO   rP   r   r   r   r
  rR   rS   rT   r   r6   )rZ   r|   r2   r1   r0   r  r  rB  rC  r   r  r  r  s                r   test_linear_constrainedzTestGEE.test_linear_constrainedB  sU   "$$
	uyX..QQQT
tRU<011I#&&'	#g77$&&$&&E<<<.!E"Jr2h'' 	> 	>DAqeT61%&F, , ,B&&((C
1q"=====		> 	>r   c           	      F   t          j                    }t          d          \  }}}g }t          |j        d         dz            D ]4}|                    dgdz             |                    dgdz             5t          j        |          d d d f         }t          j	                    }t          j        |||d ||          }|                                }	t          j        d         }
t          j        d         }t          |	j        |
d	           t          |	                                |d	           t          j                    }t          j        |||d |||
          }|                    |	j                  }t          j        d         }
t          j        d         }t          |j        |
d	           t          |                                |d	           |j                                        }t'          |j        t          j        d         dd           d S )Nzgee_nested_linear_1.csvr   r   r   r   )gM 6cſgSQ%?g]xҀI# gIT4"?)g_Ay?g(Ǥ?g#Ҥ?gK2W?r   r   )dep_datarJ   )glQſg%נqY?g`!) g;8-?)g]@x?gv'+՝?g:@I?g){l?)g8j?gތ?g>>tA?r   r   r   )r   r  r3   r   r+   extendr&   r=  r   r   rR   rS   rT   rQ   r   r6   r   NestedrY   r   Variance)rZ   r|   r1   r2   r0   group_nr)  dpr  r   r  r  ner   smrys                  r   test_nested_linearzTestGEE.test_nested_linearY  s   "$$&'@AAtUu{1~+,, 	& 	&ANNA519%%%NNA519%%%%(7##AAAtG,$&&WUD%vr::vvxx UDEUDEDKQ7777D0022B$%	' 	' 	' 	'   WUD%vr%' ' 'vv4;v// UEFUDEDKQ7777D0022B$%	' 	' 	' 	' &&((ME./D	" 	" 	" 	" 	" 	"r   c                    t           j                            d           d}t          j        t          j        |dz            t          j        d                                        t                    }t          j        t          j        |dz            t          j        d                                        t                    }t          j        t          j        |dz            t          j        d                                        t                    }t           j                            |dz            }dt           j                            |dz            z  }dt           j                            |dz            z  }||         ||         z   ||         z   }|d	t           j                            |          z  z  }t          j
        ||||d
          }	t          j                            dddt          j                    |	          }
|
                                }|j                                        }t%          |j        t           j        d         dd           d S )Ni  i'  r   2   r   rE   r   rD   r  )y	TheGroupsgroups1groups2zy ~ 1r  z0 + groups1 + groups2)r\   rs  r   r   )g-y<-?gPn@gvӂ!@g⪲?r   rt  )r&   rL   rM   rO   rP   r*   astypeintrN   r7   r   rR   rS   r   r   rv  rT   rY   r   rw  rQ   )rZ   r[   r\   r  r  groups_e	groups1_e	groups2_er  rO  r]   r^   r{  s                r   test_nested_pandaszTestGEE.test_nested_pandas  s   
	t 18,,bgcll;;BB3GG '")AG,,bgbkk::AA#FF'")AG,,bgbkk::AA#FF 9##c#22	((a2g(666		((a2g(666	Vy11Ig4FF	S29###++++\&-'C C D D $$W[.E0:0A0C0C*, % . .   ((**ME89D	" 	" 	" 	" 	" 	"r   c                 "   t          j                    }t          dd          \  }}}t          j        d          }t          j        |||d ||          }|                                }t          j	        d         }t          |j        |d           t          j	        d         }	t          |j        |	d           t          t          |          t
          j                   t          t          |j                  t
          j                   d S )	Ngee_ordinal_1.csvFr-   ordinalg3xMz?gfE#D?g3ٿgI(CvZg]]>'?gvj?g1Ҥw?gP4r   r   )gTwܻ?g*vq?g>2?g%q[?g?gy?ox?g[${?gj۵?)r   r   r3   r   GlobalOddsRatiorR   
OrdinalGEErT   r&   rQ   r   r6   rX   r   typeOrdinalGEEResultsWrapperr<   OrdinalGEEResults)
rZ   r|   r1   r2   r\   r   rW  rsltr  r  s
             r   test_ordinalzTestGEE.test_ordinal  s    "$$'(;.35 5 5tV '	22nUD&$CCwwyy U C DDKQ7777 U A BDHb!4444 	T$ZZ!=>>>T$-((#*?@@@@@r   c                    t           j                            d           d}t           j                            dd|          }t          j        |          }t           j                            |          }t           j                            |          }t          j        ||||d          }t          j	        
                    d||          }|                                 t          j                    5  t          j        d	           t          j        
                    d||          }|                                 d d d            d S # 1 swxY w Y   d S )
N  rB   r   rD   rE   )r  r\   x1x2zy ~ 0 + x1 + x2r   ignore)r&   rL   rM   randintrP   rN   r7   r   rR   r  r   rT   warningscatch_warningssimplefilterr   )rZ   r[   r  r\   r  r  rO  r]   s           r   test_ordinal_formulazTestGEE.test_ordinal_formula  sm    		sIaA&&1Y1%%Y1%%\V2RHHII++,=vB+OO		$&& 	 	!(+++N//0A657 0 9 9EIIKKK		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   9AEEEc                    t           j                            d           d}t           j                            dd|          }t          j        t          j        |dz            t           j        d                   }t           j                            |df          }t          j	                    }t          j        ||||	          }|                                 d S )
Nr  rB   r   rD   r   r   r   rE   r   )r&   rL   rM   r  rO   rP   rQ   rN   r   OrdinalIndependencerR   r  rT   )rZ   r[   r  r\   r*  odimodel1s          r   test_ordinal_independencez!TestGEE.test_ordinal_independence  s     		sIaA&&1q5))25;77I1a&)),..1f===

r   c                 @   t           j                            d           d}t           j                            dd|          }t          j        t          j        |dz            t           j        d                   }t           j                            |df          }t          j	                    5  t          j
        d	           t          j                    }t          j        ||||
          }|                                 d d d            d S # 1 swxY w Y   d S )Nr  rB   r   rD   r   r   r   rE   r  r   )r&   rL   rM   r  rO   rP   rQ   rN   r  r  r  r   NominalIndependencerR   r   rT   )rZ   r[   r  r\   r*  nmir  s          r   test_nominal_independencez!TestGEE.test_nominal_independence  s.    		sIaA&&1q5))25;77I1a&))$&& 	 	!(+++022C^Aq&SAAAFJJLLL		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   2ADDDc                 P   t          j                    }t          dd          \  }}}t          j        d          }t          j        |||d ||          }|                                }|                                }	t          t          |	t          j                  d           d S )Nr  Fr  r  T)r   r   r3   r   r  rR   r  rT   r   r   r5   r   r   )
rZ   r   r|   r1   r2   r\   r   rW  r  r   s
             r   test_ordinal_plotzTestGEE.test_ordinal_plot  s     "$$'(;.35 5 5tV '	22nUD&$CCwwyy$$&&ZSZ00$77777r   c                 f   t          dd          \  }}}t          j                    }t          j        ||||          }|                                }t          j        d         }t          j        d         }t          |j	        |dd           t          |
                                |dd           t          j        d	          }t          j        ||||          }	|	                    |j	        
          }
t          j        d         }t          j        d         }t          |
j	        |dd           t          |

                                |dd           t          t          |          t          j                   t          t          |j                  t          j                   d S )Ngee_nominal_1.csvFr  r   )gfy?g؀q?g鷯gg
ݿ)gU%Ӷ?gŲ?grG ,:?gV!̊43?r   r   nominalrJ   )g=$?g歺Ք?go[tTgْU)g*V?g^?g=zGb?g_`F?)r3   r   r   rR   r   rT   r&   rQ   r   r6   r   r  r   r  NominalGEEResultsWrapperr<   NominalGEEResults)rZ   r1   r2   r\   r   r   r   cf1se1r   r   cf2se2s                r   test_nominalzTestGEE.test_nominal  s   '(;.35 5 5tV $&&~eT6bAAA

 e<=eBCc4@@@@--//4dKKKK '	22~eT6bAAAel33 e<=eBCc4@@@@--//4dKKKK 	T%[[#">???T%.))3+@AAAAAr   c           	         t          j                    }t          d          \  }}}t          j                    }t          j                    }g dg dg}g dg dg}t          ||f          D ]y\  }	}
t          j        |||d ||
          }|	                                }t          |j        ||	         d           t          |                                ||	         d           zt          j        |d d d f         |d d d f         |d d d	d f         fd	
          }t          j        |          }ddgd t#          |j        d	         d	z
            D             z   |_        t          ||f          D ]\  }	}
t          j                            dd|||
          }|	                                }t          |j        ||	         d           t          |                                ||	         d           d S )Ngee_poisson_1.csv)g쨢gBϫgBqK
?g'p?gisg<m޿)gԿ7(g	AͬgJQh(E?gs3I?gurxmgQv޿)gaPlL?g(-O ?g4ɽ?gxȢ?gG5?gho2?)g<pgF?gK?gi?gp?gȵp(S?g!:S%X?r   r   r   r   r   r  r  c                     g | ]
}d |dz   z  S r  rc   r  s     r   rh   z(TestGEE.test_poisson.<locals>.<listcomp>]  r  r   Y ~ X1 + X2 + X3 + X4 + X5r   )r   r   r3   r   r   r   r
  rR   rS   rT   r   r6   r   r&   r)   r7   r   r   r+   r  r   )rZ   r|   r1   r2   rx  r  r  r  r  r   r  r  r  r  s                 r   test_poissonzTestGEE.test_poisson   sr   : !##()<==tW$&&$&&9 9 99 9 9:7 7 77 7 78 r2h'' 	+ 	+DAqgtVQ??B&&((C
BqE1==== 3 3 5 5r!u()+ + + + + NE!!!T'NGAAAtG,< ABBK)/02 2 2LOO$M %H %H.3DJqMA4E.F.F%H %H %H H	r2h'' 	+ 	+DAq%%&BD&'1 & F FB&&((C
BqE1==== 3 3 5 5r!u()+ + + + +	+ 	+r   c                 @   t           j                            d           d}t           j                            |df          }t           j                            |          }t          j        t          j        |dz            t          j        d                    }d|dd<   d	|d
d<   t          j        |||          }|	                                }t           j        
                    |          }||         }||d d f         }	||         }
t          j        ||	|
          }|	                                }t          |j        |j                   t          |j        |j                   i dd l}t          t!          |                    D ]\  }}|j        ||dz            |<   fd|D             }t          j        |||          }|	                                }t          |j        |j                   t          |j        |j                   d S )N   rB   r   rE   rG   rD   ry   r   r   "   $   )r\   r   c                      g | ]
}|         S rc   rc   )rf   r   mps     r   rh   z'TestGEE.test_groups.<locals>.<listcomp>  s    )))Q2a5)))r   )r&   rL   rM   rN   rO   rP   r*   rR   rS   rT   permutationr   r6   tvaluesstringr
  r   ascii_letters)rZ   r[   r*  r  r\   r  result1r&  y1r  r  model2result2r  r   r   r  model3result3r  s                      @r   test_groupszTestGEE.test_groupsh  s    		sI1a&))I!$$ 1q5))271::66qtr"uAf---**,, Y""1%%rUr111uX*R000**,,777999 c&kk** 	2 	2DAq(1q51BqEE))))&)))Ag...**,,77799999r   c                 4   t          j                    }t          j                    }t          j                            d           t          j                            d          }t          j                            d          }t          j                            d          }t          j                            d          }t	          j        t          d          t	          j
        d                    }t          j        ||||d          }t          j                            d||||          }	|	                                }
t"          j                            d|	                                          }|j        }t)          |j        |
j        d
           |
                    d          }t)          |j        |d
           |
j        t	          j        t	          j        |
j                            z  }t)          ||j        d
           d S )NrC   r   rE   r   r   r  X1X2X3r	  r   r  r   r   r}   r   )r   r   r   r  r&   rL   rM   rN   rO   r   r*   r7   r   rR   rS   r   rT   lmOLSr<   r   r6   r   rX   r?  diagrf  r  )rZ   vsr|   r  r  r  r  r\   r  r  r  olsr  naive_tvaluess                 r   test_compare_OLSzTestGEE.test_compare_OLS  s   
 $&&"$$
	uI#&&Y3''Y3''Y3''RWQZZ00Lq"B??@@W!!"4fa)/B " @ @ffhhf!!"41!==AACC lCJ
B????  ' 22CGR4444
RWRWS]-C-C%D%DDM3;CCCCCCr   c                    d}t           j                            d           t           j                            |          }t           j                            |          }t          j        t          j        |df          |d d d f         fd          }t           j                            |          }t          j        t          d          t          j        d                    }t          j
        ||||d          }t          j        d	
          }t          j                    }	t          j        |||||	|          }
|
                                }t          j                            d||||	|          }|                                }t          j                            d||d|	|          }|                                }t          j                            dd|||	|          }|                                }t          j                            dd|d|	|          }|                                }t'          |j        |j        d           t'          |j        |j        d           t'          |j        |j        d           t'          |j        |j        d           t+          |           d S )Nr   rC   rE   r   r   r   r   )r  r  Timer\   Fr   r   zY ~ X1r  r\   ry   r   )r&   rL   rM   rN   r)   r*   r]  rO   r   r7   r   r   r   r   r  rR   rS   rT   r   r   r6   r>   )rZ   r[   r  r  matr  r\   r   r   r|   r   r   r   r   mod3rslt3mod4rslt4mod5rslt5s                       r   test_formulaszTestGEE.test_formulas  sy    
	uI!$$Y1%%nbgq!foor!!!T'{;!DDDy  a ((RWQZZ00|!2tvNNOO&E222"$$wq#vD"$& & &

w##Hfd+1b $ B B

w##Hfd+1b $ B B

w##Hh4+1b $ B B

w##Hh6+1b $ B B

EL%,BBBBEL%,BBBBEL%,BBBBEL%,BBBBer   c                 >   t          j                    }t          j                    }t          j                            d           dt          j                            d          dk     z  }t          j                            d          }t          j                            d          }t          j                            d          }t          j                            ddd          }t          j
        ||||d          }t          j                            d||||	          }	|	                                }
t          j                            d|
          }|                    d          }t#          |
j        j        |j        j        d           d S )NrC   r   r   rE   r   rG   r  r	  r   r  Fdispr   r   )r   r   r   r   r&   rL   rM   rN   r  r7   r   rR   rS   r   rT   discreteLogitr   r6   r   rZ   r  r|   r  r  r  r  r\   r  r   r   r   r   s                r   test_compare_logitzTestGEE.test_compare_logit  sj   $&&"$$
	u!!s!++a/0Y3''Y3''Y3''""1ac"22Lq"B??@@w##$6+1b $ B B

~**+=A*FFe$$EL/1D$&	( 	( 	( 	( 	( 	(r   c                 z   t          j                    }t          j                    }t          j                            d           t	          j        t	          j        t          j        	                    d                               }t          j        
                    d          }t          j        
                    d          }t          j        
                    d          }t          j                            ddd          }t          j        ||||d          }t          j                            d||||          }	|	                                }
t$          j                            d|	          }|                    d
          }t'          |
j        j        |j        j        d           d S )NrC   r   rE   r   rG   r  r	  r   r  Fr  r   r   )r   r   r   r   r&   rL   rM   ceillogr]  rN   r  r7   r   rR   rS   r   rT   r  r   r6   r   r  s                r   test_compare_poissonzTestGEE.test_compare_poisson  sx   $&&!##
	uGRVBI--3-7788899Y3''Y3''Y3''""1ac"22Lq"B??@@w##$6+1b $ B B

,,-?a,HHe$$EL/1D$&	( 	( 	( 	( 	( 	(r   c                    d}t           j                            d           t           j                            |          }t           j                            |          }t          j        t          j        |dz            t           j        d                   }t           j                            dd|          }t           j                            d||z   z  |z   |          }t          j	        |||||d          }d	}t          j                            |||t          j                    d
          }	|	                    g d          }
t!          |
j        d           |
                                }|
                    |j                  }|
                    |ddg         |j                  }|
                    |ddg         d|j        z            }|
                    d|j        z            }t)          ||           t)          ||           t)          |||j        z              t)          |||j        z              t           j                            d          }t           j                            d          }t          j	        ||d          }|
                    |          }t          j        |
j                  }|d         |d         |z  z   |d         |z  z   }t)          ||           d S )Nr~  i  rE   r   r   r   皙?)r  r  r  r\   r   Y ~ X1 + X2r   r|   r   )r   r  r  rJ   Tr   r  r  )r2   r   r   r   )r  r  )r2   )r&   rL   rM   rN   rO   rP   rQ   r]  r7   r   rR   rS   r   r   r  rT   r   	convergedpredictr   r   r   r6   )rZ   r[   r  r  r\   r   r  r   fmlr]   r^   pred1pred2pred3pred4pred5x1_newx2_newnew_exogpred6r6   pred6_corrects                         r   test_predictzTestGEE.test_predict  s   
	tY1%%Y1%%1q5))25;77""1aa"00ISBG_v5A>>|!2R6'-/ / 0 0 $$S&$,4,=,?,?,4 % 6 6 66V%t,,,  dk22D$$6t{KKD$$6q4;OOa$+o66u%%%u%%%ut{2333ut{2333!!r!**!!r!**<vV < <==H--FM**q	F1I$66V9KK}-----r   c                    t           j        d         }t           j        d         }t           j        d         }t          j        |          }t	          j        dd          }t          j        ||||          }|                                }|j	        t          j
        d          z  }t          |                    t           j        d	         d
          d
                                         d           t          |j        t           j        d         dd           t          |t           j        d         dd           d S )NrG   r   rD   r   rG   r   r   r   ry   rD   r   g      @r   rD   r   rG   rD   r   r   rG   r   r   rD   r   r   r   r   r   r   r   r   r   r   rD   rD   rD   r   Tmax_lagr   r   UUUUUU?ro  r   gmy@gim@g=פ6̣r   r   g3?g	R?)r&   rQ   toolsadd_constantr   
StationaryrR   rS   rT   rX   r?  r   covariance_matrixr  r6   )rZ   r1   r2   r0   csr]   r^   r  s           r   test_stationary_gridzTestGEE.test_stationary_grid6  s   9:u7889!$''"14888tUr:::Z"''***,,RU7^Q??BFFHH*	, 	, 	,
 	ru,(.48t	E 	E 	E 	EBE"67dNNNNNNr   c           
         t           j        d         }t           j        d         }t           j        d         }t           j        d         }t          j        |          }t	          j        |||t          j        dd                    }|                                }|j	        t          j
        d	          z  }t          |j        t           j        d
         dd           t          |t           j        d         dd           t           j        d         d d d f         }t	          j        ||||t          j        dd                    }|                                 d S )Nr   r  )r   r   r   r   r   r   r   r   r   r   r   r   r  r   Fr  r   r  r  r   r   r  )r   r   rD   r   r   rD   r   r   rD   r   r   r   rG   )r   r   )r&   rQ   r  r	  rR   rS   r   r
  rT   rX   r?  r   r6   )rZ   r1   r2   r   r0   r]   r^   r  s           r   test_stationary_nogridzTestGEE.test_stationary_nogridK  sg    9:u78u7889!$''tU#-#8>C$E $E $EF F F Z"''*** 	ru,(.48t	E 	E 	E 	EBE"67dNNNN u78DAtU#-#8>C$E $E $EF F F 			r   c           	         d}t           j                            d           t           j                            |          }t           j                            |          }t          j        t          j        d          t           j        d                   }t           j                            dd|          }t           j                            dd|          }t           j                            d||z   z  |z   t          j	        |          z   |          }t          j        ||||||d	          }d
}	t          j                            |	||t          j                    dd          }
|
                                }t%          |j        d           |                                }|                    |d                   }|                    |d                   }|                    |d         |d                   }|                    |dd          |d         dd          |d         dd                    }|                    |j        j        dd          |d         dd          |d         dd          d          }t/          ||           t/          ||           t/          ||           t/          |dd          |           t/          |dd          |           d S )Nr~  rC   rE      r   r   r   r  r  r  r  r\   r   r   r  r   r   )r|   r   r   Tr  )r   )r   r   ir2   r   r   F)r2   r   r   	transform)r&   rL   rM   rN   rO   rP   rQ   r]  poissonr  r7   r   rR   rS   r   r   r   rT   r   r  r  r]   r2   r   )rZ   r[   r  r  r\   r   r   r  r   r  r]   r^   r  r  r  r  r  r  s                     r   test_predict_exposurezTestGEE.test_predict_exposurei  s   
	uY1%%Y1%%2d44""1aa"009$$Q$22IcR"Wo6 fX../56  8 8|!2R6'-8E E F F $$S&$,4,<,>,>,4z % K K V%t,,,  d8n55Z(899>D,<  > >DJ&*8nSTT&:(,Z(8(>  @ @ FL$5cdd$;&*8nSTT&:(,Z(8(>).  0 0 	u%%%u%%%u%%%cddU+++cddU+++++r   c                    d}t           j                            d           d t          |          D             }t	          t          j        t          j        d          t           j        d                             }t	          t           j                            dd|                    }t	          t           j                            dd|                    }d	 t          |||          D             }t          j        |||t          j                    ||
          }|                                }|                                }	|                    |||          }
t!          |	|
           d S )Nr~  rC   c                     g | ]?}d t           j                                        t           j                                        g@S )r   )r&   rL   rN   )rf   _s     r   rh   z7TestGEE.test_predict_exposure_lists.<locals>.<listcomp>  s;    NNNBI$$&&	(8(8(:(:;NNNr   r  r   r   r   rE   c                     g | ]O\  }}}t           j                            d |d         |d         z   z  |z   t          j        |          z             PS )r  r   r   )r&   rL   r  r  )rf   exog_ioffset_i
exposure_is       r   rh   z7TestGEE.test_predict_exposure_lists.<locals>.<listcomp>  sk     
 
 
 -* Ivay6!9,-826*;M;MM 
 
 
r   )r\   r|   r   r   r  )r&   rL   rM   r   rd   rO   rP   rQ   r]  ziprR   rS   r   r   rT   r  r   )rZ   r[   r2   r\   r   r   r1   r]   r^   r  r  s              r   test_predict_exposure_listsz#TestGEE.test_predict_exposure_lists  sM   
	uNNU1XXNNNbgbimmRU4[99::bi''11'5566	))!QQ)7788
 
 14D&(0K0K	
 
 
 #%%
 
 
   D(KKu%%%%%r   c           	         d}t           j                            d           t           j                            |          }t           j                            |          }t          j        t          j        d          t           j        d                   }t           j                            dd|          }t          j        |          }t           j        	                    d||z   z  d|z  z   |          }t          j        ||||||d	          }d
}	t          j                            |	||t          j                    d          }
|
                                }t%          |j        d           t          j                            |	||t          j                    |          }|                    |j                  }t+          |j        |j                   t%          |j        d           t          j                            |	||t          j                    |          }|                    |j                  }t+          |j        |j                   t%          |j        d           t          j                            |	||t          j                    d          }|                    |j                  }t+          |j        |j                   t%          |j        d           t          j                            |	||t          j                    dd          }|                                }t%          |j        d           t          j                            |	||t          j                    d|z            }|                    |j                  }t+          |j        |j                   t%          |j        d           d S )Nr~  rC   rE   r  r   r   r   r  r  r  r   r  TrJ   )r|   r   r   )r|   r   r   )r&   rL   rM   rN   rO   rP   rQ   r]  expr  r7   r   rR   rS   r   r   r   rT   r   r  r6   r   )rZ   r[   r  r  r\   r   r   r  r   r  r  r  r  r  r  r  model4result4model5result5model6result6s                         r   test_offset_formulazTestGEE.test_offset_formula  sc    
	uY1%%Y1%%2d44""1aa"006&>>IcR"WoF
:CC|!2R6'-8E E F F %%c64-5-=-?-?-5 & 7 7 **,,W&---%%c64-5-=-?-?-3 & 5 5 **'.*99777W&---%%c64-5-=-?-?/7 & 9 9 **'.*99777W&---%%c64-5-=-?-?/9 & ; ; **'.*99777W&---%%c64-5-=-?-?/9( & L L **,,W&---%%c64-5-=-?-?-.Z & 9 9 **'.*99777W&-----r   c                 :   t          j                    }t          j                    }t          j                            d           d}t          j                            |          }t          j                            |          }t          j                            |          }t	          j        t	          j	        d          t          j
        d                   }t          j        |||d          }t          j                            d||||          }	|	                                }
|
                    d	d
d          }t%          t'          |          d           t%          d |D             dd
g           t%          d |D             ddg           d S )NrC   r   rE   r~  r   )r  r  r  r  r   r   r  r   c                 &    g | ]}|j         j        S rc   )r   r  rf   r*  s     r   rh   z,TestGEE.test_sensitivity.<locals>.<listcomp>  s    AAAQ\4AAAr   r8  c                 L    g | ]!}t          j        |j                  d          "S rp  )r&   r   r6   r+  s     r   rh   z,TestGEE.test_sensitivity.<locals>.<listcomp>  s)    AAARZ11!4AAAr   g&(?g&J?)r   r   r   r  r&   rL   rM   rN   rO   rP   rQ   r7   r   rR   rS   r   rT   params_sensitivityr   r   )rZ   r   r|   r[   r  r  r  r\   r  rW  r  pss               r   test_sensitivityzTestGEE.test_sensitivity  s   $&&"$$
	uI!$$Y1%%Y1%%2d44Lq"5566g""=&!*0R # A Awwyy$$QQ//CGGQ'''AAbAAA #J	( 	( 	( 	AAbAAA/1DE	G 	G 	G 	G 	Gr   c                 `   t           j                            d           t           j                            d          }t           j                            d          }d|dddf<   t          j        t          j        d          t          j        d	                    }d
|dd<   i }g d}t          d	          D ]}i ||<   |d
k     r@||         t           j        d         z   ||         t           j        d         z   f||         d<   n?||         t           j        d         z   ||         t           j        d         z   f||         d<   |d
k     r8t          j	        d	d          \  }}||         |z   ||         |z   f||         d<   t          j	        dd          \  }}||         |z   ||         |z   f||         d<   t          j                    }	t          j        ||||	          }
|
                                }dD ]}t          j        ||          }t          j        ||||          }|                                }|du rd\  }}nd\  }}t!          |j        |j        ||           t!          |j        |j        ||           t!          |j        |j        ||           dS )z
        The Equivalence covariance structure can represent an
        exchangeable covariance structure.  Here we check that the
        results are identical using the two approaches.
        `  r   rE   )r   r   r   Nr   r   rG   rD   r   )r   rG   ry   r   )r   r   r   rD   )r   r   r   rD   rG   r   r   r   r7  ry   r   rN  )
return_covT)r   r   )MbP?r3  rt  )r&   rL   rM   rN   rO   rP   r*   r   rQ   tril_indicesr   r   rR   rS   rT   Equivalencer   r6   rX   r   )rZ   r1   r2   r\   pairsstartr   abexr  r  r2  ecr  r  r   r   s                     r   test_equivalencezTestGEE.test_equivalence   s    		t	  b ))yW--QQQT
1rwqzz22rss q 	; 	;AE!H 1uu$Qx"%
*;;$Qx"%
*;;=a  %Qx"%0F*GG$Qx"%0F*GGIa 1uuq"--1$Qx!|U1X\:aq"--1$Qx!|U1X\:a$&&f<<<**,,% 	P 	PJ'*EEEBWUD&R@@@FjjllG
 T!!'
dd'
dGNGN!%D2 2 2 2GK4dKKKKGM7=t$OOOOO!	P 	Pr   c                    t           j                            d           t           j                            d          }t           j                            d          }d|d d df<   t          j        t          j        d          t          j        d                    }d	|d
d <   t          j        t          j        d          t          j        d                                        t           j                  }|t           j        	                    t          |                             }t          j        |d          }t          j        ||||          }|                                 |j        D ]f}|j        |         }d |                                D             }	t'          ||k              }
t)          t'          |	          |
|
dz   z  dz             gt+                      }|j        D ]e}|j        |                                         D ]C}t-          |d         |d                   D ]$\  }}||f}||vsJ |                    |           %Dft          j        |d          }t          j        ||||          }t1          j                    5  t1          j        d           |                    d           d d d            d S # 1 swxY w Y   d S )Nr1  r~  rE   )r~  r   r   r   r   r   rD      T)labelsr2  r   c                 8    g | ]}t          |d                    S rp  )r   r+  s     r   rh   z7TestGEE.test_equivalence_from_pairs.<locals>.<listcomp>R  s"    000#ad))000r   r   r  maxiter)r&   rL   rM   rN   rO   rP   r*   r  int32r  r   r   r5  rR   rS   _pairs_from_labelsgroup_labelsr6  r   r  r   r   r  addr  r  r  rT   )rZ   r1   r2   r\   r?  eqr  r   r   vlmixsr  r8  r9  kys                   r   test_equivalence_from_pairsz#TestGEE.test_equivalence_from_pairs;  s   
	t	  b ))yW--QQQT
1rwr{{33rss 1rwr{{33::28DD	--c&kk::;#6dCCCf<<< 	 $ 	6 	6AA00QXXZZ000BFaK  ACGGQ!a%[1_5555 ee$ 	  	 AXa[''))    !adOO    DAqQBS====GGBKKKK   #6dCCCf<<<$&& 	" 	"!(+++JJqJ!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   +KKKN)8__name__
__module____qualname__r`   ru   r   r   r^  marksmoke
matplotlibr   r   r   r   r   r   r   parametrizer   r  r  r.  r1  rL  r   r   r   rY  ra  rh  rk  rq  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r/  r<  rL  rc   r   r   r@   r@   Z   s         0&9 &9 &9PF F F(F F F* [[8 8  8E E E&C C C0*  *  * ZD D D42 2 28/D /D /Db [TE4=11[TE4=11/ / 21 21/&? ? ?4S+ S+ S+r*D *D *DX' ' ':> :> :>x [\J,C,6,C,E F F!1 !1F F!1F/, /, /,bI I I,@, @, @,D> > >.'" '" '"R"" "" ""HA A A4 [  ( [
 
 
 [   [[8 8  8B B B>E+ E+ E+P(: (: (:T D  D  DD* * *X( ( (0( ( (0$. $. $.LO O O*  <&, &, &,P& & &<5. 5. 5.nG G G49P 9P 9Pv)" )" )" )" )"r   r@   c                       e Zd ZdZd ZdS )CheckConsistencyNc                    | j         }|                    | j                  }|                    | j        d          }|                    | j        d          }|                                 |                                 t	          |j        d           t	          |j        d           t	          |j        d           d}|d|j        f|d|j        f|d|j        ffD ]\  }}}t          j
        t          j        |                    }	t          |j        |	|           |dk    r-|                    |          }	t          |j        |	|           t          |                                ||d	
           t          |j        ||d	
           t#          |j        |j        u            t#          |j        |j        u            t#          |j        |j        u            t%          t&          |j        d           d S )NrJ   r}   )rK   r   rd  rc  g:0yE>r   r   g|=r   	robust_bc)rW  rT   rK   rY   r   r   re  rf  rg  r&   r?  r  r   rX   r   r@  cov_params_defaultr
   r   r   )
rZ   rW  
res_robust	res_naiveres_robust_bcr   resr   covrX   s
             r   test_cov_typezCheckConsistency.test_cov_typek  s%   hWW$*;W<<
GG):%,  . .	T->)7   9 9 	 	Z((333Y'111]+^<<< Xz'<=GZ%9:0KL%
 	P 	P S(C
 '"'#,,''CCGSt4444>))  ///BB48888CNN,,c5IIIIC2CdOOOOO 	
-1FFGGG	,	0CCDDD0+, 	- 	- 	- 	j#'K@@@@@@r   )rM  rN  rO  rK   r^  rc   r   r   rU  rU  g  s-        L,A ,A ,A ,A ,Ar   rU  c                   *    e Zd Zed             Zd ZdS )TestGEEPoissonCovTypec                     t          d          \  }}}t          j                    }t          j                    }t          j        |||d ||          | _        t          j	        g d          | _
        d S )Nr  gڅ͝쨢gqIϫg}v]K
?g&&p?gtm^sgQ޿)r3   r   r   r   r   rR   rS   rW  r&   r=  rK   )clsr1   r2   rx  r|   r  s         r   setup_classz!TestGEEPoissonCovType.setup_class  s~      ))<==tW!##$&&'%wfbAA8 %K %K %K L Lr   c                 l   t          dd          \  }}}t          j        |          }t          j        |          }t          j        |          }t	          j                    }t          j                    }t          j	        |||d ||          }|
                                }t          |           d S )Nr  Fr  )r3   r7   r8   r   r   r   r   r   rR   rS   rT   r>   )rZ   r1   r2   rx  r|   r  rW  r   s           r   test_wrapperz"TestGEEPoissonCovType.test_wrapper  s    ()</4 6  6  6tW	%  |D!!)G$$!##$&&geT7D&"==		er   NrM  rN  rO  classmethodrd  rf  rc   r   r   r`  r`    s?        
L 
L [
L    r   r`  c                   $    e Zd Zed             ZdS )TestGEEPoissonFormulaCovTypec                    t          d          \  }}}t          j                    }t          j                    }t          j        |d d d f         |d d d f         |d d dd f         fd          }t          j        |          }ddgd t          |j
        d         dz
            D             z   |_        t          j                            dd|||          | _        t          j        g d	          | _        d S )
Nr  r   r   r  r  c                     g | ]
}d |dz   z  S r  rc   r  s     r   rh   z<TestGEEPoissonFormulaCovType.setup_class.<locals>.<listcomp>  r  r   r  r   rb  )r3   r   r   r   r   r&   r)   r7   r   r   r+   r  rR   rS   r   rW  r=  rK   )rc  r1   r2   rx  r|   r  r  s          r   rd  z(TestGEEPoissonFormulaCovType.setup_class  s3     ))<==tW!##$&&NE!!!T'NGAAAtG,< ABBK)/02 2 2LOO$M %H %H.3DJqMA4E.F.F%H %H %H H	 '&&'CT'(B ' H H 8 %K %K %K L Lr   N)rM  rN  rO  rh  rd  rc   r   r   rj  rj    s2        L L [L L Lr   rj  c                   *    e Zd Zed             Zd ZdS )TestGEEOrdinalCovTypec                     t          j                    }t          dd          \  }}}t          j        d          }t          j        |||d ||          | _        t          j	        g d          | _
        d S )Nr  Fr  r  r  )r   r   r3   r   r  rR   r  rW  r&   r=  rK   )rc  r|   r1   r2   r\   r   s         r   rd  z!TestGEEOrdinalCovType.setup_class  s     "$$'(;.35 5 5tV '	22.fdFBGG8 %> %> %> ? ?r   c                 v   t          dd          \  }}}t          j        |d          }t          j        |          }t          j        |d          }t	          j                    }t          j        d          }t          j	        |||d ||          }|
                                }t          |           d S )Nr  Fr  yendogname	the_groupr  )r3   r7   r8   r   r   r   r   r  rR   r  rT   r>   )rZ   r1   r2   r\   r|   r   rW  r   s           r   rf  z"TestGEEOrdinalCovType.test_wrapper  s    '(;.35 5 5tV 	%h///|D!!6444"$$'	22nUD&$CC		er   Nrg  rc   r   r   rn  rn    s<        ? ? [?    r   rn  c                   *    e Zd Zed             Zd ZdS )TestGEEMultinomialCovTypec                     t          dd          \  }}}t          j                    }t          j        ||||          | _        t          j        g d          | _        d S )Nr  Fr  r   )gꇿ?gܱ"/*?g7qg@Bݿ)	r3   r   r   rR   r   rW  r&   r=  rK   )rc  r1   r2   r\   r   s        r   rd  z%TestGEEMultinomialCovType.setup_class  sx     ((;.35 5 5tV $&&.fDDD8 %2 %2 %2 3 3r   c                 L   t          dd          \  }}}t          j        |d          }t          j        |          }t          j        |d          }t	          j                    }t          j        ||||          }|                                }t          |           d S )Nr  Fr  rq  rr  rt  r   )
r3   r7   r8   r   r   r   rR   r   rT   r>   )rZ   r1   r2   r\   r   rW  r   s          r   rf  z&TestGEEMultinomialCovType.test_wrapper  s    '(;.35 5 5tV	%h///|D!!6444$&&nUD&R@@@		er   Nrg  rc   r   r   rv  rv    s<        	3 	3 [	3    r   rv  c                     t           j                            d           d\  } }}t           j                            | |z  |f          }d}||d d df         z  t          j        d|dz  z
            |d d df         z  z   |d d df<   d|d d df         |d d df         z
  z  }t          j        |          }t           j                            |          }t          j        t          j        |           t          j	        |                    }t          j        |||t          j                    	          }	|	                    d
          }
t          |
j        dt           j        d         z  dd           d S )N"  )  r   r   rE   r  r   r   ffffff?rD   )r\   r|   gHz>)r   r   r   r7  r   {Gz?gQ?r   )r&   rL   rM   rN   r?  r!  r  rO   rP   r*   rR   rS   r   r   fit_regularizedr   r6   rQ   )nggsr   r*  rlprr   r  r\   r]   r^   s              r   test_regularized_poissonr    sc   INN4IBA
	r"uaj))AA!!!Q$i"'!AqD&//!AAAqD'11AaaadG
qAw111a4 
!C6#;;D
	$AWRYr]]BGBKK00FGAq0@0B0BCCCE""9--FFM3~)>#>D* * * * * *r   c                     t           j                            d           d\  } }}t          j        t          j        |           t          j        |                    }t          j        | |z  |f          }dt           j                            | |z            dk     z  |d d df<   t           j                            | |z            |d d df<   d}t          d|          D ]\}t           j                            | |z            }||d d |dz
  f         z  t          j
        d|dz  z
            |z  z   |d d |f<   ]t          j        |d d ddf         t           j        d	                   }d
}	t          j
        |	          t          j        t           j                            |           t          j        |                    z  }
|
t          j
        d|	z
            t           j                            | |z            z  z  }
||
z   }t          j        ||t          j                    |          }|                    dd          }t          j        d          }t           j        d	         |dd<   t%          |j        |dd           t%          |j        j        t           j        |	         dd           d S )Nrz  )r4  rG   r4  r   rE   r  r   r   rG   )r   rD   g      ?r   皙?)r   r\   r}  r   rA  r4  rn  r   皙?)r&   rL   rM   rO   rP   r*   r   r]  rN   r   r?  r  rQ   rR   rS   r   r   r~  r   r6   r  )r  r  r   r\   r*  r  r   epsr  ser  r]   r^   r:  s                  r   test_regularized_gaussianr  &  sz    INN4IBAWRYr]]BGBKK00F
"R%A29$$"R%$00367AaaadGiBrE**AaaadGA1a[[ : :iBrE**a1Q3i-"'!ad("3"3c"99!!!Q$
&111ac6BE,/
0
0CA


RWRY--2-66DDDAQ")**2*66	66AaAGAqZ%<%>%>vNNNE""4"55F	#BeL!BqsGFM2Ds;;;;E$/qD* * * * * *r   c                 l   t           j                            d           t           j                            d          }t           j                            d          }t          j        t          j        d          t           j        d                   }t          j        |||          }|	                                }|
                    d          }t          t          |t          j                  d           |                    d          }t          t          |t          j                  d           |                    d          }t          t          |t          j                  d           |                                }t          t          |t          j                  d           d S )	Niz  r   rE   )r   r   r~  r   r   T)r&   rL   rM   rN   rO   rP   rQ   rR   rS   rT   plot_added_variabler   r5   r   r   plot_partial_residualsplot_ceres_residualsplot_isotropic_dependence)r   r2   r1   r\   r]   r^   r   s          r   
test_plotsr  I  sG    INN39%%DI(++EWRYr]]BE$K00FGD%((EYY[[F

$
$Q
'
'CC,,d333

'
'
*
*CC,,d333

%
%a
(
(CC,,d333

*
*
,
,CC,,d33333r   c                  H   g g dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!} t          j        | d"d          | d#         $          }t          j        |j        |j        d"k    d%f<   t          j                            d&|d't          j
                    t          j                    (          }|                                                                }d"|d)<   t          j        |j        |d)d%g         |j        t          j
                    t          j                    *          }t#          |j        |j                   t#          |j        |j                   t#          |j        |j                   |                                }|                                }t-          |j        j        |j        j                   d S )+N)r  alstatusfakegrps)4AAr   r   r   )5Ar  r          @r   )6Ar  r   rD   r   )7Ar  r   r  rD   )8Ar  r   r   rG   )9Ar  r   r  r   )11Ar  r   r   r   )12Ar  r   r  r   )13Ar  r   r   ry   )14Ar  r   r   r   )15Ar  r   r   r   )16Ar  r   r     )17Ar  r         @r   )18Ar  r   r  r   )19Ar  r   r     )20Ar  r   r  r   )2CCr   r  r   )3Cr  r   r   r   )4Cr  r   r   r   )5Cr  r   r  rD   )6Cr  r   r   rG   )9Cr  r   r   r   )10Cr  r   rD   r   )12Cr  r   rD   r   )14Cr  r   g      @ry   )15Cr  r   r   r   )17Cr  r   r   r   )22Cr  r   r   r  )23Cr  r   r   r   )24Cr  r   r   r   )32Cr  r   r  r  )35Cr  r   r   r   r   r   )r  r  zstatus ~ faker  )r   r\   r   r|   constant)r\   r   r|   )r7   r   r&   r   locr  rR   rS   r   r   r   r   r   r   r   r  r  r   r1   r2   r\   rT   r   r6   r   )r   rO  rW  r   r\  rE  s         r   r   r   ^  si    $222  $    $""" $ !   $ #""	 $
 !   $ #"" $ "!! $ $## $ "!! $ "!! $ #"" $ %$$ $ %$$ $ %$$ $ %$$ $  %$$! $" #""# $$ !  % $& !  ' $( #"") $* !  + $, !  - $. "!!/ $0 "!!1 $2 $##3 $4 "!!5 $6 #""7 $8 #""9 $: #""; $< #""= $> %$$? $@ #""A $DD 
d122hQ	0	0	0B#%6BF27a< 
'

R*4*A*C*C&.&7&9&9  ; ;C 
				BBzN729b*f!56rw(577"+--/ / /D DJ'''49%%%T[)))
''))C88::D
)4;+=>>>>>r   c                     t           j        d         }t           j        d         }t           j        d         }t           j        d         }|d d d f         }|d d d f         }||||fS )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   rD   rD   rD   rG   rG   rG   )r&   rQ   )r   r  r  r  r   s        r   simple_qic_datar    sf    
9:A	:	;B	:	;B
9:A	AAAtGB	AAAtGBb"a<r   r|   c                 l    |             }t          |           \  }}}}t          j        ||||          }|                    d          }|j        }t          j        ||||          }	|	                    d          }
|
j        }| t
          j        u r't          |           dz  }t          |           dz  }n| t
          j        u rt          j
        |          }|dk    }||         t          j        ||                   z  ||         z
  ||<   t          j        |t          j        |          z  |z
  |z
            }t          j        |t          j        |          z  |z
  |z
            }nt          d          |                    |j        |j        |                                          }|	                    |
j        |
j        |
                                          }t%          ||d         d           t%          ||d         d           t'          j                    5  t'          j        d           |                                }|
                                }d d d            n# 1 swxY w Y   t%          ||d	d          d
           t%          ||d	d          d
           d S )Nr|   r\   r   r   r  zUnknown familyg-C6?r   r  r   r   )r  rR   rS   rT   r9   r   r  r   r   r&   
zeros_liker  r  r   qicr6   r   r@  r   r  r  r  )r|   r   r  r  r  r   r  r  mean1r  r  mean2ql1ql2cr   qle1qle2qler1qler2s                       r   test_ql_knownr    s    &((C"6**LAr2qWQ3q111FjjAj&&G EWQ3q111FjjAj&&G E"""1vvgl1vvgl	8#	#	#M!U"qu%"-"fQ&.233fQ&.233)***::gngmW5G5G5I5IJJD::gngmW5G5G5I5IJJDCat,,,,Cat,,,,		 	"	"  h'''               E48$////E48$//////s   ,=I55I9<I9c           	      p    |             }t          |           \  }}}}t          j        ||||          }|                    d          }|j        }t          j        ||||          }	|	                    d          }
|
j        }| t
          j        u rd}n| t
          j        u rt          j	        |t          j
        |d|z
  z            z  t          j
        d|z
            z             }|t          j	        |t          j
        |d|z
  z            z  t          j
        d|z
            z             z  }nw| t
          j        u rZt          j	        |t          j
        |          z  |z
            t          j	        |t          j
        |          z  |z
            z
  }nt          d          |                    |j        |j        |                                          \  }}}|	                    |
j        |
j        |
                                          \  }}}t#          ||z
  |dd           d S )Nr  r   r   r   zunknown familyr   r   )r  rR   rS   rT   r9   r   r  r   r&   r  r  r   r   r  r6   r   r@  r   )r|   r   r  r  r  r   r  r  r  r  r  r  qldiffr  r  r  s                   r   test_ql_diffr    s   
 &((C"6**LAr2qWQ3q111FjjAj&&G EWQ3q111FjjAj&&G E"""	8$	$	$BF5AI#6777"&U:K:KKLL"&RVEQY$788826!e);L;LLMMM	8#	#	#&RVE]]*U233F1rve}},u4556 )***GNGM#..002 2JD!QGNGM#..002 2JD!Q D4Kd>>>>>>r   c                  8   t          j        t                    5  t          j                    } t          |           \  }}}}t          j        ||| |          }|                                }|	                                 d d d            d S # 1 swxY w Y   d S )Nr  )
r^  r_  r[  r   r  r  rR   rS   rT   r  )r   r  r  r  r   r]   r^   s          r   test_qic_warningsr    s    	k	"	"  !!%c**2q!2c!444

                 s   A(BBBregc                    t           j                            d           d}t           j                            |df          }t           j                            dd|          }t           j                            |          }t          j        t          j        d          t          j        |dz                      }t          j
        ||t          j                    |          }t          j
        ||t          j                    |          }| r.|                    d	          }|                    dd
          }	n-|                    d          }|                    d
d          }	t          |j        |	j                   | s>t          |	j        |j        z  |	j        t          j        |	j                  z             d S d S )NiW  r{  rD   rE   r   r   r  r  )pen_wtr  )r  r   r}   r   )r   r   )r&   rL   rM   rN   gammar  rO   rP   r*   rR   rS   r   r   r~  rT   r   r6   rf  r   	ones_like)
r  r[   r*  r   r  grpr  r  r  r  s
             r   test_quasipoissonr     s    INN3A
	q!f%%A
	11%%A
	!A
'")C.."'!s("3"3
4
4CWQ("2"4"4S   FWQ("2"4"4S   F  ;(((44((4(@@**g*..**4'*:: GNGN333 I 	)G,==W5F(G(GG	I 	I 	I 	I 	II Ir   c            	         t           j                            d           d} dd}t          j                  }| t          j        t           j                            ||                    z  }t           j                            |          fdt          |          D             }dt          j
        |          z  }fdt          |          D             }t          j
        |          }t           j                            |z  df	          }t          j        |t           j        d
                   |z   }t          j        |||t!          j        d                    }|                                }	t          j        |||t!          j        d                    }
|
                                }t          j        |||t!          j        dd                    }|                                }t)          |	j        j        |j        j        d           t)          |	j        j        |j        j        d         d           d S )N   r  r   r   c                 v    g | ]5}t          j        t           j                                                 6S )rE   )r&   r  rL   rN   )rf   r   covrrI  s     r   rh   z test_grid_ar.<locals>.<listcomp>-  s8    CCCAbi&&A&..	/	/CCCr   r   c                     g | ]}|gz  	S rc   rc   )rf   r   rI  s     r   rh   z test_grid_ar.<locals>.<listcomp>0  s    %%%aQCE%%%r   rD   rE   )r   r7  r   Fr   )r\   r   Tr   r  r  r   )r&   rL   rM   rP   r  subtractouterr  r  r   r)   rN   r  rQ   rR   rS   r   r   rT   r
  r   r  )r  r  r   r]  r  r  r*  r  r  r  r  r  r  r  r  rI  s                 @@r   test_grid_arr  "  s4   INN3A
A	B	1B
RVBK%%b"--..
.C9c""DCCCCCrCCCA	BN1A%%%%599%%%D>$D
	r!tQi((A
q"%/""Q&AWQ$ * 9u E E EG G GFjjllGWQ$ * 9t D D DF F FFjjllGWQ$ * 5ae L L LN N NFjjllGG&1&1    G&1&1!44A A A A A Ar   c                     t           j                            d           d} t          j        g dg dg dg          }t           j                            |          }t           j                            | df          }t          j        ||j                  }t           j                            d| z  df          }t           j	        d         }t          j        ||          }||
                                z   }t          j        t          j        |           t          j        d                    }t          j        t          j        |           t           j	        d	                                       t                    }	t!          j        |||	t%          j                    |
          }
|
                                }t+          |j        |dd           t+          |
j        j        |dd           d S )N+     r   r|  rn  r|  r   r  rn  r  r   rD   rE   r   r  r   r   r   r   r   r\   r  r  )r&   rL   rM   r   r  r  rN   r  r   rQ   ravelrO   rP   r*   r  r  rR   rS   r   UnstructuredrT   r   r6   r  )ngrpr]  r  r  xmatpareyr  r   trI  r  s               r   test_unstructured_completer  I  s   INN2D
*mmm]]]MMMB
C
CC9c""D
	tQi((A
q$&A9!D&!--D
%

C	c		B
QWWYYA
	$,,A
ruW~..55c::A4aJ,C,E,E	 	 	A	AAHc4---AL+S$<<<<<r   c                  ^   t           j                            d           d} t          j        g dg dg dg          }t           j                            |          }t           j                            | df          }t          j        ||j                  }t           j                            d| z  df          }t           j	        d         }t          j        ||          }g g g g f\  }}}	}
t          |           D ]}g d	}|                    |dz             t          j        |          }|	                    |           |                    |d|z  |z            |||f         z              |d|z  |z   d d f         }|                    |           |
                    |t          j        d
          z             t          j        |          }t          j        |d          }t          j        |	          }t          j        |t                    }t          j        |
          }t!          j        |||d d d f         t%          j                    |          }|                                }t+          |j        |dd           t+          |j        j        |dd           d S )Nr  r  r  r  r  rD   rE   r  r  r   r   r   dtyper  r  r  )r&   rL   rM   r   r  r  rN   r  r   rQ   r   popr  r*   r)   r  rR   rS   r   r  rT   r   r6   r  )r  r]  r  r  r  r  r  ylxltlglr)  r&  r*  r  r  r   rI  r  s                      r   test_unstructured_incompleter  `  sd   INN2D
*mmm]]]MMMB
C
CC9c""D
	tQi((A
q$&A9!D&!--D
%

C	c		BR^NBB4[[ " " YY
q1uZ^^
		"
		"QqS2X,1b5)***1r111
		!
		!bgajj.!!!!
rA
r"""A
rA

1C   A
rA11QQQW:*2I2K2K	 	 	A	AAHc4---AL+S$<<<<<r   c                     t           j                            d           t          j        d          } d| _        dD ]}dD ]{}t          j        |          }dt          j        t           j        	                    ||                    z  }t           j        
                    |          }|dk    r!t           j                            |          }n"t           j                            ||f          }t          j        |          }t           j                            |t           j                            |t           j                            ||                              }|                     t          j        |          t          j        |          ||g          }	t#          ||	d	         d
d
           }d S )N{   Tr   r  r   r   rG   r   rG   rE   r   r   r   r   )r&   rL   rM   r   r   r  rP   r  r  r  r]  rN   r  r  solvecovariance_matrix_solver  r   )
r  dqr   r  sdzsmz1z2s
             r   test_ar_covsolver
    s   INN3!t,,,AAL = = 	= 	=A1B 1 1"b 9 9:::C"""**BAvvI$$!$,,I$$1a&$11B!#bioob!6L6L!M!MO OB**2=+<+<+-=+<+<+-s4 4B B1Dt<<<<<%	== =r   c                  b   t           j                            d           t          j                    } d| _        dD ]q}dD ]j}dt          j        ||f          z  dt          j        |          z  z   }t           j                            |          }|dk    r!t           j        	                    |          }n"t           j        	                    ||f          }t          j
        |          }t           j                            |t           j                            |t           j                            ||                              }|                     t          j        |          t          j        |t                     ||g          }t#          ||d	         d
d
           lsd S )Nr  r  r  r   g333333?rE   r   r  r   r   r   )r&   rL   rM   r   r   r  r*   eyer]  rN   r  r  r  r  r  rP   r  r   )	r  r  r  r  r  r  r  r  r	  s	            r   test_ex_covsolver    sy   INN3!!AAL = = 	= 	=AA'#q		/9C"""**BAvvI$$!$,,I$$1a&$11B!#bioob!6L6L!M!MO OB**2=+<+<+-9Qc+B+B+B+-s4 4B B1Dt<<<<<#	== =r   c                     t           j                            d           t          j        d          } t          j        dt                    | _        dD ]}dD ]}dt          j        |           z  | _        |d	z
  | _	        | 
                    t          j        |          t          j        |t                              \  }}t           j                            |
          }|d	k    r!t           j                            |
          }n"t           j                            ||f
          }t          j        |          }t           j                            |t           j                            |t           j                            ||                              }|                     t          j        |          t          j        |t                    ||g          }	t'          ||	d         dd           d S )Nr  Tr   r   r  r  r   r  r   rE   r   r   r   )r&   rL   rM   r   r
  rP   r  r   r  r  r  r   r]  rN   r  r  r  r  r  r   )
r  r  r  r  r  r  r  r  r  r	  s
             r   test_stationary_covsolver    s   INN34(((AYr%%%AF = = 	= 	=ARYq\\M2ALAAI((!)+1C)@)@)@B BFC"""**BAvvI$$!$,,I$$1a&$11B!#bioob!6L6L!M!MO OB**2=+<+<+-9Qc+B+B+B+-s4 4B B1Dt<<<<<)	== =r   )T)K__doc__statsmodels.compatr   r!   numpyr&   r^  numpy.testingr   r   r   r   r   r	   r
   3statsmodels.genmod.generalized_estimating_equationsgenmod generalized_estimating_equationsrR   statsmodels.toolsr  #statsmodels.regression.linear_model
regressionlinear_modelr  statsmodels.genmodr   r   #statsmodels.discrete.discrete_modelr  discrete_modelpandasr7   scipy.stats.distributionsr   r  matplotlib.pyplotpyplotr   ImportErrorr   matplotlib.backends.backend_pdfr   r   r   r3   r>   r@   rU  r`  rj  rn  rv  r  r  rP  rQ  rR  r  r   r  rS  r  r   r  r   r  r  r  r  r  r  r
  r  r  rc   r   r   <module>r$     s  	 	 & % % % % % 				     $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ B A A A A A A A A ! ! ! ! ! ! 0 0 0 0 0 0 0 0 0 ' ' ' ' ' ' ) ) ) ) ) ) 6 6 6 6 6 6 6 6 6     * * * * * * 	####### 	 	 	D	 
 888888
(>
"
"CC
C  
   8
E 
E 
EJ" J" J" J" J" J" J" J"Z00A 0A 0A 0A 0A 0A 0A 0Af    ,   @L L L L L#3 L L L.    ,   D     0   :* * *, *  *  *F 4 4  4&8? 8? 8?v	 	 	 H$5x7G#HII%0 %0 JI%0V H$5$,$5$,$4$6 7 7? ?7 7?B   ..I I /.IB$A $A $AN= = =.%= %= %=P= = =:= = =8= = = = =s   #A* *A21A2