
    M/Ph^                        d Z ddlZddlZddlmZmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlZddlmZ  ej        g d          Z ej        g d	g d
g dg dg dg dg dg dg dg dg
          Zg dZdddddddddd	Zej        Z ej        g ddd d!d"d#d#d$d%d&d'd(d#d)d$d$d$d$d#d#d#d#d#d#d*d+d,d-d.d/d*d0d1d2d2d2d#d#d#d#d#d#d3d3d3d3d3d3eeeeeedddddd                              d4d5d67          Z ej        g d8dd9dd:d;d'd<d=d>d"d)d?d@d;dAdBdCdDdEd"dFd$dGd?dHdHdHdHdHd"dFd$dGd?d>d>d>d>d>dIdJdKdLdMdNdOdPdQdRdIdSdTdUdVdWdWdWdWdWd"d"d"d"d"dXdYdZd[d>d\d\d\d\d\d]d^d_d`daeeeeeeeeeed:d:d:d:d:dbdcdddedf                              d5d5d67          Z ej        g dg                              dhd5d67          Z  G di dj          Z! G dk dle!          Z" G dm dne!          Z# G do dpe!          Z$ G dq dre!          Z%ej&        '                    dsg dt          ej&        '                    dug dv          ej&        '                    dw e( e)dx                              dy                                     Z*dz Z+d{ Z,d| Z-ej&        '                    du e.e                    d}             Z/ej&        '                    du e.e                    d~             Z0d Z1d Z2d Z3ej&        '                    dddg          ej&        '                    dddg          ej&        '                    dddg          d                                     Z4dS )aK  Tests for multipletests and fdr pvalue corrections

Author : Josef Perktold


['b', 's', 'sh', 'hs', 'h', 'fdr_i', 'fdr_n', 'fdr_tsbh']
are tested against R:multtest

'hommel' is tested against R stats p_adjust (not available in multtest

'fdr_gbs', 'fdr_2sbky' I did not find them in R, currently tested for
    consistency only

    N)assert_almost_equalassert_equalassert_allclose)multipletestsfdrcorrectionfdrcorrection_twostageNullDistribution	local_fdrmultitest_methods_names)tukeyhsd)norm)version)
