U
    Kvf$7                    @   sP  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  mZ ddlmZ ddlm  mZ ddlmZ ddlmZ ddlm  mZ ddlZ ddl!m"Z" ddl#Z#zddl$m%Z& W n e'k
r   Y nX dZ(e(rdd	l)m*Z* e*d
Z+ndZ+dd Z,d>ddZ-dd Z.G dd dZ/G dd dZ0G dd de0Z1G dd de0Z2G dd de0Z3G dd de0Z4dd Z5d d! Z6ej7j8ej7j9d"d# Z:d$d% Z;d&d' Z<ej7=d(ej>ej?gd)d* Z@ej7=d(ej>ejAej?gd+d, ZBd-d. ZCej7=d/ddgd0d1 ZDd2d3 ZEd4d5 ZFd6d7 ZGd8d9 ZHd:d; ZId<d= 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                 C   s   t r| | d S N)
pdf_outputZsavefig)pdffig r   E/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/genmod/tests/test_gee.pyclose_or_save,   s    r   Tc                 C   s   t jt jt}tjt j|d| dd}|dddf }|dddf }|ddddf }|rtjt	|j
d df|fd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         Zaxis)ospathdirnameabspath__file__npZ
genfromtxtjoinconcatenateonesshape)fnameiceptcur_dirZgroupendogexogr   r   r   	load_data1   s    r-   c                 C   s   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residZcentered_resid_resultsr!   Zndarray)r   r   r   r   check_wrapperM   s    r5   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zejj	ejj
d	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zejdddgejdddgdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zejd'ejejgd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Z d2d3 Z!d4d5 Z"d6d7 Z#ejj	d8d9 Z$ejj	d:d; Z%ejj	d<d= Z&ejj	ejj
d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+dHdI Z,dJdK Z-dLdM Z.dNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`S )aTestGEEc                 C   s   d}t jd t jj|dfd}d|d d df< t t |d t jd }|d d df t jj|d }t|||}|j	d	d
dgd}|
 }t|j|jdd   t|j|jdd   |  d S )N(   麅     sizer   r      r   r   r   r   ?cͯ?̒?start_params)r!   randomseednormalkronaranger_geeGEEfitget_margeffr   margeffr/   
margeff_sebsesummary)selfnr,   groupsr+   modelresultmargr   r   r   test_margins_gaussian\   s    zTestGEE.test_margins_gaussianc                 C   sX  d}t jd t jj|dfd}d|d d df< t t |d t jd }|d d df t jj|d }d	d
 |D }t|}t|}t	|||}|j
dddgd}	|	 }
t|
j|	jdd   t|
j|	jdd   tdd |D }t|}t|}t	|||}|j
dddgd}	|	 }
t|
j|	jdd   t|
j|	jdd   d S )Nr7   r8   r9   r:   r   r   r<   r=   c                 S   s   g | ]}t |qS r   )list.0rowr   r   r   
<listcomp>   s     z>TestGEE.test_margins_gaussian_lists_tuples.<locals>.<listcomp>r>   r?   r@   rA   c                 s   s   | ]}t |V  qd S r   )tuplerY   r   r   r   	<genexpr>   s     z=TestGEE.test_margins_gaussian_lists_tuples.<locals>.<genexpr>)r!   rC   rD   rE   rF   rG   rH   rX   rI   rJ   rK   rL   r   rM   r/   rN   rO   r]   )rQ   rR   Zexog_arrZ
groups_arrZ	endog_arrZ	exog_listZgroups_listZ
endog_listrT   rU   rV   Z
exog_tupleZgroups_tupleZendog_tupler   r   r   "test_margins_gaussian_lists_tuplest   s4    z*TestGEE.test_margins_gaussian_lists_tuplesc                 C   s   t jd t jd }t d}t jd |d d df< t d}tj|||t	 d}|j
dd	d
gd}| }t|jt jd  t|jt jd dd d S )Nr8   r   r   r   r   r   r   r   r      r   r   r   r   r   r   r   r   r   r   rb   familynaivegΌ]
g{@cov_typerB   gX']?sܩ?ư>rtol)r!   rC   rD   rH   r$   rG   rI   rJ   r
   BinomialrK   rL   r   rM   rN   rQ   r+   r,   rS   rT   rU   rV   r   r   r   test_margins_logistic   s    


 zTestGEE.test_margins_logisticc                 C   s   t jd t jd }t d}t jd |d d df< t d}t|||}|jddd	gd
}|	 }t
|jt jd dd t
|jt jd dd d S )Nr8   r`   ra   rc   r   rb   rf   ]
@grg   gg]ڿh㈵>rk   ri   rj   )r!   rC   rD   rH   r$   rG   rI   
NominalGEErK   rL   r   rM   rN   rn   r   r   r   test_margins_multinomial   s    


 z TestGEE.test_margins_multinomialc                 C   s~   t jd t jd }t d}t jd |d d df< t d}t|||}|jddd	gd
}|	 }t
t|tjd d S )Nr8   r`   ra   rc   r   rb   rf   rp   rq   rg   T)r!   rC   rD   rH   r$   rG   rI   rs   rK   plot_distributionr   r.   pltFigure)rQ   close_figuresr+   r,   rS   rT   rU   r   r   r   r   test_nominal_plot   s    


zTestGEE.test_nominal_plotc                 C   s   t jd t jd }t d}t jd |d d df< t d}tj|||t	 d}|j
dd	d
gd}| }t|jt jd dd t|jt jd dd d S )Nr8   )
                        ra   r`   r   rb   rd   rf   g74@gU&:?rg   g:#J{/&@rj   rk   gIV&
@)r!   rC   rD   rH   r$   rG   rI   rJ   r
   PoissonrK   rL   r   rM   rN   rn   r   r   r   test_margins_poisson   s    


 zTestGEE.test_margins_poissonc                 C   s   t jd t jd }t d}t jd |dddf< t d}t|||}|jdd	d
