U
    Ãmœdÿ9  ã                   @   s´   d Z ddlZddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ G d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdS )zM
Created on Tue Apr  7 13:08:37 2020

Author: Josef Perktold
License: BSD-3

é    N)Úassert_equalÚassert_allclose)ÚWLS)ÚGLM)Úeffectsize_smdÚeffectsize_2proportionsÚcombine_effectsÚ_fit_tau_iterativeÚ_fit_tau_mmÚ_fit_tau_iter_mmé   )Úresults_metac                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestEffectsizeBinomc                 C   sH   t j| _d}t t |¡¡}|ddddg }|jj\| _	| _
| _| _d S )NaŠ              study,nei,nci,e1i,c1i,e2i,c2i,e3i,c3i,e4i,c4i
            1,19,22,16.0,20.0,11,12,4.0,8.0,4,3
            2,34,35,22.0,22.0,18,12,15.0,8.0,15,6
            3,72,68,44.0,40.0,21,15,10.0,3.0,3,0
            4,22,20,19.0,12.0,14,5,5.0,4.0,2,3
            5,70,32,62.0,27.0,42,13,26.0,6.0,15,5
            6,183,94,130.0,65.0,80,33,47.0,14.0,30,11
            7,26,50,24.0,30.0,13,18,5.0,10.0,3,9
            8,61,55,51.0,44.0,37,30,19.0,19.0,11,15
            9,36,25,30.0,17.0,23,12,13.0,4.0,10,4
            10,45,35,43.0,35.0,19,14,8.0,4.0,6,0
            11,246,208,169.0,139.0,106,76,67.0,42.0,51,35
            12,386,141,279.0,97.0,170,46,97.0,21.0,73,8
            13,59,32,56.0,30.0,34,17,21.0,9.0,20,7
            14,45,15,42.0,10.0,18,3,9.0,1.0,9,1
            15,14,18,14.0,18.0,13,14,12.0,13.0,9,12
            16,26,19,21.0,15.0,12,10,6.0,4.0,5,1
            17,74,75,,,42,40,,,23,30Ze2iZneiZc2iZnci)r   Z	eff_prop1ÚresultsÚpdZread_csvÚioÚStringIOÚvaluesÚTÚcount1Únobs1Úcount2Únobs2)ÚclsÚssZdf3Zdf_12y© r   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/stats/tests/test_meta.pyÚsetup_class   s
    zTestEffectsizeBinom.setup_classc                 C   sà   | j }| j| j| j| jf}t|Ž \}}t||jdd� t||jdd� t|ddiŽ\}}t||j	dd� t||j
