U
    Kvf^                  .  @   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 ddlZddlmZ edd	d
dddddddg
Ze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d0d,d1d'gdd'd'dd2d,dd'gg
Zd3d4d5d6d7d8d9d:d;d<g
Zd=d>d?d@dAdBdCdDdEdF	ZejZedGdHdIdJdKdLdLdMdNdOdPdQdLdRdMdMdMdMdLdLdLdLdLdLdSdTdUdVdWdXdSdYdZd[d[d[dLdLdLdLdLdLd\d\d\d\d\d\eeeeeeddddddg<jd]d^d_d`ZedadGdbdHdcdddPdedfdgdKdRdhdidddjdkdldmdndKdodMdpdhdqdqdqdqdqdKdodMdpdhdgdgdgdgdgdrdsdtdudvdwdxdydzd{drd|d}d~dddddddKdKdKdKdKdddddgddddddddddeeeeeeeeeedcdcdcdcdcdddddgdjd^d^d_d`Zeddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd dddddddddddddd	dd
d
d
d
dddddddddddddddddddddddddddddddddddddddddddd 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d0d1d2d3d4d5d6d6d6d6d6d7d8d9d9d:d;g,jd<d^d_d`Z G d=d> d>Z!G d?d@ d@e!Z"G dAdB dBe!Z#G dCdD dDe!Z$G dEdF dFe!Z%ej&'dGdKdddHgej&'dIdJdKdLdMdNdOdPdQdRdSdTgej&'dUe(e)dVdWdX Z*dYdZ Z+d[d\ Z,d]d^ Z-ej&'dIe.ed_d` Z/ej&'dIe.edadb Z0dcdd Z1dedf Z2dgdh Z3ej&'didjdkgej&'dldjdkgej&'dmdjdkgdndo Z4dS (p  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)versiongvT?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^q?g&߉4?gIQ?gJ߷?g蝮	?g5?g=G?g?gI?gK?g?rawp
BonferroniHolmHochbergSidakSSSidakSDBHBYZABH	TSBH_0.05)r   Z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?r"   
   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?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?r   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~?   c                   @   s2   e Zd Zejdee dd Z	dd Z
dS )CheckMultiTestsMixinzkey,valc                 C   st   | j }|d d df }|d | jkrpt|| j|d dd d \}}t||d d |d f d t||| jk d S )Nr   r   alphamethodr      )res2methodsr   r3   r   r   )selfkeyvalres_multtestpval0reject	pvalscorr r?   F/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/stats/tests/test_multi.py"test_multi_pvalcorrection_rmethods   s    
z7CheckMultiTestsMixin.test_multi_pvalcorrection_rmethodsc                 C   sv   | j }|d d df }tt|ddd }t||d d df d tt|ddd }t||d d df d d S )	Nr   nr4   r   r$   r5   ir"   )r6   npsortr   r   )r8   r;   r<   r>   r?   r?   r@   test_multi_pvalcorrection   s    z.CheckMultiTestsMixin.test_multi_pvalcorrectionN)__name__
__module____qualname__pytestmarkparametrizesortedrmethodsitemsrA   rG   r?   r?   r?   r@   r1      s   
r1   c                   @   s   e Zd Zedd ZdS )TestMultiTests1c                 C   s$   dddddddg| _ d| _t| _d S )	Nr   r   r   r!   r   r#   r%   皙?)r7   r3   res_multtest1r6   clsr?   r?   r@   setup_class   s    zTestMultiTests1.setup_classNrH   rI   rJ   classmethodrV   r?   r?   r?   r@   rQ      s   rQ   c                   @   s   e Zd Zedd ZdS )TestMultiTests2c                 C   s$   dddddddg| _ d| _t| _d S )	Nr   r   r   r!   r   r#   r%   r-   )r7   r3   res_multtest2r6   rT   r?   r?   r@   rV      s    zTestMultiTests2.setup_classNrW   r?   r?   r?   r@   rY      s   rY   c                   @   s   e Zd Zedd ZdS )TestMultiTests3c                 C   s&   ddddddddg| _ d	| _t| _d S 
Nr   r   r   r!   r   r#   r%   r'   r-   )r7   r3   
res0_larger6   rT   r?   r?   r@   rV      s
    zTestMultiTests3.setup_classNrW   r?   r?   r?   r@   r[      s   r[   c                   @   s   e Zd Zedd ZdS )TestMultiTests4c                 C   s&   ddddddddg| _ d	| _t| _d S r\   )r7   r3   res_multtest3r6   rT   r?   r?   r@   rV      s
    zTestMultiTests4.setup_classNrW   r?   r?   r?   r@   r^      s   r^   r3   rR   r4   r   r   r   r!   r   Zhommelr#   r%   	fdr_tsbkyr'   Zfdr_gbsii   c              	   C   sl   t t dd|t ddd| f}t|| |dd d \}}d|| | ||f }t||| k|d	 d S )
N-C6?r(   g'$隩?g)\(?r)   r2   r   z2case %s %3.2f rejected:%d
pval_raw=%r
pvalscorr=%r)err_msg)rE   Zhstacklinspacer   sumr   )r3   r4   ra   Zpval1r=   r>   msgr?   r?   r@   test_pvalcorrection_reject  s     
    rh   c               *   C   s   t ddddddddd	d