gd}tj	|||t
 d}|jdd}t|j|j dd t|j|jdd dS )zf
        Check the 2-class multinomial (nominal) GEE fit against
        logistic regression.
        r8   r`   ra   rc   Nr   rb   rf   rp   rq   rg   rd   rh   rr   rk   )r!   rC   rD   rH   r$   rG   rI   rs   rK   rJ   r
   rm   r   r/   rO   )rQ   r+   r,   rS   rT   r   Zlogit_modelZlogit_resultsr   r   r   test_multinomial   s     


 
zTestGEE.test_multinomialc           
   
   C   sz  t d}t d}d|dd< t d}|dd  d7  < t t dt jd }tj||||d}| }t	|j
t jd  t d}d|dd < t jd	 }t jd
 }t jd }t t d|f}tj||||t d}t ddddddddg}dtd|  }	|jd|	d}t	|j
t jd dd t	|jd t	|jt jd dd tj||||t d}|jdd d S )Nr~   r   r   rz   r   r   r   weightsgUUUUUU?)r   r   r9   r   r9   r<   r9   r<      r<   r      r   r      r   r   rb   r   rb   )r   r   r   r   r   r   r   r   r9   r9   r9   r9   r<   r<   r<   r<   r9   r9   r9   r9   )r   r   r   r   r   r   r<   r<   r   r   r   r   r   r   rb   rb   	   r   rz   rz   )r   r   r<   )
ddof_scaleZscaling_factor)g4%?g
?rj   )atolgIEc?)g'i֦?gU?rr   r   )r!   r$   zerosrF   rG   rH   rI   rJ   rK   r   r/   Zcolumn_stackr   IndependencemeanfloatscalerO   Exchangeable)
rQ   r,   r   r+   rS   rT   rU   exog1gZfacr   r   r   test_weighted  s8    






zTestGEE.test_weightedc                 C   s   t jt jt}t j|dd}t|}t	 }t
 }tjjd|d |||d}|jdd}dd	lm} |jd|t	 d
}	|	 }
|j}|
j}
t|j|
jddd t|j|
jddd d S )Nr   zepil.csvzy ~ age + trt + basesubject)r   re   rf   r   r   )GLMrd   rj   rl   r   )r   r   r   r   r    r"   r0   Zread_csvr
   r   r   r   rI   rJ   from_formularK   Z+statsmodels.genmod.generalized_linear_modelr   r4   r   r/   rO   )rQ   r(   r&   datafamindmod1rslt1r   mod2rslt2r   r   r   test_poisson_epil.  s(    
  zTestGEE.test_poisson_epilc           	      C   s$  t jd t jjdd}t jjdd}d|d d df< t tdt d}t j|d< t j|dd	< t j|d
ddf< tj	|||dd}|
 }tt|jd tt |jjt jd  t |t |d@ }tj	|| ||d d f || dd}|
 }t|j|j t|j|j d S )Nr8   d   r:   )r   r9   r   r   r~   r   r   rz   r|   drop)missing_   )r   r9   none)r!   rC   rD   rE   rF   r   r$   nanrI   rJ   rK   r   lenr+   asarrayr,   r%   rH   isfiniteallr/   rO   )	rQ   r+   r,   rS   r   r   iir   r   r   r   r   test_missingH  s"    
&zTestGEE.test_missingc                 C   s  t jd t jjdd}t jjdd}t jjdd}t jjdd}t tdt d}t j|d< t j|dd< t j|dd	< t	|||||d
}dD  ]}|
 }i }	|dkrd|d< d|d< d|	d< d|	d< tjjdd|dd|	}
|
 }tt|
jd tt |
jjt jd  | }i }	|dkrN|d |	d< |d |	d< tjjd|d |dd|	}| }t|jj|jj t|jj|jj qd S )Nr8   r   r:   r~   r   r   r   rz   r|   )r+   r   exog2exog3rS   )r   r   r   offsettimeendog ~ exog1 + exog2 + exog3rS   r   )rS   r   r   r   )r   r<   r   )r   )r   )r!   rC   rD   rE   rF   r   r$   r   r0   	DataFramecopyrI   rJ   r   rK   r   r   r+   r   r,   r%   rH   dropnar/   valuesrO   )rQ   r+   r   r   r   rS   Zdata0kr   kwargsr   r   r   r   r   r   r   test_missing_formulad  s\    

 
 
 zTestGEE.test_missing_formulak1FTk2c              
   C   s   t dD ]}dddg}d||< t|d }t|d df}i }t|d |d< |rftd|d< |rxtd|d	< tt tj||f| W 5 Q R X qd S )
Nr9   r~   r   r   r   r   rS   exposurer   )ranger!   r   r   
ValueErrorrI   rJ   )rQ   r   r   jpr+   r,   r   r   r   r   test_invalid_args  s    

zTestGEE.test_invalid_argsc                 C   s   t d\}}}tt|}t|}|D ]"}t||k}tt|||< q(t }t	j
dd}	tj|||||	d}
|
 }tj||||||	d}| }t|j|jdd t| | dd d S )Ngee_logistic_1.csvFgridre   r   r   re   r   r   decimal)r-   r!   r   r   setflatnonzeror   r
   rm   r   AutoregressiverI   rJ   rK   r   r/   standard_errors)rQ   r+   r,   r*   Tidxr   jjre   vaZmd1mdf1Zmd2mdf2r   r   r   test_default_time  s&     zTestGEE.test_default_timec              	   C   s  t d\}}}tt|}t|}|D ]"}t||k}tt|||< q(t }t	
 }	t	 }
t	jdd}ddddgdd	d
dgddddgg}ddddgddddgddddgg}t|
|	|fD ]^\}}t||||||}| }t|t|krt|j|| dd t| || dd qtj|d d d f |d d d f |d d dd f fdd}t|}d d!gd"d# t|jd d D  |_t|
|	fD ]R\}}tjjd$d!|||d%}| }t|j|| dd t| || dd qd 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                 S   s   g | ]}d |d  qS zX%dr   r   rZ   r   r   r   r   r\     s   z)TestGEE.test_logistic.<locals>.<listcomp>Y ~ X1 + X2 + X3r   )r-   r!   r   r   r   r   r   r
   rm   r   r   r   r   	enumeraterI   rJ   rK   idr   r/   r   r#   r0   r   r   r%   columnsr   )rQ   r+   r,   r*   r   r   r   r   re   vevir   cfser   vmdmdfDr   r   r   test_logistic  sz    #      4

 zTestGEE.test_logisticc                 C   s  dddg}dddgddd	gd
ddgg}t jd d}d}d}t }dD ]8}t |d d d f t |d d d f  }t |}|| }	t j|	}
g }g }g }t	|D ]b}t jj
||fd}|| |d}t |
t jj
|d}|||  ||t |  qt |}t |}t j|dd}tjdd}tj|||||d}| }t|j||d   t|j||d   qJd S )Nr   gD?g$ĸ?g(P8yI?gPiޒ?g6s?g1?gc?gB?g9k"?g0E?gK13?iHor         ?r9   )r   r   r9   r:   r   r   Fr   r   )r!   rC   rD   r
   GaussianrG   abslinalgcholeskyr   rE   appendsumdotr$   r#   r   r   rI   rJ   rK   r   
dep_paramsr/   )rQ   Zdep_params_trueZparams_trueZ	num_groupZar_paramr   gaZgsizeixZcmatZcmat_rr+   r,   rS   ixZexpvalerrorsarr   r   r   r   r   test_autoregressive  sB    

,




zTestGEE.test_autoregressivec                 C   sn   t  }td\}}}t }t|||d ||}| }tt	
||j|j t|t	
||j |j d S )Ngee_linear_1.csv)r
   r   r-   r   r   rI   rJ   rK   r   r!   r   r/   r2   r3   )rQ   re   r+   r,   r*   r   r   r   r   r   r   test_post_estimationI  s    zTestGEE.test_post_estimationc              
   C   s  t jd d}t jj|dfd}|d d df |d d df  |d d df  }|dt jj|d 7 }t t |d t d}t d	d
ddgg}t dg}t	 }t
 }tj|||||||fd}	|	 }
t|
 d d t|
 d d t d	d
ddgg}t d	g}t	 }t
 }tj|||||||fd}| }t| d d t| d d t jj|dfd}t dd
gg}t dg}t jd }tdD ]}|d d df d|d  |d d df   t jj|d }t	 }t
 }tj|||||d}| }t	 }t
 }tj|||||||fd}	|	 }
t t |t | |}t ||j| }dtt |  }|
 d }tt || d qd S )N      r<   r:   r   r   r   r9         ?        re   r   
constraint	statisticgL?p-valueg8o;?gV@gBvw?)r   r   rz   r   g      $@r   g{Gz?)r!   rC   rD   rE   rF   rG   r$   arrayr
   r   r   r   rI   rJ   rK   r   Z
score_testrH   r   sqrtr   
cov_paramsr/   r   Zcdfr   r   )rQ   rR   r,   r+   r*   LRre   r   r   Zres1r   res2fr   Zmod0Zrslt0r   Zwald_zZwald_pZscore_pr   r   r   test_scoretestX  s|    0  
* zTestGEE.test_scoretestr   c                 C   sH  t jd d}t jj|dfd}t t |d t d}|d d ddgf }|ddt jj|d  }t ddddgddddgg}t 	d}t
j|||||f| d	}	|	  t
j|||| d
}
|
 }dD ]j}t
j|||| d
}|r|  ||}t|d |	jd  t|d |	jd  t|d |	jd  qd S )Nr   r   r<   r:   r   r9   r   r   )r   r   r   FTr  r  df)r!   rC   rD   rE   rF   rG   r$   r   r   r   rI   rJ   rK   compare_score_testr   Zscore_test_results)rQ   r   rR   r,   r*   exog_subr+   r  r  Zmod_lrmod_subres_subZcall_fitmodZscore_resultsr   r   r   test_compare_score_test  s>    

zTestGEE.test_compare_score_testc           
   	   C   s  t jd d}t jj|dfd}t t |d t d}|d d ddgf }|ddt jj|d  }tt	D t
j|||t d}| }t
j|||t d}|| W 5 Q R X tt	D t
j|||t d	}| }t
j|||t d	}|| W 5 Q R X ttT t
|||}| }t
|dd
 |d d
d d f |dd
 }|| W 5 Q R X tt	F t jj|d}	t
j||||	d}| }t
|||}|| W 5 Q R X tt	B t jj|d}	t
|||}| }t
|||}|| W 5 Q R X d S )Nr   r   r<   r:   r   r9   r   r   rd   r   r   )r!   rC   rD   rE   rF   rG   r$   r   r   UserWarningrI   rJ   r   r   rK   r   r  r
   r   r   r   	Exceptionuniformpytestwarns)
rQ   rR   r,   r*   r  r+   r  r  r  wr   r   r    test_compare_score_test_warnings  sN    





.
z(TestGEE.test_compare_score_test_warningsc              	   C   s8  t jd d}t jj|dfd}|d d df |d d df  |d d df  }|dt jj|d 7 }t t |d t d}t d	d
ddgg}t dg}t	 }t
 }dD ]z}	tj|||||||fd}
|
j|	d}|j|	d t|jjt jd  t|jjt jd  |	dkrt|jjt jd  qd S )Nr   r   r<   r:   r   r   r   r9   r   r   r   )robustrf   bias_reducedr   r   )r<   r<   r  )r!   rC   rD   rE   rF   rG   r$   r  r
   r   r   r   rI   rJ   rK   r   r   
cov_robustr%   rH   	cov_naivecov_robust_bc)rQ   rR   r,   r+   r*   r  r  re   r   rh   rT   rU   r   r   r   test_constraint_covtype  s*    0 zTestGEE.test_constraint_covtypec              	   C   s  t  }td\}}}t }t }ddddgdddd	gg}d
dddgddddgg}t||fD ]N\}	}
t|||d ||
}|	 }t
|j||	 dd t
| ||	 dd qbtj|d d d f |d d d f |d d dd f fdd}t|}ddgdd t|jd d D  |_t||fD ]R\}	}
tjjdd|||
d}|	 }t
|j||	 dd t
| ||	 dd q*d S )Nr   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?rz   r   r   r   r   r   c                 S   s   g | ]}d |d  qS r   r   r   r   r   r   r\   8  s   z'TestGEE.test_linear.<locals>.<listcomp>r   r   )r
   r   r-   r   r   r   r   rI   rJ   rK   r   r/   r   r!   r#   r0   r   r   r%   r   r   )rQ   re   r+   r,   r*   r   r   r   r   r   r   r   r   r   r   r   r   test_linear   s\        4

 zTestGEE.test_linearc              
   C   s   t  }tjd tjjdd}d|d d df< t|tjd tjjdd }tt	dtjd	 }t
 }t
 }tjddddgg }tjd
 }t||fD ]@\}	}
tj|||d ||
||fd}| }t|jd ddd qd S )Nr8   ),  r<   r:   r   r   )r   r   r   皙?r!  r   r   r   r   r   )r   r9   rz   r   )r
   r   r!   rC   rD   rE   r   rH   rF   rG   r   r   r   r   rI   rJ   rK   r   r/   )rQ   re   r,   r+   r*   r   r   r  r  r   r   r   r   r   r   r   test_linear_constrainedB  s$    
zTestGEE.test_linear_constrainedc              	   C   sL  t  }td\}}}g }t|jd d D ]$}|dgd  |dgd  q,t|d d d f }t	 }t
|||d ||}| }	tjd }
tjd }t|	j|
dd	 t|	 |dd	 t }t
j|||d |||d
}|j|	jd}tjd }
tjd }t|j|
dd	 t| |dd	 |j }t|jtjd ddd d S )Nzgee_nested_linear_1.csvr   rz   r   r   )gM 6cſgSQ%?g]xҀI# gIT4"?)g_Ay?g(Ǥ?g#Ҥ?gK2W?r   r   )dep_datarA   )glQſg%נqY?g`!) g;8-?)g]@x?gv'+՝?g:@I?g){l?)g8j?gތ?g>>tA?rr   r   rl   )r
   r   r-   r   r%   extendr!   r  r   r   rI   rJ   rK   rH   r   r/   r   NestedrP   r   Variance)rQ   re   r+   r,   r*   group_nr   Zdpr   r   r   r   ner   smryr   r   r   test_nested_linearY  sD    






 zTestGEE.test_nested_linearc                 C   s>  t jd d}t t |d t dt}t t |d t dt}t t |d t dt}t jj|d d}dt jj|d d }dt jj|d d }|| ||  ||  }|d	t jj|d 7 }t	