vT?MvEڌ?Tp}?~?Wĭ?IQ?2gft?JzI?É1q2?6㱎?)r   ](A?r   r    h'A?r   r   g_!Y?)r   g3}g?cwWd?r   g T8g?g 9^d?g3}W?gRp?)r   g#./?6㱾?r   gta?gpܛ&!?g/X=?g_̀?)r   g%?K3*?r   g(R2?g>?g%?g,c ?)r         ?r   r   g^q?g&߉4?gIQ?r   )r   r   r   r   gJ߷?蝮	?5?r   )r   r   r   r   g=G?r   r    r   )r   r   r   r   g?r   r    r   )r   r   r   r   gI?r   gK?r   )r   r   r   r   g?r   r   r   )
rawp
BonferroniHolmHochbergSidakSSSidakSDBHBYABH	TSBH_0.05)r   pval)   b)   h)   sh)   s)   hs)   fdr_i)   fdr_n)	   fdr_tsbh)	r!   r"   r#   r$   r%   r&   r'   r(   r*   gMb`?gMbp?g~jtx?gMb?{Gz?g~jt?g~jt?g;On?g~jt?gQ?g;On?g{Gz?gCnt?g-@T?g ҏv`(?gP?g0XP?g dG?g Q?g?j[?g-1Ba?g%u?r6   
   F)orderMbP?g~jth?g{Gzt?皙?gQ?g{Gz?g
ףp=
?gQ?g{Gz?      ?g333333?gffffff?皙?g?g;On?gy&1?g      ?gCGjYc?g߳PK?g N?g?g?gBK?g0xT?g`PZ7?g(/kb}?g5?gtI?g*dQ?gQsVT?gAq=V?g	?gVUUUUU?g__?gffffff?gll?gxR?g߳5	>?gF?g<+	f?gU&?g6d~?gVUUUUU?g__?gffffff?gll?g
ףp=
?(,  g4?gmi*9?g-8??g^D5_A?g%P?g.TS?gLsW?g~$e?gVSq?gڑ?gWM?ghn˅?gM?g_L?gl?g٦??g=%?gH>!?ga?g?g_8	?gB[?gӀ?g)H"?gӑq)?gM?g7g,?gը?i,}?ki>#l?g*g\?g<΍DÍ?g2?g*k@)?gqϩ?gLǜgK?g.6R[g?g!~?g""_H?g'?gWn?gd7i?r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   rF   ۟?kQǋ?`?:?Dh?	9JV֡?5uiuI?羛XS8?Seo?Zf?Yp??祲Qk?l?r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   rE   3iU?g@-8?g/?gE?g ?gǱvV?g.dե?gZv:?g@
T?gSI>?g)r?gI?g]0U4?g(?gӢr
/?go?gd?g=z?g3?g}?gaT?g?gZ?g,4?g?g?r,   r,   r,   r,   rU   gAL*.k?gn?g?g_ ?g_`.?gꊡ?g!b(c?g7(?gF>bC?gv끽?g0?g|?g#
?gm?g`4ބ-?g3vL?gL?gOR?w4?rV   rV   rV   rV   rV   rV   rV   rV   rV   rV   2o?rW   rW   rW   ix?rX   g2QW{y?g.6R[g?g;Ћ[?gisȪ?gaX9`?ga@Nӱ?犫<+?rY   gl?gTl\?gn5?g>?g/roB?/x⃰?rZ   rZ   rZ   rZ   gV)K?gi)~?BJ?r[   g`s?rE   ݏ?r\   r\   r\   
%nژ?r]   g8EPz*s?g?a?g R?g lnܿ?gOu?g)0?o%?r^   g6q	?gR16V?r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   r,   d(b?r_   r_   r_   ,a3l?r`   g{l?g w?gC:Ϣ?gdl_Z?gBu?g4?9V?ra   g#i?gG<G?rD   g؂),#?g,\?!xP?rb   rb   rb   rb   g#b!?g ??1JW$?rc   g>k?g%?|'Uf?rd   rd   rd   %Jkq?re   g	9JVq?gs?|?g'ጄ?gEwB?gvU?g@;?Vs֪?rf   gڽ'?gf;?gM?gwr+?gܟ5?u?rg   rg   rg   rg   g:y?gb??jMa?rh   g*?gl~?   c                       e Zd Zej                            d ee                                                    d             Z	d Z
dS )CheckMultiTestsMixinzkey,valc                    | j         }|d d df         }|d         | j        v rdt          || j        |d                   d d         \  }}t	          ||d d |d         f         d           t          ||| j        k               d S d S )Nr   r,   alphamethodr.      )res2methodsr   rn   r   r   )selfkeyvalres_multtestpval0reject	pvalscorrs          b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/stats/tests/test_multi.py"test_multi_pvalcorrection_rmethodsz7CheckMultiTestsMixin.test_multi_pvalcorrection_rmethods   s     yQQQT"q6T\!! -e48J58V!= != !==?aR!AFI  	<3q6	+BBGGGdj!899999 "!    c                 <   | j         }|d d df         }t          j        t          |d          d                   }t	          ||d d df         d           t          j        t          |d          d                   }t	          ||d d df         d           d S )	Nr   nro   r,   r8   rp   ir6   )rq   npsortr   r   )rs   rv   rw   ry   s       rz   test_multi_pvalcorrectionz.CheckMultiTestsMixin.test_multi_pvalcorrection   s     yQQQT"GM%<<<Q?@@	I|AAAqD'92>>>GM%<<<Q?@@	I|AAAqD'92>>>>>r|   N)__name__
__module____qualname__pytestmarkparametrizesortedrmethodsitemsr{   r    r|   rz   rk   rk      sd        [Yx~~/?/?(@(@AA: : BA:	? 	? 	? 	? 	?r|   rk   c                   $    e Zd Zed             ZdS )TestMultiTests1c                 >    g d| _         d| _        t          | _        d S )Nr-   r3   r1   r5   r/   r7   r9   皙?)rr   rn   res_multtest1rq   clss    rz   setup_classzTestMultiTests1.setup_class   s!    CCC	 r|   Nr   r   r   classmethodr   r   r|   rz   r   r      s-        ! ! [! ! !r|   r   c                   $    e Zd Zed             ZdS )TestMultiTests2c                 >    g d| _         d| _        t          | _        d S )Nr   rA   )rr   rn   res_multtest2rq   r   s    rz   r   zTestMultiTests2.setup_class   s!    CCC	 r|   Nr   r   r|   rz   r   r      s-        ! ! [! ! !r|   r   c                   $    e Zd Zed             ZdS )TestMultiTests3c                 >    g d| _         d| _        t          | _        d S N)r-   r3   r1   r5   r/   r7   r9   r;   rA   )rr   rn   
res0_largerq   r   s    rz   r   zTestMultiTests3.setup_class   s'    # # #	r|   Nr   r   r|   rz   r   r      s-          [  r|   r   c                   $    e Zd Zed             ZdS )TestMultiTests4c                 >    g d| _         d| _        t          | _        d S r   )rr   rn   res_multtest3rq   r   s    rz   r   zTestMultiTests4.setup_class   s'    # # #	 r|   Nr   r   r|   rz   r   r      s/         ! ! [! ! !r|   r   rn   )r<   rA   r   ro   )r-   r3   r1   r5   r/   hommelr7   r9   	fdr_tsbkyr;   fdr_gbsii   c           	      &   t          j        t          j        dd|          t          j        ddd|z
            f          }t          || |          d d         \  }}d|| |                                ||fz  }t          ||| k    |	           d S )
N-C6?r<   g'$隩?g)\(?r=   rm   r.   z2case %s %3.2f rejected:%d
pval_raw=%r
pvalscorr=%r)err_msg)r   hstacklinspacer   sumr   )rn   ro   r   pval1rx   ry   msgs          rz   test_pvalcorrection_rejectr     s     Ir{66266{7D"r'::< = =E &e5-35 5 557aR9FI AUFJJLL%DD DCe+S999999r|   c                      t          j        g d          } t          j        g d          }t          | dd          \  }}}}t          ||d           t	          ||dk                d S )N)(gdS?g3k?gjt?g!Yn?gj>"D?g죓?gx@ٔ+?gE|'f?gE?g7ܘ?gEB[Υ?gJ8?gTR'?g0?gʾ+?gK?g,g~5?gF??gE?ga ?gC8
?g?g > ?gG ^/?gKqU?glscz?gխ?gqZ ?g4)?g<?gG|?g(y?g($?g*5{?goB!?gض(A&?g)^?gZ{,}?g?焻vۅ?)(?g;Tގ?g~jt?gg#U`_?gC9ѮB?gF=D;?g"O|?g͍	K?gNwx?g??g4O?lscz?r   gbbq?gAo?g^)?Pkw\?r   r   r   r   r   r   煻vۅ?r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   horm   rp   )r   arrayr   r   r   )rw   	result_horejry   _s        rz   test_hommelr     s    H / / / 0 0E      I  )c$GGGCAq	9b111i#o&&&&&r|   c                     g d} t          j        t          d          5  t          | dd          }d d d            n# 1 swxY w Y   t	          ddg|d	         d d
         d           t          d|d                                                    t          j        g d          }t          |d         |d           t          j        g d          } t          | dd          }t          | dd          }t          |d         |d                    t          |d         |d         d           t          j        g d          }t          |d         |d           d S )Nr   g-C6:?gŏ1w-!_?g~jt?g0*?gPkw?g2%䃞?g"u?g9m4?g#~j?gfc]F?g:M?gZӼ?g}?5^I?r   ziter keyword)matchrA   F)rn   itergu!Va?gQI?r.   r0      r   )ga2U0*S?gHPsb?g<,Ԛ}?g?߾?r   (0?r   g58EGr?gGx$(?gq?gp=
