U
    Ãmœdµo  ã                   @   s  d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZ ddlZddlm  mZ ddlmZ ddlmZ zddlmZ W n ek
r’   Y nX G dd„ dƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%d d!„ Z&G d"d#„ d#eƒZ'G d$d%„ d%eƒZ(G d&d'„ d'eƒZ)G d(d)„ d)eƒZ*G d*d+„ d+eƒZ+d,d-„ Z,G d.d/„ d/eƒZ-G d0d1„ d1eƒZ.G d2d3„ d3eƒZ/d4d5„ Z0ej1j2d6d7d8�d9d:„ ƒZ3d;d<„ Z4dS )=zžTests for statistical power calculations

Note:
    tests for chisquare power are in test_gof.py

Created on Sat Mar 09 08:44:49 2013

Author: Josef Perktold
é    N)Úassert_almost_equalÚassert_allcloseÚassert_raisesÚassert_equalÚassert_warnsÚassert_array_equal)ÚHolder)ÚHypothesisTestWarningc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zejjdd„ ƒZ	d	S )
ÚCheckPowerMixinc                 C   sZ   t   | j¡}|d= | | j¡ t| dƒr0| j}nd}|  ¡ }t|jf |Ž| j	j|d� d S )NÚpowerÚdecimalé   ©r   )
ÚcopyÚkwdsÚupdateÚ
kwds_extraÚhasattrr   Úclsr   r   Úres2)Úselfr   r   Úres1© r   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/stats/tests/test_power.pyÚ
test_power    s    
zCheckPowerMixin.test_powerc                    sœ   |   ¡ }t | j¡‰ ˆ d= ˆ  | j¡ t| dƒr8| j}ndˆ krDdnd}d|dg}‡ fdd„|D ƒ}t| d	ƒrv| j}nd
}|j|ˆ Ž}t	|| j
j|d� d S )Nr   Ú
args_namesÚnobsÚnobs1Úeffect_sizeÚalphac                    s   g | ]}ˆ   |¡‘qS r   )Úpop©Ú.0Úarg©r   r   r   Ú
<listcomp>>   s     z3CheckPowerMixin.test_positional.<locals>.<listcomp>r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   Znobs_Úargsr   Úresr   r$   r   Útest_positional-   s    


zCheckPowerMixin.test_positionalc                 C   sd   t   | j¡}| | j¡ | jD ]@}|| }d ||< |  ¡ jf |Ž}t||d|d d� |||< qd S )Ngü©ñÒMbP?z failed)ZrtolÚerr_msg)r   r   r   r   r   Úsolve_powerr   )r   r   ÚkeyÚvalueÚresultr   r   r   Ú
test_rootsH   s    
zCheckPowerMixin.test_rootsc                 C   s¼   | j tjtjfkrt d¡ t ¡ }| ddd¡}|   ¡ j	f dt
 dd¡t
 dddd	dg¡|d
dœ| j—Ž}| ddd¡}|   ¡ j	f dt
 ddddddg¡t
 ddd¡|ddœ| j—Ž d S )Nzskip FTestPower plot_poweré   é   r   éd   çš™™™™™¹?çš™™™™™É?ç333333Ó?ç      à?zPower of t-Test)Zdep_varr   r   ÚaxÚtitleÚesé
   é   é   é2   éF   ç{®Gáz„?é3   Ú )r   ÚsmpÚ
FTestPowerÚFTestPowerF2ÚpytestÚskipÚpltZfigureZadd_subplotZ
plot_powerÚnpZarangeÚarrayr   Zlinspace)r   Zclose_figuresZfigr6   r   r   r   Útest_power_plotY   s*    

 üû üûzCheckPowerMixin.test_power_plotN)
