
    !g9                         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
      Z G d d      Z G d d      Z G d d      Zy)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                   "    e Zd Zed        Zd Zy)TestEffectsizeBinomc                     t         j                  | _        d}t        j                  t        j                  |            }|g d   }|j                  j                  \  | _	        | _
        | _        | _        y )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,30)e2ineic2inci)r   	eff_prop1resultspdread_csvioStringIOvaluesTcount1nobs1count2nobs2)clsssdf3df_12ys       ^/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/stats/tests/test_meta.pysetup_classzTestEffectsizeBinom.setup_class   sY    ",,(& kk"++b/*12 8>}}4
CIsz39    c                 b   | j                   }| j                  | j                  | j                  | j                  f}t        | \  }}t        ||j                  d       t        ||j                  d       t        |ddi\  }}t        ||j                  d       t        ||j                  d       t        |ddi\  }}t        ||j                  d       t        ||j                  d       t        |ddi\  }}t        ||j                  d       t        ||j                  d       y )NvIh%<=rtol	statisticrroras)r   r   r   r    r!   r   r   y_rdv_rdy_rrv_rry_orv_ory_asv_as)selfres2dtaeffvar_effs        r&   test_effectsizez#TestEffectsizeBinom.test_effectsize9   s    ||{{DJJTZZ@ /4WTYYU37.DtDWTYYU37.DtDWTYYU37.DtDWTYYU37r(   N)__name__
__module____qualname__classmethodr'   r>    r(   r&   r   r      s    G G68r(   r   c                   "    e Zd Zed        Zd Zy)TestEffSmdMetac                     g dg dg dg dg dg dg}g d}t        j                  ||      }t        j                  |g d	         j                  | _        |d
   | _        y )N)Carroll^      <   \      rJ   )Grantb      A   rK   rI   rP   )PeckrN      (   X      rS   )DonatrH         R      rX   )StewartrN   rO   2   rT   rI   -   )Young`   rO   U   rK   rI   r`   )studymean_tsd_tn_tmean_csd_cn_c)columns)rb   rc   rd   re   rf   rg   ra   )r   	DataFramenpasarrayr   r;   	row_names)r"   datacolnamesdframes       r&   r'   zTestEffSmdMeta.setup_classQ   se     0-,//-/ OdH5**V %> ? @@A 	wr(   c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }t        | j                   \  }}t	        ||d       t	        ||d       t	        ||d       t        j                  g d      }t        j                  g d	      }t        j                  g d
      }t        j                  g d      }t	        ||d       t	        ||d       y )N)*؆92?g2?QSvu?aCB?gd;?tw?)gj>?g vϟ?g{٩?g&)?gE1?gdQg2?)g(υ?g>"[+џ?g ƛ?gM垅?g(LP7?g 3?gh㈵>r+   g-C6?gMb`?)rq   g2?rr   rs   gbń?rt   )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*   )rj   arrayr   r;   r   )r9   yivi_asyvi_ubr<   r=   yi_mvi_ms           r&   test_smdzTestEffSmdMeta.test_smda   s    XX K L  K L  K L &txx0W 	Rd+T2d3
 XX K L  K L xx K L xx K L 	T.E2r(   N)r?   r@   rA   rB   r'   r{   rC   r(   r&   rE   rE   O   s    ( (-3r(   rE   c                   .    e Zd Zed        Zd Zd Zd Zy)
TestMetaK1c                 t    t        j                  g d      | _        t        j                  g d      | _        y )N)	g     N@g33333N@g{GO@gfffff&O@gQ+O@gLO@gYO@gQkO@gyP@)	Q?g\(\?g
ףp=
?r   gF%u?g      ?gX5;N?g
ףp=
?g)\(?)rj   ru   r<   r=   )r"   s    r&   r'   zTestMetaK1.setup_class   s.     (( * +hh  8 9r(   c                    | j                   | j                  }}g d\  }}}}t        ||dd      \  }}t        |d       t	        t        j                  |      |d       t        |      }	t        ||t        j                  |	      |	z        }
t	        t        j                  |
      |d       t        ||d|z        }t	        t        j                  |      |d	       t        ||d
d      \  }}t        |d       t	        ||d       t        |||
d      \  }}t        |d       t	        t        j                  |      |d       y )N)g!u?g8gDio?g&?g(?皙?:0yE>
tau2_startatolTgiUMu?r   r   gMbP?r   )r   maxiterF绽|=)r<   r=   r
   r   r   rj   sqrtlenr   onesr   )r9   r<   r=   t_PMt_CAt_DLt_C2tau2	convergedktau2_catau2_dltau2_dl_tau2_c2s                 r&   test_tau_kackerzTestMetaK1.test_tau_kacker   s$    xxW!AdD$,S'8;$HiY%t$7Hc7BGGAJN;($T: c7AK8($T:.sG78:)Y&'6 .c79@679 	Y&($T:r(   c                    t         j                  }| j                  | j                  }}t	        ||dd      \  }}t        |d       t        ||j                  d       t        |t        j                  t        |            d||z   z        }|j                  d	
      }t        |j                  |j                  d       t        |j                  |j                   d       |j#                         d   \  }}	t        ||j$                  d       t        |	|j&                  d       t)        ||dd      }
t        |
j                  |j                  d       t        |
j*                  |j                  d       t        |
j,                  |j                   d       |
j#                  d      d   }t        |d   |j$                  d       t        |d   |j&                  d       t        |
j.                  |j0                  d       |
j3                         }|\  }}|j4                  }t        ||j6                  d       t        ||j0                  d       t        |dd       y )Nr   r   r   Tr   r   r   )weightsfixed_scale)cov_typer*   r   pmgHz>)	method_rer   Fuse_t   )r   exk1_metaforr<   r=   r
   r   r   r   r   rj   r   r   fitparamsbbseseconf_intci_lbci_ubr	   mean_effect_resd_eff_w_reqQEtest_homogeneitydfQEp)r9   resr<   r=   r   r   mod_wlsres_wlsci_lowci_uppres3cithr   pvr   s                   r&   test_pmzTestMetaK1.test_pm   s   ''xxW,S'8;$HiY%chhU3 c2773s8,a7T>6JK++}+5E:SVV%8 ))+A.		6		6 sGt$G		388%8++SUU?((#&&u=]]]'*1syyu51syyu5U3 ""$2UUCGG%0366.E.r(   c                 N	   t         j                  }| j                  | j                  }}t	        ||d|z        }t        ||j                  d       t        ||d      }t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       |j                  d      }t        |d   d	   |j                  d       t        |d   d   |j                  d       t        |j                  |j                   d       t        |j"                  |j$                  d
z  d       t        |j&                  |j(                  d       |j+                         }|\  }}	|j,                  }
t        |	|j.                  d       t        ||j                   d       t        |
dd       t         j0                  }t        |j2                  |j                  d       t        |j4                  |j                  d       t        |d	   d	   |j                  d       t        |d	   d   |j                  d       t         j6                  }t         j8                  }t        |j                  |j                  d       t        |j2                  |j                  d       t        |j4                  t;        j<                  |j>                        z  |j                  d       t        |j                  t;        j<                  |j@                        z  |j                  d       t        t;        j<                  |jB                        |j                  d       t        t;        j<                  |jD                        |j                  d       |j                  d      }t        |d   d	   |j                  d       t        |d   d   |j                  d       t        |d   d	   |j                  d       t        |d   d   |j                  d       |j+                         }|\  }}	|j,                  }
t        |	|j.                  d       t        ||j                   d       t        |
dd       y )Nr   r   r   dl)r   r*   Fr   r   d   r   T      )#r   exk1_dlr<   r=   r   r   r   r	   r   r   r   r   r   r   r   r   r   i2I2h2H2r   r   r   exk1_femean_effect_fesd_eff_w_feexk1_dl_hksjexk1_fe_hksjrj   r   scale_hksj_fescale_hksj_revar_hksj_fevar_hksj_re)r9   r   r<   r=   r   r   r   r   r   r   r   res_feres_dlsres_fess                 r&   test_dlzTestMetaK1.test_dl   s]   ""xxW3W5chhU3sGt<		388%8++SUU?((#&&u=]]]'1a#))%81a#))%8U3#E:e4""$2UUCGG%0366.E. %%++VXXEB((&))%@1a&,,U;1a&,,U; ++++++WYYUC++WYYUC((27743E3E+FF

	0((27743E3E+FF

	0 0 017::EJ 0 017::EJ ]]]&1a'--e<1a'--e<1a'--e<1a'--e<""$2UUGKKe47::E2E.r(   N)r?   r@   rA   rB   r'   r   r   r   rC   r(   r&   r}   r}      s%    9 9;B(/T</r(   r}   c                   Z    e Zd Zed        Zd Zej                  j                  d        Z	y)TestMetaBinORc                    t         j                  x| _        }|j                  |j                  |j
                  |j                  f| _        t        | j                  ddi\  }}t        ||dd      }|| _
        || _        || _        y )Nr-   r/   chi2T)r   r   )r   results_or_dl_hkr:   event_en_eevent_crg   r;   r   r	   r<   r=   res1)r"   r:   r<   r=   r   s        r&   r'   zTestMetaBinOR.setup_class(  sp    &7774<<4<<B.H4HWsGvTJr(   c                    | j                   }| j                  }t        | j                  |j                  d       t        | j
                  |j                  dz  d       t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       t        |j                  |j                  d       t        |j                   |j"                  d       |j%                         }|\  }}|j&                  }t        ||j                  d       t        ||j(                  d       t        ||j*                  d       t        |j,                  |j.                  d       t        |j0                  |j2                  dz  d       |j5                  d      }t        |d   d   |j6                  d       t        |d   d	   |j8                  d       |j5                  d
      }t        |d   d   |j:                  d       t        |d   d	   |j<                  d       d	| j
                  z  }t?        | j                  tA        jB                  tE        | j                              |      }	|	jG                         }
t        |
jH                  |j                  d       d	| j
                  |j                  z   z  }t?        | j                  tA        jB                  tE        | j                              |      }	|	jG                         }
t        |
jH                  |j                  d       y )Nr*   r+   r   r   Tr   r   r   r   F)var_weights)%r   r:   r   r<   TEr=   seTEr   TE_fixedr   
seTE_fixedr   Qr   r   	TE_randomsd_eff_w_re_hksjseTE_randomr   r   pval_Qdf_Qr   r   r   Hr   lower_randomupper_randomlower_fixedupper_fixedr   rj   r   r   r   r   )r9   r   r:   r   r   r   r   r   r   mod_glmres_glms              r&   
test_basiczTestMetaBinOR.test_basic3  sw   yyyy$''6diil?++T]]G(($//FU3		49959++T^^%H--t/?/?eL""$2UU466.DKKe4DIIE2u57]]]& 	1a$"3"3%@1a$"3"3%@]]]'1a$"2"2?1a$"2"2?dll"dhhDHH 6")+++-EBt||dii/0dhhDHH 6")+++-UCr(   c                    | j                   }|j                  d       |j                  dd       |j                  dd       t        j                  t        d      5  |j                  d	d
       d d d        y # 1 sw Y   y xY w)NFr   T)use_expr   g{Gz?)alphar   zunexpected keyword)match   )junkr   )r   plot_forestpytestraises	TypeError)r9   r   s     r&   	test_plotzTestMetaBinOR.test_plote  s{     yyu%U3t51]]9,@A 	2!51	2 	2 	2s    A==BN)
r?   r@   rA   rB   r'   r   r   mark
matplotlibr   rC   r(   r&   r   r   %  s;      0Dd [[2 2r(   r   )__doc__r   numpyrj   pandasr   r   numpy.testingr   r   #statsmodels.regression.linear_modelr   +statsmodels.genmod.generalized_linear_modelr   statsmodels.stats.meta_analysisr   r   r	   r
   r   r   r   r   r   rE   r}   r   rC   r(   r&   <module>r     s_    
    7 3 ;7 7 "18 18h?3 ?3DQ/ Q/hI2 I2r(   