
p7]c        -  @   s	  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 e j d d d	 d
 d d d d d d g
  Z e j d d d d d d d d g d d d d d d d d g d d d d d d d d g d d  d! d! d" d# d$ d% g d d& d& d
 d' d( d) d& g d d& d& d
 d* d+ d, d& g d	 d& d& d
 d- d+ d, d& g d d& d& d
 d. d+ d, d& g d d& d& d
 d/ d+ d0 d& g d
 d& d& d
 d1 d+ d
 d& g g
  Z d2 d3 d4 d5 d6 d7 d8 d9 d: d; g
 Z i	 d_d2 6d`d3 6dad4 6dbd5 6dcd6 6ddd7 6ded8 6dfd9 6dgd; 6Z e j Z e j dN dO dP dQ dR dS dS dT dU dV dW dX dS dY dT dT dT dT dS dS dS dS dS dS dZ d[ d\ d] d^ d_ dZ d` da db db db dS dS dS dS dS dS dc dc dc dc dc dc e e e e e e d< d< d< d< d< d< g<  j dH dd de df Z e j dg dN dh dO di dj dW dk dl dm dR dY dn do dj dp dq dr ds dt dR du dT dv dn dw dw dw dw dw dR du dT dv dn dm dm dm dm dm dx dy dz d{ d| d} d~ d d d dx d d d d d d d d d dR dR dR dR dR d d d d dm d d d d d d d d d d e e e e e e e e e e di di di di di d d d d d gd  j dd dd de df Z e j 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 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 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 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 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 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 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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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d3d4d5d5d6d7d8d9d:d;d;d;d;d;d<d=d>d>d?d@g, j dAdd de df Z dBe f dC    YZ dDe f dE    YZ  dFe f dG    YZ! dHe f dI    YZ" dJe f dK    YZ# e j$ j% dLdR dj dMg  e j$ j% dNd? dE dC dG dA dOdI dK dPdM dQg  e j$ j% dRe& e' dS   dT     Z( dU  Z) dV  Z* e j$ j% dNe+ e   dW   Z, dX  Z- dY  Z. dZ  Z/ e j$ j% d[e0 e1 g  e j$ j% d\e0 e1 g  e j$ j% d]e0 e1 g  d^     Z2 d S(h  sK  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