Ú__name__Ú
__module__Ú__qualname__r   r(   r.   rD   ÚmarkZ
matplotlibrI   r   r   r   r   r
      s
   r
   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS1c                 C   s`   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	i | _
tj| _d S )	Nr;   r0   çš™™™™™©?g4ÒÎlüï?ú	two.sidedÚNULLú#One-sample t test power calculation©r   r   r   r   ©r   ÚnÚdÚ	sig_levelr   ÚalternativeÚnoteÚmethodr   r   r   rA   Z
TTestPowerr   ©r   r   r   r   r   Úsetup_class|   s     ÿzTestTTPowerOneS1.setup_classN©rJ   rK   rL   Úclassmethodr\   r   r   r   r   rN   z   s   rN   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS2c                 C   s`   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	i | _
tj| _d S )	Nr:   r3   rO   gOÓøgÁ?rP   rQ   rR   rS   rT   r[   r   r   r   r\   “   s     ÿzTestTTPowerOneS2.setup_classNr]   r   r   r   r   r_   �   s   r_   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS3c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	d
i| _
tj| _d S )Nr;   r0   rO   g¹“k‡ÿï?ÚgreaterrQ   rR   rS   rX   ÚlargerrT   r[   r   r   r   r\   ©   s     ÿ
zTestTTPowerOneS3.setup_classNr]   r   r   r   r   r`   §   s   r`   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS4c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	dd	i| _
tj| _d S )
Nr:   rO   gwï®oÆ”³?ra   rQ   rR   rS   rX   rb   rT   r[   r   r   r   r\   ¿   s     ÿ
zTestTTPowerOneS4.setup_classNr]   r   r   r   r   rc   ½   s   rc   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS5c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	d
i| _
tj| _d S )Nr:   r3   rO   g ùæ‡~Öx?ÚlessrQ   rR   rS   rX   ÚsmallerrT   r[   r   r   r   r\   Ö   s     ÿ
zTestTTPowerOneS5.setup_classNr]   r   r   r   r   rd   Ó   s   rd   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerOneS6c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	d
i| _
tj| _d S )Nr:   gš™™™™™É¿rO   g%í›ÉË?re   rQ   rR   rS   rX   rf   rT   r[   r   r   r   r\   í   s     ÿ
zTestTTPowerOneS6.setup_classNr]   r   r   r   r   rg   ê   s   rg   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS1c                 C   sb   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jddœ| _	i | _
tj| _d S )	Nr;   r0   rO   g?'Ow÷î?rP   ún is number in *each* groupú#Two-sample t test power calculation©r   r   r   r   Úratio©r   rU   rV   rW   r   rX   rY   rZ   r   r   r   rA   ÚTTestIndPowerr   r[   r   r   r   r\     s       ÿzTestTTPowerTwoS1.setup_classNr]   r   r   r   r   rh     s   rh   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS2c                 C   sb   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdd	œ| _	i | _
tj| _d S )
Nr:   r2   rO   g€|�Í6¯?rP   ri   rj   r0   rk   rm   r[   r   r   r   r\     s       ÿzTestTTPowerTwoS2.setup_classNr]   r   r   r   r   ro     s   ro   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS3c                 C   sf   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jddœ| _	d	d
i| _
tj| _d S )Nr;   r0   rO   gE¥Ââˆï?ra   ri   rj   rk   rX   rb   rm   r[   r   r   r   r\   0  s       ÿ
zTestTTPowerTwoS3.setup_classNr]   r   r   r   r   rp   .  s   rp   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS4c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	d
i| _
tj| _d S )Nr;   r>   rO   g}üB_—¯«?ra   ri   rj   ©r   r   r   r   rX   rb   rm   r[   r   r   r   r\   G  s     ÿ
zTestTTPowerTwoS4.setup_classNr]   r   r   r   r   rq   D  s   rq   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS5c                 C   sf   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdd	œ| _	d
di| _
tj| _d S )Nr:   r;   r2   rO   gèÛ§÷4°?rP   út test power calculationç      ø?rk   rX   z	two-sided©r   Zn1Zn2rV   rW   r   rX   rZ   r   r   r   rA   rn   r   r[   r   r   r   r\   ^  s       ÿ
zTestTTPowerTwoS5.setup_classNr]   r   r   r   r   rs   [  s   rs   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTTPowerTwoS6c                 C   sf   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdd	œ| _	d
di| _
tj| _d S )Nr:   r;   r2   rO   g ºSê¢¸?ra   rt   ru   rk   rX   rb   rv   r[   r   r   r   r\   u  s       ÿ
zTestTTPowerTwoS6.setup_classNr]   r   r   r   r   rw   r  s   rw   c            
      C   sð   d} d}d}d}t  ||d d¡}t  ¡  ||d¡}t  ¡ jdddd d�}d}t||dd	� t||dd	� t||dd	� t  d
