
    !g^                     p   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j6                  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      j;                  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      j;                  d5d5d67      Z ej,                  g dg      j;                  dhd5d67      Z  G di dj      Z! G dk dle!      Z" G dm dne!      Z# G do dpe!      Z$ G dq dre!      Z%ejL                  jO                  dsg dt      ejL                  jO                  dug dv      ejL                  jO                  dw e( e)dx                  dy                      Z*dz Z+d{ Z,d| Z-ejL                  jO                  du e.e            d}        Z/ejL                  jO                  du e.e            d~        Z0d Z1d Z2d Z3ejL                  jO                  dddg      ejL                  jO                  dddg      ejL                  jO                  dddg      d                      Z4y)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                  j                  d eej                                     d        Z	d Z
y)CheckMultiTestsMixinzkey,valc                     | j                   }|d d df   }|d   | j                  v rRt        || j                  |d         d d \  }}t	        ||d d |d   f   d       t        ||| j                  k         y y )Nr   r,   alphamethodr.      )res2methodsr   rn   r   r   )selfkeyvalres_multtestpval0reject	pvalscorrs          _/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/stats/tests/test_multi.py"test_multi_pvalcorrection_rmethodsz7CheckMultiTestsMixin.test_multi_pvalcorrection_rmethods   s     yyQT"q6T\\! -e48JJ58V!==?a!AFI  	<3q6	+BBGdjj!8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       y )	Nr   nro   r,   r8   rp   ir6   )rq   npsortr   r   )rs   rv   rw   ry   s       rz   test_multi_pvalcorrectionz.CheckMultiTestsMixin.test_multi_pvalcorrection   sy     yyQT"GGM%<Q?@	I|AqD'92>GGM%<Q?@	I|AqD'92>r|   N)__name__
__module____qualname__pytestmarkparametrizesortedrmethodsitemsr{   r    r|   rz   rk   rk      s7    [[Yx~~/?(@A: B:	?r|   rk   c                       e Zd Zed        Zy)TestMultiTests1c                 :    g d| _         d| _        t        | _        y )Nr-   r3   r1   r5   r/   r7   r9   皙?)rr   rn   res_multtest1rq   clss    rz   setup_classzTestMultiTests1.setup_class   s    C	 r|   Nr   r   r   classmethodr   r   r|   rz   r   r      s    ! !r|   r   c                       e Zd Zed        Zy)TestMultiTests2c                 :    g d| _         d| _        t        | _        y )Nr   rA   )rr   rn   res_multtest2rq   r   s    rz   r   zTestMultiTests2.setup_class   s    C	 r|   Nr   r   r|   rz   r   r      s    ! !r|   r   c                       e Zd Zed        Zy)TestMultiTests3c                 :    g d| _         d| _        t        | _        y 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y)TestMultiTests4c                 :    g d| _         d| _        t        | _        y 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|| |j	                         ||fz  }t        ||| k  |	       y )
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     IIr{{6626{{7D"r':< =E &e5-3557a9FI AUFJJL%DD DCe+S9r|   c                      t        j                  g d      } t        j                  g d      }t        | dd      \  }}}}t        ||d       t	        ||dk         y )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]    HH / 0E   I  )c$GCAq	9b1i#o&r|   c                  >   g d} t        j                  t        d      5  t        | dd      }d d d        t	        ddgd	   d d
 d       t        d|d   j                                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       y # 1 sw Y   xY w)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	   7E 
m>	: H(dGH6*GBKOQ?GAJNN$% 88 
 D GAJ40 HH,-E!%tEBDd;?Da$q'"DGT!W40XX67FDGV$/)H Hs   DDc                     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   j	                         |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   j	                         |z  z
  z  |z         t        |d
   |d
          t        |d
   |d
          y )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   7E 	E
A 	
Ad8<D!%tD!'+-Dd:qIDDGT!W%DGT!W%	Ad8<D!%tD!'+-Dd:qIDd:>DDGT!WDGKKMA,=(=>?DGT!W%DGT!W% D	Ad8<D!%tE1'+-Dd;JDDGRWWT!Wt^Q:;DGT!W%	Ad8<D!%tE1'+-Dd;JDd;?DDGT!WDGKKMA,=(=>EFDGT!W%DGT!W%r|   c                    t        j                  g d      dz  }t        j                  |      }|j                         }||   }t        || d      }t        || d      }t	        |d   |   |d          t        |d   |   |d   d       y )	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     HH - .045EjjG"J>Lv?DfEDa$d1g.DGJ'au=r|   c                 j    t        j                  dd      }d|d<   t        ||       d   d   dkD  sJ y )Nip  gGz?gw-LQ4r   r   r,   g&y3)r   fullr   )ro   r   s     rz   test_floating_precisionr     s<     GGD$EE!Hv.q1!4u<<<r|   c                     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   |       y )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998999989
; 
<C ACS!^4A>E;@!98E69i&	3q!t9a8Q!Va8QTT)* #O ]]5==#8#89]]7+,M 4dDE!H_-s?A3E/Fr|   c                  0   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 ]:  }|t        |      }nt        ||
      }|t        |      d  }t        ||dd       < y )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
	bggag.	.BB%B#b')**A1q5B,
B 7=B-CBe,C3r78}Dt#6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        |j                  t         j                  d         t        j                  t         j                  d   |j                  |j                        d       y )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BHHMM14d;HKKD9H,,dDI HLLx1HHRUU8_!)hkkC r|   estimate_probTFestimate_scaleestimate_meanc                 J   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        |j                  t         j                  d         t        j                  t         j                  d   |j                  |j                        d       y )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!    s     ;;ueT*D	$B	Q2	B	R	!B-/=9FHH qt$?QT=00!$TJ HLLx1HHRUU8_(--#+;;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/     s    , ,M M 1 *   : 	;
 7777777777K(8 (9V$ 
 

 
 VV 	
				!%	',	.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!' * RXX A AB wr2Sw!C H? ?8!* !!* !* 	!* 	! "34 $; < tE"I/: 0< 5
:'@!0H1&h 6*A#BC> D>" 6*A#BC= D=,^7. * 4-8)D%=94-8  9 : 9 r|   