iN(   t   assert_almost_equalt   assert_equalt   assert_allclose(   t   multipletestst   fdrcorrectiont   fdrcorrection_twostaget   NullDistributiont	   local_fdrt   multitest_methods_names(   t   tukeyhsd(   t   normgvT?gMvEڌ?gTp}?g~?gWĭ?gIQ?g2gft?gJzI?gÉ1q2?g6㱎?g](A?g h'A?g_!Y?g3}g?gcwWd?g T8g?g 9^d?g3}W?gRp?g#./?g6㱾?gta?gpܛ&!?g/X=?g_̀?g%?gK3*?g(R2?g>?g%?g,c ?g      ?g^q?g&߉4?gIQ?gJ߷?g蝮	?g5?g=G?g?gI?gK?g?t   rawpt
   Bonferronit   Holmt   Hochbergt   SidakSSt   SidakSDt   BHt   BYt   ABHs	   TSBH_0.05i    t   pvali   t   bi   t   hi   t   shi   t   si   t   hsi   t   fdr_ii   t   fdr_ni	   t   fdr_tsbhgMb`?gMbp?g~jtx?gMb?g{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?i
   t   ordert   FgMbP?g~jth?g{Gzt?g?gQ?g{Gz?g
ףp=
?gQ?g{Gz?g      ?g333333?gffffff?g?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?g=%?gH>!?ga?g?g_8	?gB[?gӀ?g)H"?gӑq)?gM?g7g,?gը?gi,}?gki>#l?g*g\?g<΍DÍ?g2?g*k@)?gqϩ?gLǜgK?g.6R[g?g!~?g""_H?g'?gWn?gd7i?g۟?gkQǋ?g`?g:?gDh?g	9JV֡?g5uiuI?gXS8?gSeo?gZf?gYp?g?gQk?gl?g3iU?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?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?gw4?g2o?gix?g2QW{y?g.6R[g?g;Ћ[?gisȪ?gaX9`?ga@Nӱ?g<+?gl?gTl\?gn5?g>?g/roB?g/x⃰?gV)K?gi)~?gBJ?g`s?gݏ?g
%nژ?g8EPz*s?g?a?g R?g lnܿ?gOu?g)0?go%?g6q	?gR16V?gd(b?g,a3l?g{l?g w?gC:Ϣ?gdl_Z?gBu?g4?g9V?g#i?gG<G?g؂),#?g,\?g!xP?g#b!?g ??g1JW$?g>k?g%?g|'Uf?g%Jkq?g	9JVq?gs?|?g'ጄ?gEwB?gvU?g@;?gVs֪?gڽ'?gf;?gM?gwr+?gܟ5?gu?g:y?gb??gjMa?g*?gl~?i   t   CheckMultiTestsMixinc           B   s;   e  Z e j j d  e e j     d    Z d   Z	 RS(   s   key,valc         C   s   |  j  } | d  d   d f } | d |  j k r t | d |  j d | d d  \ } } t | | d  d   | d f d  t | | |  j k  n  d  S(   Ni    i   t   alphat   methodi   i   (   t   res2t   methodsR   R    R    R   (   t   selft   keyt   valt   res_multtestt   pval0t   rejectt	   pvalscorr(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt"   test_multi_pvalcorrection_rmethods   s    			$c         C   s   |  j  } | d  d   d f } t j t | d d d  } t | | d  d   d f d  t j t | d d d  } t | | d  d   d f d  d  S(	   Ni    R!   t   ni   i   i   t   ii   (   R"   t   npt   sortR   R    (   R$   R'   R(   R*   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_multi_pvalcorrection   s    	 (
   t   __name__t
   __module__t   pytestt   markt   parametrizet   sortedt   rmethodst   itemsR+   R0   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR      s   *t   TestMultiTests1c           B   s   e  Z e d     Z RS(   c         C   s4   d d d d d d d g |  _  d |  _ t |  _ d  S(	   NR   R   R   R   R   R   R   g?(   R#   R    t   res_multtest1R"   (   t   cls(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   setup_class   s    	(   R1   R2   t   classmethodR<   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR9      s   t   TestMultiTests2c           B   s   e  Z e d     Z RS(   c         C   s4   d d d d d d d g |  _  d |  _ t |  _ d  S(	   NR   R   R   R   R   R   R   g?(   R#   R    t   res_multtest2R"   (   R;   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR<      s    	(   R1   R2   R=   R<   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR>      s   t   TestMultiTests3c           B   s   e  Z e d     Z RS(   c         C   s7   d d d d d d d d g |  _  d	 |  _ t |  _ d  S(
   NR   R   R   R   R   R   R   R   g?(   R#   R    t
   res0_largeR"   (   R;   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR<      s    	(   R1   R2   R=   R<   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR@      s   t   TestMultiTests4c           B   s   e  Z e d     Z RS(   c         C   s7   d d d d d d d d g |  _  d	 |  _ t |  _ d  S(
   NR   R   R   R   R   R   R   R   g?(   R#   R    t   res_multtest3R"   (   R;   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyR<      s    	(   R1   R2   R=   R<   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyRB      s   R    g?R!   t   hommelt	   fdr_tsbkyt   fdr_gbst   iii   c         C   s   t  j t  j d d |  t  j d d d |  f  } t | d |  d | d  \ } } d	 | |  | j   | | f } t | | |  k d
 | d  S(   Ng-C6?g{Gz?g'$隩?g)\(?i
   R    R!   i   s2   case %s %3.2f rejected:%d
pval_raw=%r
pvalscorr=%rt   err_msg(   R.   t   hstackt   linspaceR   t   sumR   (   R    R!   RG   t   pval1R)   R*   t   msg(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_pvalcorrection_reject  s    c       )   C   sY  t  j 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 d  d! d" d# d$ d% d& d' d( g(  }  t  j d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d4 d5 d6 d7 d8 d8 d8 d8 d8 d8 d( d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 d9 g(  } t |  d: d; d< d= \ } } } } t | | d>  t | | d; k   d  S(?   Ng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?gvۅ?g?g;Tގ?g~jt?gg#U`_?gC9ѮB?gF=D;?g"O|?g͍	K?gNwx?g??g4O?glscz?gbbq?gAo?g^)?gPkw\?gvۅ?R    g?R!   t   hoi   (   R.   t   arrayR   R    R   (   R(   t	   result_hot   rejR*   t   _(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_hommel  s4    													$c          C   s   d d d d d d d d d	 d
 d d d d d g }  t  |  d d d t } t d d g | d d  d  t d | d j    d  S(   Ng-C6?g-C6:?gŏ1w-!_?g~jt?g0*?gPkw?g2%䃞?g"u?g9m4?g#~j?gfc]F?g:M?gZӼ?g}?5^I?g      ?R    g?t   itergu!Va?gQI?ii   i   i   i    (   R   t   FalseR    R   RK   (   t   pvalst   res_tst(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_fdr_bky6  s
    c         C   s   t  j d d d d d d d d d	 d
 g
  d } t  j |  } | j   } | | } t | d |  d t } t | d |  d t } t | d | | d  t | d | | d d d d  S(   Ni   i ibq iK i il  i+v( i9 i&  i8^ gHz>R!   t	   is_sortedi    t   rtolg|=(   R.   RP   t   argsortR   RV   t   TrueR   R   (   R!   RW   t   sortindt
   sortrevindt   pvals_sortedt   res1R"   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_issortedH  s    
c    
      C   s  d }  t  j d d d d g d d d d	 g d
 d d d g d d d d g d d d d g d d d d g d d d d g d d d  d! g d" d# d$ d% g d& d' d( d) g g
  }  d* d+ d, d- d. g } t | d/ d0 d1 d2 d3 d4 } | d/  \ } } } } } } t | |  d  d   d5 f d6 d7 t | |  d  d   d8 d9  f d6 d: t | |  d  d   d9 f d2 k   d: d7 d; d< g }	 t | d= |	 |  |	 d9 f d> d? d  S(@   NsK      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@i   g33333[@R    g?t   dfi   i    t   decimali   i   i   i   i   i	   i   R[   gMbP?(   R.   RP   R	   R    R   R   (
   t   rest   m_rt   myrest   pairsR)   t	   meandiffst	   std_pairst   confintt   q_critt   small_pvals_idx(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_tukeyhsdZ  s*    #)#c          C   s   t  j d d d  }  t j |   } t  j d d d  } t  j | | f  } t  j | d d  t  j d t  j  } t |  t	 t |  t |   } | d | | | :} t
 |  } | t |  } t | | d	 d
 d d d  S(   NgMbP?g+?i  i   i   i   i   i   R[   g?t   atolg?(   R.   RJ   R
   t   ppft   concatenatet   expt   sqrtt   pit   lent   floatR   R   (   t   gridt   z0t   z1t   zst   f1t   rt   fdrt   fdr1(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_local_fdr  s    ,&c          C   s   t  j d d d  }  t j |   } t  j d d d  } t  j | | f  } t | d t } t | j d d	 d
 d d
 t | j	 d d	 d
 d d t | j
 d d	 d
 d d t | j t  j d  t j t  j d d | j d | j	 d d d  S(   NgMbP?g+?i  i   i   i   t   estimate_null_proportioni    Ro   gh㈵>R[   i   g{Gz?g\(\?it   loct   scalegvIh%<=(   ii    i   (   ii    i   (   R.   RJ   R
   Rp   Rq   R   R]   R   t   meant   sdt   null_proportiont   pdft   r_(   Rw   Rx   Ry   Rz   t   emp_null(    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_null_distribution  s    t   estimate_probt   estimate_scalet   estimate_meanc         C   s$  t  j d d d  } t j |  } t  j d d d  } t  j | | f  } t | d |  d | d	 | } |  s t | j d
 d d d d n  | s t | j d d d d d n  | s t | j	 d d d d d n  t | j
 t  j d  t j
 t  j d d | j d | j d d d  S(   NgMbP?g+?i  i   i   i   R   R   R   i    Ro   gh㈵>R[   i   g{Gz?iR   R   gvIh%<=(   ii    i   (   ii    i   (   R.   RJ   R
   Rp   Rq   R   R   R   R   R   R   R   (   R   R   R   Rw   Rx   Ry   Rz   R   (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   test_null_constrained  s"    	(   i    R   (   i   R   (   i   R   (   i   R   (   i   R   (   i   R   (   i   R   (   i   R   (   i	   R   (3   t   __doc__R3   t   numpyR.   t   numpy.testingR    R   R   t   statsmodels.stats.multitestR   R   R   R   R   R   t   statsmodels.stats.multicompR	   t   scipy.stats.distributionsR
   RP   R(   R:   t   res_multtest2_columnsR7   t   nant   NAt   reshapeR?   RC   RA   t   objectR   R9   R>   R@   RB   R4   R5   t   listt   rangeRN   RT   RY   R6   Rb   Rn   R   R   R]   RV   R   (    (    (    sA   lib/python2.7/site-packages/statsmodels/stats/tests/test_multi.pyt   <module>   sf  .										
			3!$!									$6$!																						'						0	 	$	*		