|d d¡}d}	t||	dd	� t  ¡ jd|ddd�}d}	t||	dd	� t  ¡ jd
|ddd�}d}	t||	dd	� d S )Nr0   r4   éP   rO   g       @rr   çkGZ{hÞ?é   r   g{®Gáz„¿g—ä”¬Õ©?é   r>   rb   )rX   gJyÖð ­?ç›Þ7!n¦?)rA   Znormal_powerÚNormalIndPowerr   r*   r   )
ÚsigmarV   r   r   r   r   Zres3Zres_RZnorm_powZ
norm_pow_Rr   r   r   Útest_normal_power_explicit‹  s0    ÿÿr   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNormalIndPower1c                 C   sb   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdd	œ| _	i | _
tj| _d S )
Nrx   r4   rO   ry   rP   rQ   útwo sample power calculationr0   rk   ©r   rU   rV   rW   r   rX   rY   rZ   r   r   r   rA   r}   r   r[   r   r   r   r\   ¯  s       ÿzTestNormalIndPower1.setup_classNr]   r   r   r   r   r€   ­  s   r€   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNormalIndPower2c                 C   sf   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdd	œ| _	d
di| _
tj| _d S )Nr>   rx   rO   r|   re   z]Difference of proportion power calculation for binomial distribution (arcsine transformation)zsame sample sizesr0   rk   rX   rf   )r   ÚhrU   rW   r   rX   rZ   rY   r   r   r   rA   r}   r   r[   r   r   r   r\   Ä  s       ÿ
zTestNormalIndPower2.setup_classNr]   r   r   r   r   rƒ   Â  s   rƒ   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNormalIndPower_onesamp1c                 C   sd   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	d
i| _
tj| _d S )Né(   r4   rO   ry   rP   rQ   r�   rr   rl   r   r‚   r[   r   r   r   r\   Û  s     ÿ
z'TestNormalIndPower_onesamp1.setup_classNr]   r   r   r   r   r…   Ù  s   r…   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNormalIndPower_onesamp2c                 C   s`   t ƒ }d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _dd	d
œ| _	t
j| _d S )Nr>   r†   rO   r|   re   zBMean power calculation for normal distribution with known variancerr   r   rf   )rl   rX   )r   rV   rU   rW   r   rX   rZ   r   r   r   rA   r}   r   r[   r   r   r   r\   ô  s     ÿz'TestNormalIndPower_onesamp2.setup_classNr]   r   r   r   r   r‡   ñ  s   r‡   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestChisquarePowerc                 C   sj   t ƒ }d|_d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _	d	|jd
 i| _
tj| _d S )Nr2   é   é   rO   gÞ¢}ÎáÜª?zChi squared power calculationzN is the number of observationsrS   Ún_binsr0   )r   ÚwÚNZdfrW   r   rZ   rY   r   r   r   rA   ZGofChisquarePowerr   r[   r   r   r   r\     s     ÿzTestChisquarePower.setup_classc                    sv   |   ¡ }ddddg}t | j¡‰ ˆ d= ˆ  | j¡ ‡ fdd„|D ƒ}t| dƒrV| j}nd	}t|j|Ž | j	j|d
� d S )Nr   r   r   r‹   r   c                    s   g | ]}ˆ | ‘qS r   r   r!   r$   r   r   r%   )  s     z6TestChisquarePower.test_positional.<locals>.<listcomp>r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r&   r   r   r$   r   r(   "  s    
z"TestChisquarePower.test_positionalN)rJ   rK   rL   r^   r\   r(   r   r   r   r   rˆ     s   
rˆ   c                  C   sv  dD ]4} t  dd| ¡}t jddd| dd�}t||dd	� qt jd
dddd�}d}t||dd	� tƒ }d|_d|_d|_d|_	d|_
d|_t jt |j¡|j|j|j	dd�}t||j
dd	� tƒ }d|_d|_d|_d|_	d|_
d|_t jt |j¡|j|j|j	dd�}t||j
dd	� tƒ }d|_d|_d|_d|_	d|_
d|_t jt |j¡|j|j|j	dd�}t||j
dd	� d S )N)r>   rO   r2   r3   r5   r>   éÈ   éÇ   r0   r   )r   Znccr   r   ç      Ð?ç8øÂdª`Ä?r9   )Úk_groupsçòAÏfÕçê?rŠ   r‰   g\Á…ÃL©?ú%Multiple regression power calculationç
×£p=
·?gd�)¹~é?é   r2   çÅŒh,]#Î?)rA   Zttest_powerZftest_powerr   Zftest_anova_powerr   ÚuÚvÚf2rW   r   rZ   rG   Úsqrt)r   Zres0r   r   r   r   r   Útest_ftest_power2  sV     ÿ ÿ ÿrœ   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestFtestAnovaPowerc                 C   sf   t ƒ }d|_d|_d|_d|_d|_d|_|| _|j|j|j|jdœ| _d|ji| _	t
j| _d	| _d S )
Nr�   rŽ   r9   r‘   r“   r”   rS   r’   rŠ   )r   ÚfrU   Úkr   r   rZ   r   r   r   rA   ZFTestAnovaPowerr   r   r[   r   r   r   r\   x  s     ÿzTestFtestAnovaPower.setup_classNr]   r   r   r   r   r�   v  s   r�   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestFtestPowerc                 C   sx   t ƒ }d|_d|_d|_d|_d|_d|_|| _t 	|j¡|j|j|j|jdœ| _
i | _dd	d
dg| _tj| _d| _d S ©Nr‰   r–   r•   r2   r—   r”   )r   Údf_numÚdf_denomr   r   r   r¢   r£   r   )r   r˜   r™   rš   rW   r   rZ   r   rG   r›   r   r   r   rA   rB   r   r   r[   r   r   r   r\   ›  s"     þzTestFtestPower.setup_classc              	   C   s`   t  t¡� t ¡ jddddd d� W 5 Q R X t  t¡� t ¡ jdddddd� W 5 Q R X d S )Nr4   r2   çÍÌÌÌÌÌì?r/   )r   r   r   r£   r   é   )r   r   r   r£   Zjunk)rD   ÚwarnsÚUserWarningrA   rB   r*   ÚraisesÚ
ValueError)r   r   r   r   Útest_kwargs³  s        þ   þzTestFtestPower.test_kwargsN)rJ   rK   rL   r^   r\   rª   r   r   r   r   r    ™  s   
r    c                   @   s   e Zd Zedd„ ƒZdS )ÚTestFtestPowerF2c                 C   sr   t ƒ }d|_d|_d|_d|_d|_d|_|| _|j|j|j|j|jdœ| _i | _	dd	d
dg| _
tj| _d| _d S r¡   )r   r˜   r™   rš   rW   r   rZ   r   r   r   r   rA   rC   r   r   r[   r   r   r   r\   Â  s"     þzTestFtestPowerF2.setup_classNr]   r   r   r   r   r«   À  s   r«   c               
   C   s¨  t  ¡ } d}| j|ddd ddd�}t|ddd	� | jd dd|ddd�}t||d
