U
    Kvf9                     @   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   E/tmp/pip-unpacked-wheel-2v6byqio/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 )NvIh%<=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Grantb      A   ZPeck   (   X      ZDonat      R      ZStewart2   -   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*؆92?g2?gQSvu?gaCB?gd;?gtw?gj>?g vϟ?g{٩?g&)?gE1?gdQg2?g(υ?g>"[+џ?g ƛ?gM垅?g(LP7?g 3?gh㈵>r   g-C6?gMb`?g2?gbń?gqJ'?gFl\?gD/?gb4k?gZ]?gSdD?gCBԿ2?gpl5?gZ~u?gmB?g.QC?gy?g.O?gUNџ?g%¸]?g{r	?gi7?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@g33333N@g{GO@gfffff&O@gQ+O@gLO@gYO@gQkO@gyP@gQ?g\(\?g
ףp=
?gF%u?g      ?gX5;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(?皙?:0yE>
tau2_startatolTgiUMu?rO   r   gMbP?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   ZpmgHz>)	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thrh   pvrk   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   rf   ra   rg   rb   rc   rd   re   rh   ri   i2I2h2ZH2rj   rk   rl   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$   rm   r'   r(   rV   rn   ro   rp   rh   rq   rk   Zres_feZres_dlsZres_fesr   r   r   test_dl   sd      zTestMetaK1.test_dlN)r*   r+   r,   r-   r   rY   rr   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   rv   rR   Tr\   ru   r   r   F)Zvar_weights)%r~   r%   r   r'   ZTEr(   ZseTErz   ZTE_fixedr{   Z
seTE_fixedrh   QrV   rf   Z	TE_randomZsd_eff_w_re_hksjZseTE_randomrj   rk   Zpval_QZdf_Qrw   rx   ry   Hrc   Zlower_randomZupper_randomZlower_fixedZupper_fixedr   rE   rU   rT   r_   r`   )r$   r~   r%   rp   rh   rq   rk   ro   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{Gz?)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   Z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 