||||d
}	tjjdddt |	d}
|
 }|j }t|jt jd ddd d S )Ni  i'  r   2   rz   r:   r   r9   r   )y	TheGroupsgroups1groups2zy ~ 1r1  z0 + groups1 + groups2)rS   r&  r   r   )g-y<-?gPn@gvӂ!@g⪲?rr   r'  )r!   rC   rD   rF   rG   r$   astypeintrE   r0   r   rI   rJ   r   r   r)  rK   rP   r   r*  rH   )rQ   rR   rS   r2  r3  Zgroups_eZ	groups1_eZ	groups2_er0  r  rT   rU   r-  r   r   r   test_nested_pandas  s6    """ 

 zTestGEE.test_nested_pandasc           
      C   s   t  }tddd\}}}td}t|||d ||}| }tj	d }t
|j|dd tj	d }	t
|j|	dd tt|tj tt|jtj d S )	Ngee_ordinal_1.csvFr'   ordinal)3xMz?fE#D?3ٿI(CvZ]]>'?vj?1Ҥw?瘔P4r   r   )gTwܻ?g*vq?g>2?g%q[?g?gy?ox?g[${?gj۵?)r
   rm   r-   r   GlobalOddsRatiorI   
OrdinalGEErK   r!   rH   r   r/   rO   r   typeZOrdinalGEEResultsWrapperr4   ZOrdinalGEEResults)
rQ   re   r+   r,   rS   r   r  rsltr   r   r   r   r   test_ordinal  s    


zTestGEE.test_ordinalc              	   C   s   t jd d}t jdd|}t |}t jj|d}t jj|d}t||||d}tj	j
d||d}|  t * td	 tjj
d||d}|  W 5 Q R X d S )
N  r7   r   r9   r:   )r0  rS   x1x2zy ~ 0 + x1 + x2r   ignore)r!   rC   rD   randintrG   rE   r0   r   rI   rC  r   rK   warningscatch_warningssimplefilterrs   )rQ   rR   r0  rS   rH  rI  r  rT   r   r   r   test_ordinal_formula  s    



zTestGEE.test_ordinal_formulac                 C   st   t jd d}t jdd|}t t |d t jd }t jj|dfd}t	 }t
j||||d	}|  d S )
NrG  r7   r   r9   r   r   r   r:   r   )r!   rC   rD   rL  rF   rG   rH   rE   r   ZOrdinalIndependencerI   rC  rK   )rQ   rR   r0  rS   r   Zodimodel1r   r   r   test_ordinal_independence  s    z!TestGEE.test_ordinal_independencec              	   C   s   t jd d}t jdd|}t t |d t jd }t jj|dfd}t	 2 t
d	 t }tj||||d
}|  W 5 Q R X d S )NrG  r7   r   r9   r   r   r   r:   rK  r   )r!   rC   rD   rL  rF   rG   rH   rE   rM  rN  rO  r   ZNominalIndependencerI   rs   rK   )rQ   rR   r0  rS   r   ZnmirQ  r   r   r   test_nominal_independence  s    

z!TestGEE.test_nominal_independencec           
      C   s^   t  }tddd\}}}td}t|||d ||}| }| }	t	t
|	tjd d S )Nr7  Fr8  r9  T)r
   rm   r-   r   rB  rI   rC  rK   ru   r   r.   rv   rw   )
rQ   rx   re   r+   r,   rS   r   r  rE  r   r   r   r   test_ordinal_plot  s    
zTestGEE.test_ordinal_plotc                 C   s   t ddd\}}}t }tj||||d}| }tjd }tjd }t|j	|ddd t|
 |ddd td	}tj||||d}	|	j|j	d
}
tjd }tjd }t|
j	|ddd t|

 |ddd tt|tj tt|jtj d S )Ngee_nominal_1.csvFr8  r   )gfy?g؀q?g鷯gg
ݿ)gU%Ӷ?gŲ?grG ,:?gV!̊43?rr   r   ZnominalrA   )g=$?g歺Ք?go[tTgْU)g*V?g^?g=zGb?g_`F?)r-   r   r   rI   rs   rK   r!   rH   r   r/   r   rB  r   rD  ZNominalGEEResultsWrapperr4   ZNominalGEEResults)rQ   r+   r,   rS   r   r   r   Zcf1Zse1r   r   Zcf2Zse2r   r   r   test_nominal  s&    




zTestGEE.test_nominalc              	   C   s  t  }td\}}}t }t }ddddddgdd	d
dddgg}ddddddgddddddgg}t||fD ]N\}	}
t|||d ||
}|	 }t
|j||	 dd t
| ||	 dd qrtj|d d d f |d d d f |d d dd f fdd}t|}dd gd!d" t|jd d D  |_t||fD ]R\}	}
tjjd#d |||
d$}|	 }t
|j||	 dd t
| ||	 dd q:d S )%Ngee_poisson_1.csvg쨢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                 S   s   g | ]}d |d  qS r   r   r   r   r   r   r\   ]  s   z(TestGEE.test_poisson.<locals>.<listcomp>Y ~ X1 + X2 + X3 + X4 + X5r   )r
   r   r-   r   r   r   r   rI   rJ   rK   r   r/   r   r!   r#   r0   r   r   r%   r   r   )rQ   re   r+   r,   r+  r   r   r   r   r   r   r   r   r   r   r   r   test_poisson   sr             


  zTestGEE.test_poissonc                    s^  t jd d}t jj|dfd}t jj|d}t t |d t d}d|dd< d	|d
d< tj|||d}|	 }t j
|}|| }||d d f }	|| }
tj||	|
d}|	 }t|j|j t|j|j i  dd l}tt|D ]\}}|j||d   |< q fdd|D }tj|||d}|	 }t|j|j t|j|j d S )N   r7   r   r:   r<   r9   rb   r|   r   "   $   )rS   r   c                    s   g | ]} | qS r   r   )rZ   r   mpr   r   r\     s     z'TestGEE.test_groups.<locals>.<listcomp>)r!   rC   rD   rE   rF   rG   r$   rI   rJ   rK   permutationr   r/   tvaluesstringr   r   ascii_letters)rQ   rR   r   r0  rS   rQ  result1r   y1rH  r2  model2result2ra  r   r   r3  model3result3r   r]  r   test_groupsh  s4    zTestGEE.test_groupsc                 C   s  t  }t }tjd tjjdd}tjjdd}tjjdd}tjjdd}tt	dt
d}t||||d}tjjd||||d}	|	 }
tjjd|d	 }|j}t|j|
jd
d |
jdd}t|j|d
d |
jtt|
j }t||jd
d d S )Nr8   r   r:   r~   r   r   X1X2X3r   r   rJ  rz   r   rf   r   )r   r   r
   r   r!   rC   rD   rE   rF   r   r$   r0   r   rI   rJ   r   rK   lmZOLSr4   r   r/   r   rO   r  diagr  r`  )rQ   vsre   r   rk  rl  rm  rS   r   r   r   Zolsr   Znaive_tvaluesr   r   r   test_compare_OLS  s*     zTestGEE.test_compare_OLSc                 C   s  d}t jd t jj|d}t jj|d}t jt |df|d d d f fdd}t jj|d}t tdt d}t	
||||d}tjd	d
}t }	tj|||||	|d}
|
 }tjjd||||	|d}| }tjjd||d|	|d}| }tjjdd|||	|d}| }tjjdd|d|	|d}| }t|j|jdd t|j|jdd t|j|jdd t|j|jdd t| d S )Nr   r8   r:   r   r   r~   r   )r   rk  TimerS   Fr   r   zY ~ X1rr  rS   rb   r   )r!   rC   rD   rE   r#   r$   r  rF   r   r0   r   r   r   r
   r   rI   rJ   rK   r   r   r/   r5   )rQ   rR   r   rk  matrr  rS   r   r   re   r   r   r   r   Zmod3Zrslt3Zmod4Zrslt4Zmod5Zrslt5r   r   r   test_formulas  sN    (    zTestGEE.test_formulasc                 C   s   t  }t }tjd dtjjdddk  }tjjdd}tjjdd}tjjdd}tjjdddd}t	
||||d}tjjd||||d	}	|	 }
tjjd|d
}|jdd}t|
jj|jjdd d S )Nr8   r   r   r:   r   r<   rj  r   r   rJ  FZdisprz   r   )r   r   r
   rm   r!   rC   rD   rE   rL  r0   r   rI   rJ   r   rK   discreteZLogitr   r/   r   rQ   rp  re   r   rk  rl  rm  rS   r   r   r   r   r   r   r   r   test_compare_logit  s&     zTestGEE.test_compare_logitc                 C   s   t  }t }tjd tttjj	dd }tjj
dd}tjj
dd}tjj
dd}tjjdddd}t||||d}tjjd||||d}	|	 }
tjjd|d	}|jd
d}t|
jj|jjdd d S )Nr8   r   r:   r   r<   rj  r   r   rJ  Fru  rz   r   )r   r   r
   r   r!   rC   rD   ceillogr  rE   rL  r0   r   rI   rJ   r   rK   rv  r   r/   r   rw  r   r   r   test_compare_poisson  s&     zTestGEE.test_compare_poissonc                 C   s  d}t jd t jj|d}t jj|d}t t |d t jd }t jjdd|d}t jjd||  | |d}t	|||||d}d	}t
jj|||t d
d}	|	jdddgd}
t|
jd |
 }|
j|jd}|
j|ddg |jd}|
j|ddg d|j d}|
jd|j d}t|| t|| t|||j  t|||j  t jjdd}t jjdd}t	||d}|
j|d}t |
j}|d |d |  |d |  }t|| d S )Nr/  i  r:   r   r   r   皙?)r   rk  rl  rS   r   Y ~ X1 + X2r   re   r   r   rA   Tr   rk  rl  )r,   r   rz   )rk  rl  )r,   )r!   rC   rD   rE   rF   rG   rH   r  r0   r   rI   rJ   r   r
   r   rK   r   	convergedpredictr   r   r   r/   )rQ   rR   rk  rl  rS   r   r   r   fmlrT   rU   pred1pred2pred3pred4pred5Zx1_newZx2_newZnew_exogpred6r/   Zpred6_correctr   r   r   test_predict  sB    

 zTestGEE.test_predictc                 C   s   t jd }t jd }t jd }t|}tjddd}tj||||d}| }|j	t 
d }t|t jd	 d
d
  d t|jt jd ddd t|t jd ddd d S )Nr<   r   r9   r   r<   r   r   r   rb   r9   r   g      @r   r9   r   r<   r9   r   r   r<   r   r   r9   r   r   r   r   r   r   r   r   r   r   r9   r9   r9   r   Tmax_lagr   r   UUUUUU?r#  r   gmy@gim@g=פ6̣rr   r   g3?g	R?)r!   rH   toolsadd_constantr   
StationaryrI   rJ   rK   rO   r  r   covariance_matrixr   r/   )rQ   r+   r,   r*   csrT   rU   r   r   r   r   test_stationary_grid6  s$    




 zTestGEE.test_stationary_gridc              	   C   s   t jd }t jd }t jd }t jd }t|}tj|||tjdddd}| }|j	t 
d	 }t|jt jd
 ddd t|t jd ddd t jd d d d f }tj||||tjdddd}|  d S )Nr  r  )r   r   r   r   r   r   r   r   r   r   r   r   r  r   Fr  r   r  r  rr   r   r  )r   r   r9   r   r   r9   r   r   r9   r   r   r   r<   )r   r   )r!   rH   r  r  rI   rJ   r   r  rK   rO   r  r   r/   )rQ   r+   r,   r   r*   rT   rU   r   r   r   r   test_stationary_nogridK  s4    






 zTestGEE.test_stationary_nogridc              	   C   s  d}t jd t jj|d}t jj|d}t t dt jd }t jjdd|d}t jjdd|d}t jjd||  | t 	| |d}t
||||||d	}d
}	tjj|	||t ddd}
|
 }t|jd | }|j|d d}|j|d d}|j|d |d d}|j|dd  |d dd  |d dd  d}|j|jjdd  |d dd  |d dd  dd}t|| t|| t|| t|dd  | t|dd  | d S )Nr/  r8   r:      r   r   r   r|  r   rk  rl  rS   r   r   r}  r   r   )re   r   r   Tr  )r   )r   r   ir,   r   r   F)r,   r   r   Z	transform)r!   rC   rD   rE   rF   rG   rH   r  poissonrz  r0   r   rI   rJ   r   r
   r   rK   r   r  r  rT   r,   r   )rQ   rR   rk  rl  rS   r   r   r   r   r  rT   rU   r  r  r  r  r  r  r   r   r   test_predict_exposurei  sZ       


zTestGEE.test_predict_exposurec                 C   s   d}t jd dd t|D }tt t dt jd }tt jjdd|d	}tt jjdd|d	}d
d t	|||D }t
j|||t ||d}| }| }	|j|||d}
t|	|
 d S )Nr/  r8   c                 S   s"   g | ]}d t j t j gqS )r   )r!   rC   rE   )rZ   _r   r   r   r\     s     z7TestGEE.test_predict_exposure_lists.<locals>.<listcomp>r  r   r   r   r:   c                 S   s<   g | ]4\}}}t jd |d |d   | t | qS )r|  r   r   )r!   rC   r  rz  )rZ   Zexog_iZoffset_iZ
exposure_ir   r   r   r\     s    )rS   re   r   r   r  )r!   rC   rD   r   rX   rF   rG   rH   r  ziprI   rJ   r
   r   rK   r  r   )rQ   rR   r,   rS   r   r   r+   rT   rU   r  r  r   r   r   test_predict_exposure_lists  s*    
z#TestGEE.test_predict_exposure_listsc              	   C   s
  d}t jd t jj|d}t jj|d}t t dt jd }t jjdd|d}t |}t jj	d||  d|  |d}t
||||||d	}d
}	tjj|	||t dd}
|
 }t|jd tjj|	||t |d}|j|jd}t|j|j t|jd tjj|	||t |d}|j|jd}t|j|j t|jd tjj|	||t dd}|j|jd}t|j|j t|jd tjj|	||t ddd}| }t|jd tjj|	||t d| d}|j|jd}t|j|j t|jd d S )Nr/  r8   r:   r  r   r   r   r|  r  r}  r   r~  TrA   )re   r   r   )re   r   r   )r!   rC   rD   rE   rF   rG   rH   r  expr  r0   r   rI   rJ   r   r
   r   rK   r   r  r/   r   )rQ   rR   rk  rl  rS   r   r   r   r   r  rQ  rc  re  rf  rg  rh  Zmodel4Zresult4Zmodel5Zresult5Zmodel6Zresult6r   r   r   test_offset_formula  sl    
   zTestGEE.test_offset_formulac                 C   s   t  }t }tjd d}tjj|d}tjj|d}tjj|d}tt	dtj
d }t|||d}tjjd||||d}	|	 }
|
d	d
d}tt|d tdd |D dd
g tdd |D ddg d S )Nr8   r   r:   r/  r   )r   rk  rl  r}  r   r   r   r   c                 S   s   g | ]}|j jqS r   )r   r   rZ   r   r   r   r   r\     s     z,TestGEE.test_sensitivity.<locals>.<listcomp>r   c                 S   s   g | ]}t |jd  qS r$  )r!   r   r/   r  r   r   r   r\     s     g&(?g&J?)r   r   r
   r   r!   rC   rD   rE   rF   rG   rH   r0   r   rI   rJ   r   rK   Zparams_sensitivityr   r   )rQ   r   re   rR   r   rk  rl  rS   r   r  rE  Zpsr   r   r   test_sensitivity  s,     zTestGEE.test_sensitivityc                 C   s  t jd t jjdd}t jjdd}d|dddf< t t dt d	}d
|dd< i }dd	ddg}td	D ]}i ||< |d
k r|| t jd  || t jd  f|| d< n,|| t jd  || t jd  f|| d< |d
k rt 	d	d\}}|| | || | f|| d< qtt 	dd\}}|| | || | f|| d< qtt
 }	tj||||	d}
|
 }dD ]}t
j||d}tj||||d}| }|dkrd\}}nd\}}t|j|j||d t|j|j||d t|j|j||d qvd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~   r:   )r~   r   r   Nr   r   r<   r9   r|   rb   )r   r   r   r9   )r   r   r   r9   r<   r   r   r   r   r   r  )
return_covT)rj   rj   )MbP?r  r'  )r!   rC   rD   rE   rF   rG   r$   r   rH   Ztril_indicesr   r   rI   rJ   rK   Equivalencer   r/   rO   r   )rQ   r+   r,   rS   pairsstartr   abexrQ  rc  r  Zecre  rf  r   rl   r   r   r   test_equivalence   sL    
""


 zTestGEE.test_equivalencec              	   C   s  t jd t jjdd}t jjdd}d|d d df< t t dt d}d	|d
d < t t dt dt j}|t j	t
| }tj|dd}tj||||d}|  |jD ]F}|j| }dd | D }	t||k}
tt|	|
|
d  d  qt }|jD ]Z}|j|  D ]D}t|d |d D ]*\}}||f}||ksXt|| q:q$qtj|dd}tj||||d}t  td |jdd W 5 Q R X d S )Nr  r/  r:   )r/  r   r   r   r   rz   r9      T)labelsr  r   c                 S   s   g | ]}t |d  qS r$  )r   r  r   r   r   r\   R  s     z7TestGEE.test_equivalence_from_pairs.<locals>.<listcomp>r   rK  maxiter)r!   rC   rD   rE   rF   rG   r$   r4  Zint32r_  r   r   r  rI   rJ   Z_pairs_from_labelsZgroup_labelsr  r   r   r   r   r  AssertionErroraddrM  rN  rO  rK   )rQ   r+   r,   rS   r  eqrQ  r   r   ZvlmZixsr   r  r  kyr   r   r   test_equivalence_from_pairs;  s8     




z#TestGEE.test_equivalence_from_pairsN)8__name__
__module____qualname__rW   r_   ro   rt   r  marksmoke
matplotlibry   r   r   r   r   r   r   parametrizer   r   r   r   r   r
  r   r   r   r  r  r  r   r%  r.  r6  rF  rP  rR  rS  rT  rV  rY  ri  rq  rt  rx  r{  r  r  r  r  r  r  r  r  r  r   r   r   r   r6   Z   sr   (-1Y,<
#1B)$


H*",&(7;r6   c                   @   s   e Zd ZdZdd ZdS )CheckConsistencyNc           
      C   sH  | j }|j| jd}|j| jdd}|j| jdd}|  |  t|jd t|jd t|jd d}|d|jf|d|jf|d|jffD ]t\}}}t	
t	|}	t|j|	|d |dkr|j|d}	t|j|	|d t| ||d	d
 t|j||d	d
 qt|j|jk t|j|jk t|j|jk tt|jdd d S )NrA   rf   )rB   rh   r  r  g:0yE>rk   r   g|=r   Z	robust_bc)r  rK   rB   rP   r   rh   r  r  r  r!   r  ro  r   rO   r   r  Zcov_params_defaultr	   r   r   )
rQ   r  Z
res_robustZ	res_naiveZres_robust_bcrl   resrh   covrO   r   r   r   test_cov_typek  s>    


zCheckConsistency.test_cov_type)r  r  r  rB   r  r   r   r   r   r  g  s   r  c                   @   s    e Zd Zedd Zdd ZdS )TestGEEPoissonCovTypec                 C   sP   t d\}}}t }t }t|||d ||| _t	ddddddg| _
d S )NrW  څ͝쨢qIϫ}v]K
?&&p?tm^sQ޿)r-   r
   r   r   r   rI   rJ   r  r!   r  rB   )clsr+   r,   r+  re   r   r   r   r   setup_class  s    
  z!TestGEEPoissonCovType.setup_classc                 C   sh   t ddd\}}}t|}t|}t|}t }t }t	|||d ||}|
 }t| d S )NrW  Fr8  )r-   r0   r1   r   r
   r   r   r   rI   rJ   rK   r5   )rQ   r+   r,   r+  re   r   r  r   r   r   r   test_wrapper  s    


z"TestGEEPoissonCovType.test_wrapperNr  r  r  classmethodr  r  r   r   r   r   r    s   
r  c                   @   s   e Zd Zedd ZdS )TestGEEPoissonFormulaCovTypec                 C   s   t d\}}}t }t }tj|d d d f |d d d f |d d dd f fdd}t|}ddgdd t	|j
d d D  |_tjjdd|||d	| _td
dddddg| _d S )NrW  r   r   r   r   c                 S   s   g | ]}d |d  qS r   r   r   r   r   r   r\     s   z<TestGEEPoissonFormulaCovType.setup_class.<locals>.<listcomp>rX  r   r  r  r  r  r  r  )r-   r
   r   r   r   r!   r#   r0   r   r   r%   r   rI   rJ   r   r  r  rB   )r  r+   r,   r+  re   r   r   r   r   r   r    s,     


  
  z(TestGEEPoissonFormulaCovType.setup_classN)r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s    e Zd Zedd Zdd ZdS )TestGEEOrdinalCovTypec              
   C   sZ   t  }tddd\}}}td}t|||d ||| _t	ddddd	d
ddg| _
d S )Nr7  Fr8  r9  r:  r;  r<  r=  r>  r?  r@  rA  )r
   rm   r-   r   rB  rI   rC  r  r!   r  rB   )r  re   r+   r,   rS   r   r   r   r   r    s    

   z!TestGEEOrdinalCovType.setup_classc                 C   sr   t ddd\}}}tj|dd}t|}tj|dd}t }td}t	|||d ||}|
 }t| d S )Nr7  Fr8  yendogname	the_groupr9  )r-   r0   r1   r   r
   rm   r   rB  rI   rC  rK   r5   )rQ   r+   r,   rS   re   r   r  r   r   r   r   r    s    

z"TestGEEOrdinalCovType.test_wrapperNr  r   r   r   r   r    s   
r  c                   @   s    e Zd Zedd Zdd ZdS )TestGEEMultinomialCovTypec                 C   sF   t ddd\}}}t }tj||||d| _tddddg| _d S )	NrU  Fr8  r   gꇿ?gܱ"/*?g7qg@Bݿ)	r-   r   r   rI   rs   r  r!   r  rB   )r  r+   r,   rS   r   r   r   r   r    s    
z%TestGEEMultinomialCovType.setup_classc                 C   sf   t ddd\}}}tj|dd}t|}tj|dd}t }tj||||d}| }t	| d S )NrU  Fr8  r  r  r  r   )
r-   r0   r1   r   r   r   rI   rs   rK   r5   )rQ   r+   r,   rS   r   r  r   r   r   r   r    s    
z&TestGEEMultinomialCovType.test_wrapperNr  r   r   r   r   r    s   
r  c                  C   s  t jd d\} }}t jj| | |fd}d}||d d df  t d|d  |d d df   |d d df< d|d d df |d d df   }t |}t j|}t t | t 	|}t
j|||t d	}	|	d
}
t|
jdt jd  ddd d S )N"  )  r   r   r:   r   r   r   ffffff?r9   )rS   re   gHz>)r   r   r   r   r   {Gz?gQ?r   )r!   rC   rD   rE   r  r  r  rF   rG   r$   rI   rJ   r
   r   fit_regularizedr   r/   rH   )nggsr   r   rlprr   r0  rS   rT   rU   r   r   r   test_regularized_poisson  s    
B$

 r  c                  C   s  t jd d\} }}t t | t |}t | | |f}dt jj| | ddk  |d d df< t jj| | d|d d df< d}t	d|D ]P}t jj| | d}||d d |d f  t 
d|d  |  |d d |f< qt |d d ddf t jd	 }d
}	t 
|	t t jj| dt | }
|
t 
d|	 t jj| | d 7 }
||
 }tj||t |d}|jddd}t d}t jd	 |dd< t|j|ddd t|jjt j|	 ddd d S )Nr  )r   r<   r   r   r:   r   r   r   r<   )r   r9   g      ?r   皙?)r   rS   r  r   r  r   r"  r   皙?)r!   rC   rD   rF   rG   r$   r   r  rE   r   r  r   rH   rI   rJ   r   r   r  r   r/   r   )r  r  r   rS   r   r  r   Zepsr  ser0  rT   rU   r  r   r   r   test_regularized_gaussian&  s0    
&<"&$
 r  c                 C   s   t jd t jjdd}t jjdd}t t dt jd }t|||}|	 }|
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   r:   )r   r   r/  r   r   T)r!   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Zplot_added_variabler   r.   rv   rw   Zplot_partial_residualsZplot_ceres_residualsZplot_isotropic_dependence)rx   r,   r+   rS   rT   rU   r   r   r   r   
test_plotsI  s    


r  c               %   C   sj  dddddgddddd	gd
ddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgdddddgd ddd!d"gd#ddd!d$gd%dddd&gd'dddd(gd)d*d	d!d	gd+d*d	ddgd,d*d	ddgd-d*d	ddgd.d*d	ddgd/d*d	ddgd0d*d	ddgd1d*d	ddgd2d*d	d3dgd4d*d	ddgd5d*d	ddgd6d*d	ddgd7d*d	dd"gd8d*d	dd$gd9d*d	dd&gd:d*d	dd(gg!} t j| dd  | d	 d;}tj|j|jdkdf< tjjd<|dt	
 t d=}|  }d|d>< tj|j|d>dg |jt	
 t d?}t|j|j t|j|j t|j|j | }| }t|jj|jj d S )@Nr   alstatusfakegrpsZ4AAr   r   Z5A       @Z6Ar9   r   Z7AZ8Ar<   Z9Ar   Z11Ar   Z12Ar   Z13Arb   Z14Ar   Z15Arz   Z16A   Z17Ag      @r|   Z18Ar}   Z19A   Z20Ar{   Z2CCZ3CZ4CZ5CZ6CZ9CZ10CZ12CZ14Cg      @Z15CZ17CZ22CZ23CZ24CZ32CZ35C)r   zstatus ~ fake)r   rS   r   re   Zconstant)rS   r   re   )r0   r   r!   r   locr  rI   rJ   r   r   r   r
   rm   r   r   r  r  r   r+   r,   rS   rK   r   r/   r   )r   r  r  r   r  r  r   r   r   r   ^  sh    "r   c                 C   sT   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   r9   r9   r9   r<   r<   r<   )r!   rH   )r   r0  rH  rI  r   r   r   r   simple_qic_data  s    



r  re   c              	   C   s  |  }t | \}}}}tj||||d}|jdd}|j}tj||||d}	|	jdd}
|
j}| tjkrt| d }t| d }n| tjkrt	
|}|dk}|| t	||  ||  ||< t	|t	| | | }t	|t	| | | }ntd||j|j| }|	|
j|
j|
 }t||d dd t||d dd t   td | }|
 }W 5 Q R X t||d	d  d
d t||d	d  d
d d S )Nre   rS   r   r   r  zUnknown familyg-C6?rk   rK  r   rr   )r  rI   rJ   rK   r2   r
   r   r   r   r!   
zeros_likerz  r   r   qicr/   r   r  r   rM  rN  rO  )re   r   r0  rH  rI  r   rQ  rc  mean1re  rf  mean2Zql1Zql2cr   qle1qle2Zqler1Zqler2r   r   r   test_ql_known  s8    


"

r  c              	   C   sh  |  }t | \}}}}tj||||d}|jdd}|j}tj||||d}	|	jdd}
|
j}| tjkrnd}n| tjkrt	|t
|d|   t
d|  }|t	|t
|d|   t
d|  8 }nF| tjkrt	|t
| | t	|t
| |  }ntd||j|j| \}}}|	|
j|
j|
 \}}}t|| |ddd d S )Nr  r   r   r   zunknown familyrr   r   )r  rI   rJ   rK   r2   r
   r   rm   r!   r   rz  r   r   r  r/   r   r  r   )re   r   r0  rH  rI  r   rQ  rc  r  re  rf  r  Zqldiffr  r  r  r   r   r   test_ql_diff  s2    

*0

r  c               	   C   sT   t t@ t } t| \}}}}tj||| |d}| }|	  W 5 Q R X d S )Nr  )
r  r  r  r
   r   r  rI   rJ   rK   r  )r   r0  rH  r  r   rT   rU   r   r   r   test_qic_warnings  s    r  regc           
      C   s   t jd d}t jj|dfd}t jjdd|d}t j|}t t dt |d }t	j
||t |d}t	j
||t |d}| r|jdd	}|jdd
d}	n|jdd}|jd
dd}	t|j|	j | st|	j|j |	jt |	j  d S )NiW  r  r9   r:   r   r   r  r|  )pen_wtrl  )r  r   rf   r   )r   rh   )r!   rC   rD   rE   gammar  rF   rG   r$   rI   rJ   r
   r   r  rK   r   r/   r  r   Z	ones_like)
r  rR   r   r   r0  grprQ  re  rc  rf  r   r   r   test_quasipoisson   s$    r  c                     sT  t jd d} dd}t }| t t j|| }t j|  fddt	|D }dt 
| }fddt	|D }t 
|}t jj| d	fd
}t |t jd | }tj|||tjddd}| }	tj|||tjddd}
|
 }tj|||tjdddd}| }t|	jj|jjdd t|	jj|jjd dd d S )N   r   rz   r   c                    s"   g | ]}t  t jjd qS )r:   )r!   r   rC   rE   r   covrr  r   r   r\   -  s     z test_grid_ar.<locals>.<listcomp>r   c                    s   g | ]}|g  qS r   r   r   )r  r   r   r\   0  s     r9   r:   )r   r   r   Fr   )rS   r   Tr   r  r  rk   )r!   rC   rD   rG   r   subtractouterr   r   r   r#   rE   r   rH   rI   rJ   r   r   rK   r  r   r   )r  r  r   r  r  r  r   r0  rQ  rc  re  rf  rg  rh  r   r  r   test_grid_ar"  sB    







 r  c                  C   s  t jd d} t dddgdddgdddgg}t j|}t jj| dfd}t ||j}t jjd|  dfd}t j	d	 }t ||}||
  }t t | t d}t t | t j	d
 t}	tj|||	t |d}
|
 }t|j|dd t|
jj|dd d S )N+     r   r  r"  r   r9   r:   r   r|  )r   r   r   r   r   rS   r  )r!   rC   rD   r   r   r   rE   r   r   rH   ZravelrF   rG   r$   r4  r5  rI   rJ   r   UnstructuredrK   r   r/   r   )ngrpr  r  r  xmatpareyr0  r   tr  r  r   r   r   test_unstructured_completeI  s$    "
r  c                  C   s  t jd d} t dddgdddgdddgg}t j|}t jj| dfd}t ||j}t jjd|  dfd}t j	d	 }t ||}g g g g f\}}}	}
t
| D ]}d
ddg}||d  t |}|	| ||d| |  |||f   |d| | d d f }|| |
|t d  qt |}t j|d
d}t |	}t j|td}t |
}tj|||d d d f t |d}| }t|j|dd t|jj|dd d S )Nr  r	  r   r  r"  r   r9   r:   r
  r   r   r   Zdtyper  r  )r!   rC   rD   r   r   r   rE   r   r   rH   r   popr   r$   r#   r5  rI   rJ   r   r  rK   r   r/   r   )r  r  r  r  r  r  r  ZylZxltlglr   r   r   r0  r  r   r  r  r   r   r   test_unstructured_incomplete`  s<    "



"



r  c            
      C   s   t jd tjdd} d| _dD ]}dD ]}t |}dt t j	|| }t jj
|d}|dkrvt jj|d}nt jj||fd}t |}t j|t j|t j||}| t |t |||g}	t||	d	 d
d
d q*q"d S )N{   Tr   r  r   r   r<   r   r<   r:   r   r   rr   r   )r!   rC   rD   r   r   r   rG   r   r  r  r  rE   ro  r   solvecovariance_matrix_solver  r   )
r  dqr   rs  sdzsmz1z2r   r   r   test_ar_covsolve  s*    

 r%  c            	      C   s   t jd t } d| _dD ]}dD ]}dt ||f dt |  }t jj|d}|dkrpt jj	|d}nt jj	||fd}t 
|}t j|t j|t j||}| t |t j|td||g}t||d	 d
d
d q&qd S )Nr  r  r  r  g333333?r:   r   r  r   rr   r   )r!   rC   rD   r   r   r   r$   Zeyer  rE   ro  r   r  r  r  rG   r5  r   )	r  r  r  rs  r   r!  r"  r#  r$  r   r   r   test_ex_covsolve  s(     
 r&  c            
      C   s  t jd tjdd} t jdtd| _dD ]}dD ]}dt |  | _|d	 | _	| 
t |t j|td\}}t jj|d
}|d	krt jj|d
}nt jj||fd
}t |}t j|t j|t j||}| t |t j|td||g}	t||	d ddd q4q,d S )Nr  Tr   rz   r  r  r  r  r   r:   r   rr   r   )r!   rC   rD   r   r  rG   r5  r   r   r  r  r   r  rE   ro  r   r  r  r  r   )
r  r  r  rs  r  r   r!  r"  r#  r$  r   r   r   test_stationary_covsolve  s0    

 r'  )T)K__doc__Zstatsmodels.compatr   r   Znumpyr!   r  Znumpy.testingr   r   r   r   r   r   r	   Z3statsmodels.genmod.generalized_estimating_equationsZgenmodZ generalized_estimating_equationsrI   Zstatsmodels.toolsr  Z#statsmodels.regression.linear_modelZ
regressionZlinear_modelrn  Zstatsmodels.genmodr
   r   Z#statsmodels.discrete.discrete_modelrv  Zdiscrete_modelZpandasr0   Zscipy.stats.distributionsr   rM  Zmatplotlib.pyplotZpyplotrv   ImportErrorr   Zmatplotlib.backends.backend_pdfr   r   r   r-   r5   r6   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r   r  rm   r  r  r  r  r  r  r%  r&  r'  r   r   r   r   <module>   s   $

            3 "#;
+
!	
!'(