d	� t| jd dƒ tt| jƒdƒ dddœ| jd< d| jd< | jd dd|ddd�}t||d
d	� t| jd dƒ tt| jƒdt	| jƒd� t
j| jd< | jd dd|ddd�}t||d
d	� t| jd dƒ tt| jƒd
ƒ | jdddd d�}t|dƒ tt| jd dddddd� t t¡�2 t t¡� | jd dddddd� W 5 Q R X W 5 Q R X d S )Nr2   é@  r>   r0   rb   ©r   r   r   rl   rX   çíýlDt&æ?r‰   r   rŠ   r   r/   iöÿÿÿéìÿÿÿ©ZuppÚlowr   gìQ¸…ëÁ?r¥   )r)   )r   r   r   r   g{®Gázt?)r   r   r   r   rl   rX   )rA   r}   r*   r   r   Úcache_fit_resÚlenÚstart_bqexpÚ	start_ttpÚreprrG   Únanr   r©   rD   r¦   r	   r¨   )ÚnipZes0Úpow_r8   r   r   r   Útest_power_solverÜ  sR    ÿÿ
ÿÿ
  ÿ
  ÿrº   z%Known failure on modern SciPy >= 0.10T)ÚreasonÚstrictc               
   C   sê   d} t  ¡ }dddœ|jd< |jdd d| dd	d
�}t|ddd� t|jd dƒ tt|jƒdƒ tj	|j
d< ddlm} t||jdd d| dd	d
� t ¡ �F t d¡ |jdd d| dd	d
�}t|jd dƒ tt|jƒdƒ W 5 Q R X d S )Nr®   r<   r¯   r°   r   r2   r>   r0   rb   r­   r¬   rŠ   r   r   r¥   )ÚConvergenceWarningÚignore)rA   r}   r´   r*   r   r   r²   r³   rG   r·   rµ   Ústatsmodels.tools.sm_exceptionsr½   r   ÚwarningsÚcatch_warningsÚsimplefilter)r¹   r¸   Úvalr½   r   r   r   Útest_power_solver_warn  s0    ÿ   ÿ

ÿrÄ   c                  C   sd   t jddddd d� t dddddg¡} t d	d
dddg¡}t  d|| dd¡}t||| k dƒ d S )Nr‰   gš™™™™™é?rO   r/   )Zstd_alternativer>   r2   r5   g®Gáz®ï?gffffffî?r¤   r3   r   )rA   Znormal_sample_size_one_tailrG   Zasarrayr   )ÚalphasZpowersZnobs_with_zerosr   r   r   Ú test_normal_sample_size_one_tail1  s
    rÆ   )5Ú__doc__r   rÀ   ÚnumpyrG   Znumpy.testingr   r   r   r   r   r   rD   Zstatsmodels.stats.powerÚstatsr   rA   Z(statsmodels.stats.tests.test_weightstatsr   r¿   r	   Zmatplotlib.pyplotZpyplotrF   ÚImportErrorr
   rN   r_   r`   rc   rd   rg   rh   ro   rp   rq   rs   rw   r   r€   rƒ   r…   r‡   rˆ   rœ   r�   r    r«   rº   rM   ZxfailrÄ   rÆ   r   r   r   r   Ú<module>   sN   	 \"'D#'2
"