ף?gV-?g(\?g*	?gp=
ף?r,   giUMu?)atol)g?rC   g333333?rB   r,   bkyrm   r   )333333?r   r   g      ?r   )r   warnsFutureWarningr   r   r   r   r   r   r   r   )pvalsres_tstrq   res1res_pvs        rz   test_fdr_bkyr   8  s   7 7 7E 
m>	:	:	: H H(dGGGH H H H H H H H H H H H H H H6*GBKOQ???GAJNN$$%%% 8 
 
 
  D GAJ40000 H,,,--E!%tEBBBDd;???Da$q'"""DGT!W40000X66677FDGV$//////s   ?AAc                  8   g d} t          |           }d}t          | dd          }t          | dd|d           }t          | dd|	          }t          |d
         |d
                    t          |d
         |d
                    d
}t          | dd          }t          | dd|d           }t          | dd|	          }t          | dd          }t          |d
         |d
         d
|d                                         |z  z
  z             t          |d
         |d
                    t          |d
         |d
                    d}d}t          | dd          }t          | dd|d           }t          | dd|	          }t          |d
         t          j        |d
         |z  dd
                     t          |d
         |d
                    d
}t          | dd          }t          | dd|d           }t          | dd|	          }t          | dd          }t          |d
         |d
         d
|d                                         |z  z
  z  |z             t          |d
         |d
                    t          |d
         |d
                    d S )Nr   r   rA   fdr_bhrm   bh)rn   ro   maxiterr   r;   )rn   ro   r   r,   g?r   r   )lenr   r   r   r   r   clip)r   r~   kres0r   rq   res3facts           rz   test_fdr_twostager   \  s   7 7 7E 	E

