U
    Kvfo                     @   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 )=zTests 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   F/tmp/pip-unpacked-wheel-2v6byqio/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 )NgMbP?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   {Gz?3    )r   smp
FTestPowerFTestPowerF2pytestskipplt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
matplotlibrJ   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rK   rL   rM   classmethodr]   r   r   r   r   rO   z   s   rO   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   rP   gOg?rQ   rR   rS   rT   rU   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   rP   gk?greaterrR   rS   rT   rY   largerrU   r\   r   r   r   r]      s     
zTestTTPowerOneS3.setup_classNr^   r   r   r   r   ra      s   ra   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:   rP   gwoƔ?rb   rR   rS   rT   rY   rc   rU   r\   r   r   r   r]      s     
zTestTTPowerOneS4.setup_classNr^   r   r   r   r   rd      s   rd   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   rP   g ~x?lessrR   rS   rT   rY   smallerrU   r\   r   r   r   r]      s     
zTestTTPowerOneS5.setup_classNr^   r   r   r   r   re      s   re   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ɿrP   g%?rf   rR   rS   rT   rY   rg   rU   r\   r   r   r   r]      s     
zTestTTPowerOneS6.setup_classNr^   r   r   r   r   rh      s   rh   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   rP   g?'Ow?rQ   n is number in *each* group#Two-sample t test power calculationr   r   r   r   ratior   rV   rW   rX   r   rY   rZ   r[   r   r   r   rA   TTestIndPowerr   r\   r   r   r   r]     s       zTestTTPowerTwoS1.setup_classNr^   r   r   r   r   ri     s   ri   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   rP   g|6?rQ   rj   rk   r0   rl   rn   r\   r   r   r   r]     s       zTestTTPowerTwoS2.setup_classNr^   r   r   r   r   rp     s   rp   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   rP   gE?rb   rj   rk   rl   rY   rc   rn   r\   r   r   r   r]   0  s       
zTestTTPowerTwoS3.setup_classNr^   r   r   r   r   rq   .  s   rq   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>   rP   g}B_?rb   rj   rk   r   r   r   r   rY   rc   rn   r\   r   r   r   r]   G  s     
zTestTTPowerTwoS4.setup_classNr^   r   r   r   r   rr   D  s   rr   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   rP   gۧ4?rQ   t test power calculation      ?rl   rY   z	two-sidedr   Zn1Zn2rW   rX   r   rY   r[   r   r   r   rA   ro   r   r\   r   r   r   r]   ^  s       
zTestTTPowerTwoS5.setup_classNr^   r   r   r   r   rt   [  s   rt   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   rP   gSꢸ?rb   ru   rv   rl   rY   rc   rw   r\   r   r   r   r]   u  s       
zTestTTPowerTwoS6.setup_classNr^   r   r   r   r   rx   r  s   rx   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   rP   g       @rs   kGZ{h?   r   g{Gzgթ?   r>   rc   )rY   gJy ?7!n?)rA   Znormal_powerNormalIndPowerr   r*   r   )
sigmarW   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 )
Nry   r4   rP   rz   rQ   rR   two sample power calculationr0   rl   r   rV   rW   rX   r   rY   rZ   r[   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>   ry   rP   r}   rf   z]Difference of proportion power calculation for binomial distribution (arcsine transformation)zsame sample sizesr0   rl   rY   rg   )r   hrV   rX   r   rY   r[   rZ   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   rP   rz   rQ   rR   r   rs   rm   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   rP   r}   rf   zBMean power calculation for normal distribution with known variancers   r   rg   )rm   rY   )r   rW   rV   rX   r   rY   r[   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         rP   gޢ}ܪ?zChi squared power calculationzN is the number of observationsrT   n_binsr0   )r   wNZdfrX   r   r[   rZ   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)rK   rL   rM   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>   rP   r2   r3   r5   r>         r0   r   )r   Znccr   r         ?8d`?r9   )k_groupsAf?r   r   g\L?%Multiple regression power calculation
ףp=
?gd)~?   r2   Ōh,]#?)rA   Zttest_powerZftest_powerr   Zftest_anova_powerr   uvf2rX   r   r[   rH   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   rT   r   r   )r   frV   kr   r   r[   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   rX   r   r[   r   rH   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)rK   rL   rM   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   rX   r   r[   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   rc   r   r   r   rm   rY   lDt&?r   r   r   r   r/   iZupplowr   gQ?r   )r)   )r   r   r   r   g{Gzt?)r   r   r   r   rm   rY   )rA   r~   r*   r   r   cache_fit_reslenstart_bqexp	start_ttpreprrH   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   rc   r   r   r   r   r   r   )ConvergenceWarningignore)rA   r~   r   r*   r   r   r   r   rH   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?rP   r/   )Zstd_alternativer>   r2   r5   gGz?gffffff?r   r3   r   )rA   Znormal_sample_size_one_tailrH   Zasarrayr   )alphasZpowersZnobs_with_zerosr   r   r    test_normal_sample_size_one_tail1  s
    r   )5__doc__r   r   ZnumpyrH   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
   rO   r`   ra   rd   re   rh   ri   rp   rq   rr   rt   rx   r   r   r   r   r   r   r   r   r   r   r   rN   Zxfailr   r   r   r   r   r   <module>   sN   	 \"'D#'2
"