U
    ÃmœdÁ^  ã                .  @   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d€d€d€d€d€dKdKdKdKdKd�d‚dƒd„dgd…d…d…d…d…d†d‡dˆd‰dŠeeeeeeeeeedcdcdcdcdcd‹dŒd�dŽd�gd¡jd^d^d_d`�Ze d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�dždŸd d¡d¢d£d¤d¥d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d»d»d»d»d»d»d»d»d»d»d»d»d»d»d»d»d®d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉd»d»d»d»d»d»d»d»d»d»d»d»d»d»d»d®d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉd­d­d­d­d­d­d­d­d­d­d­d­d­d­d­dÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÔdÕdÖd×dØdÙdÚdÛdÜdÝdÞdßdàdádâdãd»d»d»d»dÊdädådædçdèdédêdëdìdídîdïdðdñdòdódôdõdödödödödödödödödödödöd÷d÷d÷d÷dødødùdúdûdüdýdþdÿdÿ�d �d�d�d�d�d�d�d�d�d�d�d�d�d�d	d­�d
�d
�d
�d
�d�d�d�d�d�d�d�d�d�d�d�dd»d»d»d»d»d»d»d»d»d»d»d»d»d»�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd �d �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)ÚversiongÊv¿´TÕê?gMvŒEÚŒä?gæTÖp}Éå?gÕë£~øî?gÏWŽÄ­ëæ?gIQê«Æ?gþ2güft?gJzI„Â”?gÊÃ‰1q2?gâÿŸ6ã±Ž?gßÀ]À(A?g ÌÊh·'A?g”ÂÙ_!Y?güÙ3ì}g?gcwûºW¿d?g  T8g?g ƒ‘9^¹d?güÙ3ì}W?g…ô‘Ráp?gíÿ#./Ã?gâÿŸ6ã±¾?gtœaû×ðÁ?gpÜ›&Ð!½?gçÿ/X=”©?g_œÍ€åºÂ?gÜØ%óÉ?gKà‰3*Â?g(R2î¸´Ç?gˆ…>ë½Á?gÜØ%ó©?g‰,Øc Ã?ç      ð?g‰^¾�…që?g&ß‰±4æ?gIQê«Ö?gJß·ÿï?gè�®	õÏï?gÃí±5™¦ì?gÚ=Géÿï?gÇÚÄèøÿï?gœI‰ùÿÿï?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   gü©ñÒMb`?gü©ñÒMbp?gú~j¼t“x?gü©ñÒMb€?ç{®Gáz„?gú~j¼t“ˆ?gú~j¼t“˜?g;ßO�—n¢?gú~j¼t“¨?g¸…ëQ¸®?g;ßO�—n²?g{®Gáz”?gC¬ntˆ?gÁÞ-@àT˜?g Ò�v`(¢?gPö¨?g0¡úXPö­?g êƒdGã±?g Á¹Q”?g?jÐ[˜?g- 1Ba˜?g%ušž?r"   é
   ÚF)Úorderçü©ñÒMbP?gú~j¼t“h?g{®Gázt?çš™™™™™©?gìQ¸…ë±?g{®Gáz´?g
×£p=
·?g¸…ëQ¸ž?g{®Gáz¤?ç      à?g333333ã?gffffffæ?çš™™™™™é?gÍÌÌÌÌÌì?g;ßO�—n’?gyé&1¬œ?g      Ð?gCGj�Yc„?gß³PâñK”?g¿± ÿNž?gïÂâý�¤?gÁ«‚Í©?gúÄBK®Ù?g·0õxT‡Ý?g`PZ‰7ƒà?g(/kb}â?gô·„5ç‰ã?g¡ÆtÖI’?gŸÛ*dÊQ˜?g¡QsV‰Tœ?gAq‚=«Vž?gûª•	¿ôÌ?gVUUUUUµ?g_ñ_ñµ?gffffff¶?glÁlÁ¶?gšþxRþ�?gß³è5	>Ï?gŠÑÀ�FÐ?g<+	øfÐ?gUÆ&ƒž©Ð?g6d~ðÞÐ?gVUUUUU¥?g_ñ_ñ¥?gffffff¦?glÁlÁ¦?g
×£p=
§?gÇÅÅ�·4?gmÆiˆ*ü9?g-º8¿??g^°D5_A?g%°ÁˆžP?g.ƒœ½TèS?gL¸¡sÈW?g~$ÌÃe?gçüVãS�q?gà›ÇÝ÷Ú‘?g…§¡WM•?ghÍn±Ë…œ?g¥ÝM¦À ?g_äL°‹ä¡?glœ‡ò‰¥?g¼üóÙ¦´?gÓ´ç‘Î?g™™Ò=%Ò?gì÷åH>!×?ga�ž¶áÛ?gÒ¥ø¶Ü?g–_£8	Ý?gœB[Œ‰æÞ?g”óÓ€ß?g)H¦"™¾á?gÓ‘q)Ýã?gM§¯Æýæ?g7Ågü,ç?g³¡Õ¨�ë?gi,Ì�}ì?gkiÉ>#lƒ?g*ãßg\ˆ?g<ŠÎ�DÃ�?g±Êàƒ2è�?g†*k@)Ÿ?gûºÂqÏ©¢?gLÇœgìK¦?g.6R[�g´?g�!¥~ƒÀ?g""ë_H½à?gÃ�'‚øã?g’àWön½ê?gõdþÑ7iï?r   gÓÛŸ‹†Œ‡?gkçâQÇ‹?gŸéã©`·Œ?gü¾:ž›?gøŒDhŸ?g	9J¹VÖ¡?g5uäiuI¯?g¾›—XS8¸?g—üSeo×?gZfŠ­ Ú?göÉYñpïà?gú¢˜»Øâ?g¥²QkÔã?glœ‡ò‰å?gÀð3îiUƒ?g@-¨õ®8ˆ?g�/�”ý��?gEþšüª�?g £µž?g°Ç±v”V¢?gÐ.ÑdÕ¥?gËZ¹v:£³?g¥@
T¿?g¿SI>Ú?g˜)r‰ØïÝ?g¬š´ÊIâ?gË]0�U4ä?gí(óþä?gÓ¢r
ˆ/ç?gÒÈoí?gßÒâd¸ýï?g=z€¡ÿï?gà3µýüÿï?g}íÿÿï?gaTžöÿÿï?g÷°Þøÿÿï?gˆZŸþÿÿï?g,Í4ÿÿÿï?g£ýûÿÿÿï?gÍ÷ÿÿÿÿï?gA‚L*.k‡?g½¡n™‹?g‚Ÿö…Œ?g_ ªªš?g_`˜.ü§ž?gßò©•êŠ¡?g!bä(­c®?g›Ö7(·?gFž>bCÄÓ?gžvë�½÷Õ?g¸‡ù0•Ú?g|Ÿ©²‰ÕÜ?gýŸ#§
Ý?gþ¶mÉæÒß?g`4Þ„-ðæ?gØ3¿ÀvLï?gÐL¬˜”ï?g”O¥RÚï?gwü4œÙðï?g±Êàƒ2èo?gù£íiâx?g2¿×QW{y?g.6R[�g„?gƒ¥;Ð‹[�?gÑi«ÌsÈª?gaX‡9`­?ga@åNŸÓ±?gŠ«ä<º+³?glœ‡ò‰µ?g·ð¼Tl\Ã?günÛ5ùÚ?gªª†³>Þ?g†/roªBâ?g½/xâƒ°ã?g—V”)Kå?gi)–~ëæ?gßBœJÅÔè?g¨`–×sì?g»ÐéöõÝ�?gž
‰%nÚ˜?g8EPz*s™?g¤?êƒa¤?g¦õ¦ R­?g lnÜ¿Ê?gOâ­uÍ?g)»0çÍÑ?go×¹“%Ó?gì6q†	ƒÕ?g´R�16Vã?gdû˜(¥b?g,óaÍ3l?g{¥²ál?gðÅöÞ w?gØîC:Ï¢€?gdïl_¥Zž?g¡»Bòu ?g€Ñó4¤?gà9Vº¥?gŒœï#i¨?gGˆ<“Gñµ?gØ‚ÿ),#Ñ?g¹,\ô±Ô?g´Ï!x•PÖ?g#bìûî!Ø?g «?»ÓùÙ?g1²JW$Ü?g>®Ìk‚à?gÉÑ%à?g|'êõ¼Uf?gÈòè%Jkq?g	9J¹VÖq?gså?æû�|?g'�ÞáŒ„?gEýwB„¿¢?g«Š«ŽvU¤?g»ó@;õ¨?g�VsˆÑÖª?g£ýÚ½†'®?gf·;þ»?g²Mó²¥áÒ?gÝÝwÊr+Õ?gÜŸ5ˆ�Ù?g¢u£¸�Û?g:yœ �ÏÝ?gb¶?à?gjÈÓM½aá?gªÏ*°êã?gãëŽl~ñã?é   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?   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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?g±3…Îkì‚?gj¼t“†?g!YÀn�?gj>"¦D’?g‡ùòì£“?g–x@Ù”+œ?g¼ËE|'f�?g½á´àEŸ?gÊ7ÛÜ˜ž ?g®õEB[Î¥?g¶J°8œ±?gTR' ‰°±?g”0Óö¯´?g¬Ê¾+‚ÿµ?gKåí§·?g,g~5¸?gñFæ‘?¸?g�EÓÙÉà¸?gÐa¾¼ û¸?gCÅ8
¹?g·îæ©¹?gªš ê> Á?gG ^×/ØÉ?g·œKqUÙË?gßlsczÂÎ?g­À�Õ­Ð?gqZð¢¯ Ñ?g°¬4)ÝÒ?g<¥ƒõÕ?gØG§®|Ú?gÓÙÉà(yà?g(ò$éšÉà?g„*5{ á?gçoB!â?gØ¶(³A&ä?g)Ý^Òç?gZ‰{,}ç?g„õóåë?g„»³vÛ…î?çàœ¥½Á§?g;�´TÞŽÐ?gú~j¼t“Ò?gg#U×`_Ö?gC9Ñ®BÚ?g²F=D£;Ü?g"O’®™|â?g³Í�é	Kã?gìNwžxÎã?g¼?Æä?gä4ôO°ç?gßlsczÂë?g¨Ëbbóqì?g‚§Aoµì?gž^)ËÇì?g°Pkšw\í?g…»³vÛ…î?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-!_?çÛù~j¼tƒ?ç¾0™*•”?çò°Pkšwœ?ç2æ®%äƒž?ç"ýöuàœ¡?ç9ÖÅm4€§?ç#Ûù~j¼Ô?çfˆc]ÜFÛ?ç£’:Mâ?çˆ…ZÓ¼ãä?ç}?5^ºIè?r   ziter keyword)Úmatchr-   F)r3   Úitergu!V„a¨?g“©‚QI�°?éÿÿÿÿr   r   é   r   ga2U0*©S?gHPüs×b?gŸ<,Ôšæ}?gæ?¤ß¾œ?ri   g�(í¾0©?g5ï8EGr©?gGx$(®?gÞqŠŽäò×?g¤p=
×£Ü?gV-²�á?g�Âõ(\�â?g™*•Ô	ä?g¤p=
×£è?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ßò— i¢bq iK„ i÷ó– il  i+v( i¬9 iË&  i8^ gH¯¼šò×z>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  g®Gáz®ï?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
    gÍÌÌÌÌL @g-“áx>$Àg�ë
lV:@gÓ:ø)qå?gÒSä
Àg?ªa¿'r5Àg|pˆÇÛ-@g:#uûoï?gGWéîÎ7@gF\ ¥{@gÙ9rIzÿD@gÜ°ß9É{?g,J	Áª*@gäº)åµÊ*ÀgN°ú6@gæ»Á;ìÊí?gQÁáÑ&Àg¥È%Ž˜=Àg_Gwkô@g†yaûa×?gQÁáQ/@g§z2ÿè;Àg¦?Gì@@gkÌ:Ïü¼?gÜž ±ÝÝ
ÀgÙCûXÁ‹5ÀgI=UÏ“¨-@g8d‡!_ï?gñ¸¨;@gè£çÂ!@g¹µ;Z‹ F@gu=Ö.›`?gš™™™™ @gaÆ¬qF$Àgô{QqÒ<:@gUëUHÁå?g%ìÛID3ÀgŽYö$šBÀgð×	Ô‡ê¿g ãk»N£?gÂ4™W@g[Î¥¸ª¢Y@gØd�zˆÈV@gÍÌÌÌÌŒ]@g˜À­»ËX@r"   gÝÎH	Ô´[@r-   r   )r3   Zdfr   r    )Údecimalr   r   r   r$   r&   z1.7.0çñhãˆµøä>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r¢t
|ƒ}nt
||d
�}|t|ƒd … }t||ddd� qŒd S )Nr,   ç+‡ÙÎ÷ï?éè  r   r   é   r   r   )Nr   g:Œ0âŽyE>)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   ©ÚlocÚscaleç‚vIhÂ%<=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
� |s†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˜   )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   Ú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/