A 	
Ad8<<<D!%tD!'+- - -Dd:qIIIDDGT!W%%%DGT!W%%%	Ad8<<<D!%tD!'+- - -Dd:qIIIDd:>>>DDGT!WDGKKMMA,=(=>???DGT!W%%%DGT!W%%% D	Ad8<<<D!%tE1'+- - -Dd;JJJDDGRWT!Wt^Q::;;;DGT!W%%%	Ad8<<<D!%tE1'+- - -Dd;JJJDd;???DDGT!WDGKKMMA,=(=>EFFFDGT!W%%%DGT!W%%%%%r|   c                 l   t          j        g d          dz  }t          j        |          }|                                }||         }t          || d          }t          || d          }t	          |d         |         |d                    t          |d         |         |d         d           d S )	N)
   i ibq iK i il  i+v( i9 i&  i8^ gHz>F)ro   	is_sortedTr   g|=rtol)r   r   argsortr   r   r   )ro   r   sortind
sortrevindpvals_sortedr   rq   s          rz   test_issortedr     s     H - - - . .045EjG""J>Lv???DfEEEDa$d1g...DGJ'au======r|   c                     t          j        dd          }d|d<   t          ||           d         d         dk    sJ d S )Nip  gGz?gw-LQ4r   r   r,   g&y3)r   fullr   )ro   r   s     rz   test_floating_precisionr     sL     GD$EE!Hv...q1!4u<<<<<<r|   c                  B   d} t          j        g dg dg dg dg dg dg dg d	g d
g dg
          } g d}t          |dddd          }|d d         \  }}}}}}t          || d d df         d           t          || d d ddf         d           t	          || d d df         dk                g d}	t          j        t          j        j                  t          j        d          k    }
|
rdnd}t          |d         |	         | |	df         |           d S )NaK      pair      diff        lwr        upr       p adj
    P-M   8.150000 -10.037586 26.3375861 0.670063958
    S-M  -3.258333 -21.445919 14.9292527 0.982419709
    T-M  23.808333   5.620747 41.9959194 0.006783701
    V-M   4.791667 -13.395919 22.9792527 0.931020848
    S-P -11.408333 -29.595919  6.7792527 0.360680099
    T-P  15.658333  -2.529253 33.8459194 0.113221634
    V-P  -3.358333 -21.545919 14.8292527 0.980350080
    T-S  27.066667   8.879081 45.2542527 0.002027122
    V-S   8.050000 -10.137586 26.2375861 0.679824487
    V-T -19.016667 -37.204253 -0.8290806 0.037710044
    )gL @g-x>$g