dd� t|ddiŽ\}}t||jdd� t||jdd� t|ddiŽ\}}t||jdd� t||jdd� d S )Nç‚vIhÂ%<=©ZrtolÚ	statisticÚrrÚorÚas)r   r   r   r   r   r   r   Zy_rdZv_rdZy_rrZv_rrZy_orZv_orZy_asZv_as)ÚselfÚres2ÚdtaÚeffÚvar_effr   r   r   Útest_effectsize:   s    z#TestEffectsizeBinom.test_effectsizeN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r)   r   r   r   r   r      s   
r   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestEffSmdMetac                 C   s°   dddddddgddd	d
ddd
gdddddddgdddddddgddd	ddddgddd	ddddgg}dddddd d!g}t j||d"�}t |ddddd d!g ¡j| _|d | _d S )#NZCarrollé^   é   é<   é\   é   ZGrantéb   é   éA   ZPecké   é(   éX   é   ZDonaté   éÈ   éR   é   ZStewarté2   é-   ZYoungé`   éU   ZstudyZmean_tZsd_tZn_tZmean_cZsd_cÚn_c)Úcolumns)r   Z	DataFrameÚnpZasarrayr   r&   Z	row_names)r   ÚdataZcolnamesZdframer   r   r   r   R   s    ú  ÿzTestEffSmdMeta.setup_classc                 C   sò   t  ddddddg¡}t  ddd	d
ddg¡}t  ddddddg¡}t| jŽ \}}t||dd� t||dd� t||dd� t  ddddddg¡}t  ddddddg¡}t  dd d!d"d#d$g¡}t  d%d&d'd(d)d*g¡}t||d+d� t||d+d� d S ),Ng*Ø†9¼2¸?g´½Ñ2ÀÑ?g‘QSÄvu×?gaÝC¤Bå?gdôÍî;ŽÝ?gÂt�áw³Ç?gûj›>ò¡?gÁ v¤‡ÏŸ?g{´Ù©ª?g¦‰Ž&)œ…?g•Ÿ‘ÆE1¦?gdQ°g‡2˜?gœ(Ï…¡?g>"[+ÕÑŸ?g® Æ›ª?gMìÌçåž…?g(L°P7¦?gìË 3˜?gñhãˆµøä>r   g-Cëâ6?gü©ñÒMb`?g´½Ñ2ÀÑ?g‘ŒbíÅ„Ý?g“qJŸ'¡?gFl\ÛîŸ?g…D©×/ª?gb4Âk�¦…?g±¡Z�Ÿ]¦?gŠ£SdD˜?gCBÔ¿2¸?gýpl5ÀÑ?gZÆÐ~u×?gˆmŠ¤Bå?g.¸QCŽÝ?g®µ�y³Ç?g.ßO¨¡?gëUNôÑŸ?g%Â¸]ª?g{rã	Ÿ…?gÎi­£7¦?gN(ôû'3˜?r   )rE   Úarrayr   r&   r   )r$   ÚyiZvi_asyZvi_ubr'   r(   Zyi_mZvi_mr   r   r   Útest_smdb   s|        þ    þ    þ    þ    þ    þ    þzTestEffSmdMeta.test_smdN)r*   r+   r,   r-   r   rI   r   r   r   r   r.   P   s   
r.   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
Ú
TestMetaK1c                 C   s@   t  ddddddddd	g	¡| _t  d
ddd
dddddg	¡| _d S )Ng     €N@g33333³N@g{®GáO@gfffff&O@gìQ¸…+O@gÍÌÌÌÌLO@gš™™™™YO@gìQ¸…kO@gš™™™™yP@gìQ¸…ëÉ?g\�Âõ(\ó?g
×£p=
·?gF%ušØ?g      â?gX¨5Í;N±?g
×£p=
—?g)\�Âõ(ý?)rE   rG   r'   r(   )r   r   r   r   r   ”   s     ÿ  ÿzTestMetaK1.setup_classc                 C   s  | j | j }}ddddg\}}}}t||ddd�\}}t|dƒ tt |¡|d	d
� t|ƒ}	t||t 	|	¡|	 ƒ}
tt |
¡|d	d
� t||d| ƒ}tt |¡|dd
� t
||ddd�\}}t|dƒ t||dd
� t
|||
dd�\}}t|dƒ tt |¡|d	d
� d S )Ngÿ!ýöuàê?g8gDioðò?g¥½Á&á?g°çŒ(íí?çš™™™™™¹?ç:Œ0âŽyE>©Ú
tau2_startÚatolTgiUMu?©rO   r   gü©ñÒMbP?r   )rN   ÚmaxiterFç»½×Ùß|Û=)r'   r(   r	   r   r   rE   ÚsqrtÚlenr
   Úonesr   )r$   r'   r(   Zt_PMZt_CAZt_DLZt_C2Útau2Ú	convergedÚkZtau2_caZtau2_dlZtau2_dl_Ztau2_c2r   r   r   Útest_tau_kackerœ   s0     ÿ

ÿ

þ

zTestMetaK1.test_tau_kackerc                 C   sš  t j}| j| j }}t||ddd�\}}t|dƒ t||jdd� t|t	 
t|ƒ¡d||  d�}|jd	d
�}t|j|jdd� t|j|jdd� | ¡ d \}}	t||jdd� t|	|jdd� t||ddd�}
t|
j|jdd� t|
j|jdd� t|
j|jdd� |
jdd�d }t|d |jdd� t|d |jdd� t|
j|jdd� |
 ¡ }|\}}|j}t||jdd� t||jdd� t|ddd� d S )NrK   rL   rM   TrR   rP   r   )ÚweightsZfixed_scale)Zcov_typer   r   ÚpmgH¯¼šò×z>)Ú	method_rerO   F©Úuse_té   )r   Zexk1_metaforr'   r(   r	   r   r   rV   r   rE   rU   rT   ÚfitÚparamsÚbZbseÚseÚconf_intÚci_lbÚci_ubr   Úmean_effect_reÚsd_eff_w_reÚqÚQEÚtest_homogeneityÚdfÚQEp)r$   Úresr'   r(   rV   rW   Zmod_wlsZres_wlsZci_lowZci_uppÚres3ÚciÚthri   Úpvrl   r   r   r   Útest_pm½   s:     ÿ

 zTestMetaK1.test_pmc                 C   sÜ  t j}| j| j }}t||d| ƒ}t||jdd� t||dd�}t|j|jdd� t|j|j	dd� t|j
|jdd� |jdd�}t|d d	 |jdd� t|d d |jdd� t|j|jdd� t|j|jd
 dd� t|j|jdd� | ¡ }|\}}	|j}
t|	|jdd� t||jdd� t|
ddd� t j}t|j|j	dd� t|j|jdd� t|d	 d	 |jdd� t|d	 d |jdd� t j}t j}t|j|j	dd� t|j|j	dd� t|jt |j¡ |jdd� t|j
t |j ¡ |jdd� tt |j!¡|jdd� tt |j"¡|jdd� |jdd�}t|d d	 |jdd� t|d d |jdd� t|d d	 |jdd� t|d d |jdd� | ¡ }|\}}	|j}
t|	|jdd� t||jdd� t|
ddd� d S )Nr   rR   rP   Údl)r\   r   Fr]   r   éd   r_   Té   é   )#r   Zexk1_dlr'   r(   r
   r   rV   r   rg   rb   rh   rc   rd   re   rf   ri   rj   Úi2ÚI2Úh2ZH2rk   rl   rm   Zexk1_feÚmean_effect_feÚsd_eff_w_feZexk1_dl_hksjZexk1_fe_hksjrE   rS   Zscale_hksj_feZscale_hksj_reZvar_hksj_feZvar_hksj_re)r$   rn   r'   r(   rV   ro   rp   rq   ri   rr   rl   Zres_feZres_dlsZres_fesr   r   r   Útest_dlç   sd     ÿ ÿzTestMetaK1.test_dlN)r*   r+   r,   r-   r   rY   rs   r}   r   r   r   r   rJ   ’   s
   
!*rJ   c                   @   s0   e Zd Zedd„ ƒZdd„ Zejjdd„ ƒZ	dS )ÚTestMetaBinORc                 C   s\   t j | _}|j|j|j|jf| _t| jddiŽ\}}t	||ddd�}|| _
|| _|| _d S )Nr    r"   Zchi2T)r\   r^   )r   Zresults_or_dl_hkr%   Zevent_eZn_eZevent_crC   r&   r   r   r'   r(   Úres1)r   r%   r'   r(   r   r   r   r   r   )  s    zTestMetaBinOR.setup_classc                 C   s  | j }| j}t| j|jdd� t| j|jd dd� 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� t|j|jdd� | ¡ }|\}}|j}t||jdd� t||jdd� t||jdd� t|j|jdd� t|j|jd dd� |jdd�}t|d d |jdd� t|d d	 |jdd� |jd
d�}t|d d |jdd� t|d d	 |jdd� d	| j }t| jt  !t"| jƒ¡|d�}	|	 #¡ }
t|
j$|jdd� d	| j|j  }t| jt  !t"| jƒ¡|d�}	|	 #¡ }
t|
j$|jdd� d S )Nr   r   rw   rR   Tr]   rv   r   r   F)Zvar_weights)%r   r%   r   r'   ZTEr(   ZseTEr{   ZTE_fixedr|   Z
seTE_fixedri   ÚQrV   rg   Z	TE_randomZsd_eff_w_re_hksjZseTE_randomrk   rl   Zpval_QZdf_Qrx   ry   rz   ÚHrd   Zlower_randomZupper_randomZlower_fixedZupper_fixedr   rE   rU   rT   r`   ra   )r$   r   r%   rq   ri   rr   rl   rp   rZ   Zmod_glmZres_glmr   r   r   Ú
test_basic4  sH    
ÿÿzTestMetaBinOR.test_basicc              	   C   sZ   | j }|jdd� |jddd� |jddd� tjtdd�� |jd	dd
� W 5 Q R X d S )NFr]   T)Zuse_expr^   g{®Gáz„?)Úalphar^   zunexpected keyword)Úmatché   )Zjunkr^   )r   Zplot_forestÚpytestZraisesÚ	TypeError)r$   r   r   r   r   Ú	test_plotf  s    zTestMetaBinOR.test_plotN)
r*   r+   r,   r-   r   r‚   r†   ÚmarkZ
matplotlibrˆ   r   r   r   r   r~   &  s
   

2r~   )Ú__doc__r   ÚnumpyrE   Zpandasr   r†   Znumpy.testingr   r   Z#statsmodels.regression.linear_modelr   Z+statsmodels.genmod.generalized_linear_modelr   Zstatsmodels.stats.meta_analysisr   r   r   r	   r
   r   r   r   r   r.   rJ   r~   r   r   r   r   Ú<module>   s    4B 