dddddd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 d)d*d+d,d-d.d/d0d1d2d3d4d4d5d6d7d8d8d8d8d8d8d(d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9g(}t| 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;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ۅ?rR   Zhor2   r5   )rE   arrayr   r   r   )r<   Z	result_hoZrejr>   _r?   r?   r@   test_hommel  s                                     	                          rl   c                  C   s4  ddddddddd	d
dddddg} t jtdd t| ddd}W 5 Q R X tddg|d d d d td|d   tddddd d!d!d"d#d$d%d&d'd(d)g}t	|d* |d+d, td-d.d/d0d*g} t| dd1d2}t
| dd3d2}t|d |d  t	|d* |d* d+d, td4dd4d5dg}t	|d* |d+d, d S )6Nrc   -C6:?ŏ1w-!_?~jt?0*?Pkw?2%䃞?"u?9m4?#~j?fc]F?:M?爅ZӼ?}?5^I?r   ziter keyword)matchr-   F)r3   itergu!Va?gQI?r   r      r   ga2U0*S?gHPsb?g<,Ԛ}?g?߾?ri   g(0?g58EGr?gGx$(?gq?gp=
ף?gV-?g(\?g*	?gp=
ף?r   giUMu?)atolg?r/   g333333?r.   bkyr2   r`   g333333?g      ?)rK   ZwarnsFutureWarningr   r   r   rf   rE   rj   r   r   )pvalsZres_tstr6   res1Zres_pvr?   r?   r@   test_fdr_bky8  sZ                 
             r   c                  C   s  ddddddddd	d
dddddg} t | }d}t| ddd}t| dd|d d}t| dd|d}t|d |d  t|d |d  d}t| ddd}t| dd|d d}t| dd|d}t| ddd}t|d |d d|d  |    t|d |d  t|d |d  d}d}t| ddd}t| dd|d d}t| dd|d}t|d t|d | dd t|d |d  d}t| ddd}t| dd|d d}t| dd|d}t| ddd}t|d |d d|d  |   |  t|d |d  t|d |d  d S )Nrc   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   r   r   r-   Zfdr_bhr2   Zbh)r3   r4   maxiterr{   r'   )r3   r4   r   r   g?r   r`   )lenr   r   r   rf   rE   Zclip)r   rB   kZres0r   r6   Zres3Zfactr?   r?   r@   test_fdr_twostage\  sl                 

&
 
*r   c                 C   s   t ddddddddd	d
g
d }t |}| }|| }t|| dd}t|| dd}t|d | |d  t|d | |d dd d S )N   i ibq iK i il  i+v( i9 i&  i8^ gHz>F)r4   Z	is_sortedTr   g|=rtol)rE   rj   Zargsortr   r   r   )r4   r   ZsortindZ
sortrevindZpvals_sortedr   r6   r?   r?   r@   test_issorted  s      
r   c                 C   s4   t dd}d|d< t|| dd d dks0td S )Nip  gGz?gw-LQ4r   rC   r   g&y3)rE   fullr   AssertionError)r4   r   r?   r?   r@   test_floating_precision  s    r   c                  C   sP  d} t 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/d0d1d2d3}|d d/ \}}}}}}t|| d d d4f d5d6 t|| d d d7d8f d9d6 t|| d d d8f d1k  d9d5d:d;g}	ttjjtd<k}
|
r*d=nd>}t|d? |	 | |	d8f |d@ d S )ANaK      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@r"   gH	Դ[@r-   r   )r3   Zdfr   r    )decimalr   r   r   r$   r&   z1.7.0h㈵>r(   r}   r   )	rE   rj   r   r   r   r   parsescipyr   )resZm_rZmyrespairsr=   Z	meandiffsZ	std_pairsZconfintZq_critZsmall_pvals_idxZscipy_versionr   r?   r?   r@   test_tukeyhsd  s6    









r   c            	      C   s   t ddd} t| }t ddd}t ||f}t |d  d t dt j  }t|t	t|t|  }|d| | |  }d	D ]B}|d krt
|}nt
||d
}|t|d  }t||ddd qd S )Nr,   +?  r   r      r   r   )Nr   g:0yE>)r3   r-   rR   )r   r~   )rE   re   r   ppfconcatenateexpsqrtpir   floatr	   r   )	gridz0z1zsf1rr3   ZfdrZfdr1r?   r?   r@   test_local_fdr  s    
$
r   c                  C   s   t ddd} t| }t ddd}t ||f}t|dd}t|jd	d
d
d t|jdd
dd t|j	dd
dd t|
t jd tj
t jd |j|jddd d S )Nr,   r   r   r   r   r   T)estimate_null_proportionr   r   r~   r   r   r(   g\(\?r|   r   r   locZscalevIh%<=r   rE   re   r   r   r   r   r   ZmeansdZnull_proportionZpdfZr_)r   r   r   r   emp_nullr?   r?   r@   test_null_distribution  s    
 r   estimate_probTFestimate_scaleestimate_meanc                 C   s   t ddd}t|}t ddd}t ||f}t|| ||d}| sZt|jdd	d	d
 |spt|jdd	dd
 |st|j	dd	dd
 t|
t jd tj
t jd |j|jddd d S )Nr,   r   r   r   r   r   )r   r   r   r   r   r   r   r(   r   r   r   r   r   )r   r   r   r   r   r   r   r   r?   r?   r@   test_null_constrained  s(    
r   )5__doc__rK   ZnumpyrE   Znumpy.testingr   r   r   Zstatsmodels.stats.multitestr   r   r   r   r	   r
   Zstatsmodels.stats.multicompr   Zscipy.stats.distributionsr   r   	packagingr   rj   r<   rS   Zres_multtest2_columnsrO   nanZNAZreshaperZ   r_   r]   r1   rQ   rY   r[   r^   rL   rM   listrangerh   rl   r   r   rN   r   r   r   r   r   r   r?   r?   r?   r@   <module>   s                                        ,                                                            	                                                                                                                                                                                                                                                                                                                                  A  D		"    $4/