lV:@g:)q?)gS
g?a'r5g|p-@g:#uo?)gGW7@gF\ {@g9rIzD@gܰ9{?)g,J	*@g)*gN6@g;?)gQ&g%=g_Gwk@gyaa?)gQQ/@gz2;g?G@@gk:?)gܞ 
gCX5gI=Uϓ-@g8d!_?)g;@g!@g;ZF@gu=.`?)g @gaqF$g{Qq<:@gUUH?)g%ID3gY$Bg	ԇgkN?)g4W@g[ΥY@gdzV@ǧ]@gX@r6   gH	Դ[@rA   r2   )rn   dfr   r4   )decimalr,   r0   r.   )r.   r4   r8   r:   z1.7.0h㈵>r<   r   r   )	r   r   r   r   r   r   parsescipyr   )resm_rmyrespairsrx   	meandiffs	std_pairsconfintq_critsmall_pvals_idxscipy_versionr   s               rz   test_tukeyhsdr     s   C (888999999888999999999999888999
; 
< 
<C A
@
@CS!^4A>>>E;@!98E69i&	3qqq!t9a8888QQQ!Va8888QQQTT)*** #llO ]5=#899]7++,M *44dDE!H_-s?A3E/F     r|   c                  d   t          j        ddd          } t          j        |           }t          j        ddd          }t          j        ||f          }t          j        |dz   dz            t          j        dt           j        z            z  }t          |          t          t          |          t          |          z             z  }|d|z
  |z  |z   z  }d	D ]O}|t          |          }nt          ||
          }|t          |          d          }t          ||dd           Pd S )Nr@   +?  r0   r2      r.   r,   )Nr   g:0yE>)rn   rA   r   )r   r   )r   r   r   ppfconcatenateexpsqrtpir   floatr
   r   )	gridz0z1zsf1rrn   fdrfdr1s	            rz   test_local_fdrr    s$    ;ueT**D	$B	Q2		B	R	!	!B 
Q
		bgag..	.BB%B#b'')***A1q5B,
B 7 7=B--CCBe,,,C3r7788}Dt#666667 7r|   c                  ,   t          j        ddd          } t          j        |           }t          j        ddd          }t          j        ||f          }t          |d          }t          |j        d	d
d
           t          |j        dd
d           t          |j	        dd
d           t          |
                    t           j        d                   t          j
        t           j        d         |j        |j                  d           d S )Nr@   r   r   r0   r2   r   T)estimate_null_proportionr   r   r   r   r,   r<   g\(\?r   r   r,   locscalevIh%<=r   r   r   r   r   r   r	   r   meansdnull_proportionpdfr_)r  r  r  r  emp_nulls        rz   test_null_distributionr    s
    ;ueT**D	$B	Q2		B	R	!	!BTBBBHHM14d;;;;HKD9999H,dDIIII HLLx11HRU8_!)hkC C C           r|   estimate_probTFestimate_scaleestimate_meanc                 <   t          j        ddd          }t          j        |          }t          j        ddd          }t          j        ||f          }t          || ||          }| st          |j        dd	d	
           |st          |j        dd	d
           |st          |j	        dd	d
           t          |
                    t           j        d                   t          j
        t           j        d         |j        |j                  d           d S )Nr@   r   r   r0   r2   r   )r  r  r  r   r   r  r,   r<   r  r  r  r   r  )r  r  r  r  r  r  r  r  s           rz   test_null_constrainedr!    s2    ;ueT**D	$B	Q2		B	R	!	!B-/=9FH H HH  @qt$???? >QT==== K0!$TJJJJ HLLx11HRU8_(-#+;0 0 0           r|   )5__doc__r   numpyr   numpy.testingr   r   r   statsmodels.stats.multitestr   r   r   r	   r
   r   statsmodels.stats.multicompr   scipy.stats.distributionsr   r   	packagingr   r   rw   r   res_multtest2_columnsr   nanNAreshaper   r   r   rk   r   r   r   r   r   r   listranger   r   r   r   r   r   r   r   r  r  r!  r   r|   rz   <module>r/     sr        , , , , , , , , , ,M M M M M M M M M M M M M M M M 1 0 0 0 0 0 * * * * * *        : : : 	; 	;
 7 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 77 7 7K(8 (9 (9V$ $ $ 
 

 
 
 V 	
				!%	',	.3	5:	<A	CH						$	&+	-2	49	;@	BG	 	 	 	  	 "5	 7J	 		 .		 0>		
 	
 .	
 0C	 	 &	 (3	 5@	 BG	 	 	 	  	 "'	 )/	 17	 9?	 AG	 	 	 	 	  	 "$	 &(	 *,	 ./	 12	 45	 78	 :;	 =>	 	 	 wq"Cw     
!&(,.248:>@DFJ	 "%'*,/146:<ACH     # %) +/ 15 7< >C EJ 
	 	 	 	 "	 $(	 *=	
 
 .
 0C  - /A  , .@  - /B  . 0B  , .@    $ &* ,0 26 8K    "4 6:  . 0C  . 0B  , .@  !  !   !  "$!  &(!  *,!  .0!  24!  68!  :<!  >@!  BG!" #" #" #"  #" "5#" 7J#$ %$ "%$ $)%  & wr2Sw!!' * RX A A A A AB wr2Sw!!C H? ? ? ? ? ? ? ?8! ! ! ! !* ! ! !! ! ! ! !* ! ! !    *   	! 	! 	! 	! 	!* 	! 	! 	! "3"3"344 $; $; $; < < ttEE"II//: : 0/< < 54
:' ' '@!0 !0 !0H1& 1& 1&h 66*A#B#BCC> > DC>" 66*A#B#BCC= = DC=, , ,^7 7 7.     * 4-88)D%=994-88    98 :9 98     r|   