
    !go                        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c mZ ddlmZ ddlmZ 	 ddlmZ  G d d      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d de      Z%d  Z& G d! d"e      Z' G d# d$e      Z( G d% d&e      Z) G d' d(e      Z* G d) d*e      Z+d+ Z, G d, d-e      Z- G d. d/e      Z. G d0 d1e      Z/d2 Z0ejb                  je                  d3d45      d6        Z3d7 Z4y# e$ r Y w xY w)8zTests 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                   V    e Zd Zd Zd Zd Zej                  j                  d        Z	y)CheckPowerMixinc                 8   t        j                   | j                        }|d= |j                  | j                         t	        | d      r| j
                  }nd}| j                         }t         |j                  di || j                  j                  |       y )Npowerdecimal   r    )
copykwdsupdate
kwds_extrahasattrr   clsr   r   res2)selfr   r   res1s       _/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/stats/tests/test_power.py
test_powerzCheckPowerMixin.test_power   sp    yy#MDOO$4#llGGxxzJDJJ..		Q    c                    | j                         }t        j                  | j                        }|d= |j                  | j                         t        | d      r| j                  }nd|v rdnd}d|dg}|D cg c]  }|j                  |       }}t        | d      r| j                  }nd} |j                  |i |}t        || j                  j                  |	       y c c}w )
Nr   
args_namesnobsnobs1effect_sizealphar   r   r   )r   r   r   r   r   r   r    popr   r   r   r   )	r   r   r   r    nobs_argargsr   ress	            r   test_positionalzCheckPowerMixin.test_positional,   s    xxz yy#MDOO$ 4&J$nF'E'8J *44#444#llGGdjj$'$'C'B 5s   8C"c                    t        j                   | j                        }|j                  | j                         | j                  D ]C  }||   }d ||<    | j	                         j
                  di |}t        ||d|dz          |||<   E y )NgMbP?z failed)rtolerr_msgr   )r   r   r   r   r   solve_powerr   )r   r   keyvalueresults        r   
test_rootszCheckPowerMixin.test_rootsG   s    yy#DOO$ 99 
	C IEDI+TXXZ++3d3FFEs9}M DI
	r   c           
      `   | j                   t        j                  t        j                  fv rt	        j
                  d       t        j                         }|j                  ddd      } | j                         j                  ddt        j                  dd      t        j                  g d      |dd| j                  }|j                  ddd      } | j                         j                  dd	t        j                  g d
      t        j                  ddd      |dd| j                   y )Nzskip FTestPower plot_power      r!   d   )皙?皙?333333?      ?r5   zPower of t-Test)dep_varr!   r#   axtitlees)
         2   F   r6   {Gz?3    r   )r   smp
FTestPowerFTestPowerF2pytestskippltfigureadd_subplot
plot_powernparangearrayr   linspace)r   close_figuresfigr<   s       r   test_power_plotzCheckPowerMixin.test_power_plotX   s    88(8(899KK45jjl__Qq##dhhj## 5F(*		!S(9.0hh7N.O%'/@	5
 %)OO5 __Qq#
 	1d#%88,E#F*,++dAr*B!#2		1
 !%	1r   N)
__name__
__module____qualname__r   r*   r2   rJ   mark
matplotlibrV   r   r   r   r   r      s1    
RC6" [[1 1r   r   c                       e Zd Zed        Zy)TestTTPowerOneS1c                 (   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        i | _
        t        j                  | _        y )	NrA   r5   皙?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   rG   
TTestPowerr   r   r   s     r   setup_classzTestTTPowerOneS1.setup_class{   sz    
 x'
&	;#'66466"nndjjB..r   NrW   rX   rY   classmethodrm   r   r   r   r]   r]   y       ! !r   r]   c                       e Zd Zed        Zy)TestTTPowerOneS2c                 (   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        i | _
        t        j                  | _        y )	Nr@   r8   r_   gOg?r`   ra   rb   rc   rd   rl   s     r   rm   zTestTTPowerOneS2.setup_class   s|     x '
&	;#'66466"nndjjB..r   Nrn   r   r   r   rr   rr           ! !r   rr   c                       e Zd Zed        Zy)TestTTPowerOneS3c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        d	d
i| _
        t        j                  | _        y )NrA   r5   r_   gk?greaterra   rb   rc   rh   largerrd   rl   s     r   rm   zTestTTPowerOneS3.setup_class   s     x &
$	;#'66466"nntzzC'2..r   Nrn   r   r   r   rv   rv      rp   r   rv   c                       e Zd Zed        Zy)TestTTPowerOneS4c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        dd	i| _
        t        j                  | _        y )
Nr@   r_   gwoƔ?rx   ra   rb   rc   rh   ry   rd   rl   s     r   rm   zTestTTPowerOneS4.setup_class   s     x '
$	;#'66466"nntzzC'2..r   Nrn   r   r   r   r{   r{      rp   r   r{   c                       e Zd Zed        Zy)TestTTPowerOneS5c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        d	d
i| _
        t        j                  | _        y )Nr@   r8   r_   g ~x?lessra   rb   rc   rh   smallerrd   rl   s     r   rm   zTestTTPowerOneS5.setup_class   s     x )
!	;#'66466"nntzzC'3..r   Nrn   r   r   r   r~   r~      rt   r   r~   c                       e Zd Zed        Zy)TestTTPowerOneS6c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        d	d
i| _
        t        j                  | _        y )Nr@   gɿr_   g%?r   ra   rb   rc   rh   r   rd   rl   s     r   rm   zTestTTPowerOneS6.setup_class   s     x %
!	;#'66466"nntzzC'3..r   Nrn   r   r   r   r   r      rt   r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS1c                 *   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  dd| _	        i | _
        t        j                  | _        y )	NrA   r5   r_   g?'Ow?r`   n is number in *each* group#Two-sample t test power calculationr#   r"   r$   r   ratior	   re   rf   rg   r   rh   ri   rj   r   r   r   rG   TTestIndPowerr   rl   s     r   rm   zTestTTPowerTwoS1.setup_class  s~    
 x&
&1	;#'66DFF"nntzzAO##r   Nrn   r   r   r   r   r         $ $r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS2c                 *   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  dd	| _	        i | _
        t        j                  | _        y )
Nr@   r7   r_   g|6?r`   r   r   r5   r   r   rl   s     r   rm   zTestTTPowerTwoS2.setup_class  s     x (
&1	;#'66DFF"nntzzAO##r   Nrn   r   r   r   r   r     r   r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS3c                 .   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  dd| _	        d	d
i| _
        t        j                  | _        y )NrA   r5   r_   gE?rx   r   r   r   rh   ry   r   rl   s     r   rm   zTestTTPowerTwoS3.setup_class/  s     x &
$1	;#'66DFF"nndjj1N'2##r   Nrn   r   r   r   r   r   -  r   r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS4c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        d	d
i| _
        t        j                  | _        y )NrA   rD   r_   g}B_?rx   r   r   r#   r"   r$   r   rh   ry   r   rl   s     r   rm   zTestTTPowerTwoS4.setup_classF  s     x '
$1	;#'66DFF"nndjjB'2##r   Nrn   r   r   r   r   r   C       $ $r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS5c                 .   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j
                  dd	| _	        d
di| _
        t        j                  | _        y )Nr@   rA   r7   r_   gۧ4?r`   t test power calculation      ?r   rh   z	two-sidedr	   n1n2rf   rg   r   rh   rj   r   r   r   rG   r   r   rl   s     r   rm   zTestTTPowerTwoS5.setup_class]  s     x '
&0#'66DGG"nndjj3P'5##r   Nrn   r   r   r   r   r   Z  r   r   r   c                       e Zd Zed        Zy)TestTTPowerTwoS6c                 .   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j
                  dd	| _	        d
di| _
        t        j                  | _        y )Nr@   rA   r7   r_   gSꢸ?rx   r   r   r   rh   ry   r   rl   s     r   rm   zTestTTPowerTwoS6.setup_classt  s     x (
$0#'66DGG"nndjj3P'2##r   Nrn   r   r   r   r   r   q  r   r   r   c                  h   d} d}d}d}t        j                  ||dz  d      }t        j                         j                  ||d      }t        j                         j	                  dddd       }d}t        ||d	       t        ||d	       t        ||d	       t        j                  d
|dz  d      }d}	t        ||	d	       t        j                         j                  d|dd      }d}	t        ||	d	       t        j                         j                  d
|dd      }d}	t        ||	d	       y )Nr5   r9   P   r_   g       @r   kGZ{h?   r   g{Gzgթ?   rD   ry   )rh   gJy ?7!n?)rG   normal_powerNormalIndPowerr   r.   r   )
sigmarf   r!   r$   r   r   res3res_Rnorm_pow
norm_pow_Rs
             r   test_normal_power_explicitr     s6   EADEAtBw-D%%at4D++2TY]+^DEeR0eR0eR0 tBw5H$J*b9!!#))$d6> * @H%J*b9 !!#))%t6> * @H#J*b9r   c                       e Zd Zed        Zy)TestNormalIndPower1c                 *   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  dd	| _	        i | _
        t        j                  | _        y )
Nr   r9   r_   r   r`   ra   two sample power calculationr5   r   r	   re   rf   rg   r   rh   ri   rj   r   r   r   rG   r   r   rl   s     r   rm   zTestNormalIndPower1.setup_class  s~     x&
&	4#'66DFF"nndjj1N$$r   Nrn   r   r   r   r   r     s    % %r   r   c                       e Zd Zed        Zy)TestNormalIndPower2c                 .   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  dd	| _	        d
di| _
        t        j                  | _        y )NrD   r   r_   r   r   z]Difference of proportion power calculation for binomial distribution (arcsine transformation)zsame sample sizesr5   r   rh   r   )r	   hre   rg   r   rh   rj   ri   r   r   r   rG   r   r   rl   s     r   rm   zTestNormalIndPower2.setup_class  s    x '
!H'	#'66DFF"nndjj1N'	2$$r   Nrn   r   r   r   r   r     s    % %r   r   c                       e Zd Zed        Zy)TestNormalIndPower_onesamp1c                 ,   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _	        d	d
i| _
        t        j                  | _        y )N(   r9   r_   r   r`   ra   r   r   r   r   r   rl   s     r   rm   z'TestNormalIndPower_onesamp1.setup_class  s    
 x&
&	4#'66DFF"nndjjB "1$$r   Nrn   r   r   r   r   r     s    % %r   r   c                       e Zd Zed        Zy)TestNormalIndPower_onesamp2c                     t               }d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  d| _        dd	d
| _	        t        j                  | _        y )NrD   r   r_   r   r   zBMean power calculation for normal distribution with known variancer   r   r   )r   rh   )r	   rf   re   rg   r   rh   rj   r   r   r   rG   r   r   rl   s     r   rm   z'TestNormalIndPower_onesamp2.setup_class  s~     x '
!Z#'66DFF"nndjjB $%I>$$r   Nrn   r   r   r   r   r     s     % %r   r   c                   "    e Zd Zed        Zd Zy)TestChisquarePowerc                 F   t               }d|_        d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j
                  d| _	        d	|j                  d
z   i| _
        t        j                  | _        y )Nr7         r_   gޢ}ܪ?zChi squared power calculationzN is the number of observationsrc   n_binsr5   )r	   wNdfrg   r   rj   ri   r   r   r   rG   GofChisquarePowerr   rl   s     r   rm   zTestChisquarePower.setup_class  s     x(
55	#'66466"nndjjB #DGGaK0''r   c                 h   | j                         }g d}t        j                  | j                        }|d= |j                  | j                         |D cg c]  }||   	 }}t        | d      r| j                  }nd}t         |j                  | | j                  j                  |       y c c}w )N)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   s          r   r*   z"TestChisquarePower.test_positional!  s    xxz>
yy#MDOO$%/0cS	004#llGGJDJJ-tyyP 1s   B/N)rW   rX   rY   ro   rm   r*   r   r   r   r   r   
  s    ( ((Qr   r   c                     dD ]A  } t        j                  dd|       }t        j                  ddd| d      }t        ||d	       C t        j                  d
ddd      }d}t        ||d	       t               }d|_        d|_        d|_        d|_	        d|_
        d|_        t        j                  t        j                  |j                        |j                  |j                  |j                  d      }t        ||j                  d	       t               }d|_        d|_        d|_        d|_	        d|_
        d|_        t        j                  t        j                  |j                        |j                  |j                  |j                  d      }t        ||j                  d	       t               }d|_        d|_        d|_        d|_	        d|_
        d|_        t        j                  t        j                  |j                        |j                  |j                  |j                  d      }t        ||j                  d	       y )N)rD   r_   r7   r8   r:   rD         r5   r   )r$   nccr   r         ?8d`?r?   )k_groupsAf?r   r   g\L?%Multiple regression power calculation
ףp=
?gd)~?   r7   Ōh,]#?)rG   ttest_powerftest_powerr   ftest_anova_powerr	   uvf2rg   r   rj   rP   sqrt)r$   res0r   r   s       r   test_ftest_powerr   1  s    / 3tS%0tS!5a@D$23   sFR@DDdA.
 8D DFDFDGDN#DJ9DK??277477+TVVTVV!%Q8Ddjj!48D DFDFDGDN#DJ9DK??277477+TVVTVV!%Q8Ddjj!48D DFDFDGDN"DJ9DK??277477+TVVTVV!%Q8Ddjj!4r   c                       e Zd Zed        Zy)TestFtestAnovaPowerc                 @   t               }d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j
                  d| _        d|j                  i| _	        t        j                  | _        d	| _        y )
Nr   r   r?   r   r   r   rc   r   r   )r	   fre   kr$   r   rj   r   r   r   rG   FTestAnovaPowerr   r   rl   s     r   rm   zTestFtestAnovaPower.setup_classw  s    x 

=#'66466"jj4::? %dff-%%r   Nrn   r   r   r   r   r   u  s     r   r   c                   "    e Zd Zed        Zd Zy)TestFtestPowerc                 v   t               }d|_        d|_        d|_        d|_        d|_        d|_        || _        t        j                  |j                        |j                  |j                  |j                  |j
                  d| _
        i | _        g d| _        t        j                  | _        d| _        y 	Nr   r   r   r7   r   r   )r#   df_numdf_denomr$   r   )r#   r   r   r$   )r	   r   r   r   rg   r   rj   r   rP   r   r   r   r    rG   rH   r   r   rl   s     r   rm   zTestFtestPower.setup_class  s    x &
=#%77477#3tvv!%$.."jj*
 G..r   c                 \   t        j                  t              5  t        j                         j                  ddddd        d d d        t        j                  t              5  t        j                         j                  ddddd       d d d        y # 1 sw Y   TxY w# 1 sw Y   y xY w)Nr9   r7   ?r4   )r#   r$   r   r   r!      )r#   r$   r   r   junk)rJ   warnsUserWarningrG   rH   r.   raises
ValueError)r   s    r   test_kwargszTestFtestPower.test_kwargs  s    \\+& 	NN((s# ) 	
 ]]:& 	NN((s# ) 	 		 	
	 	s   )B$)B"B"B+N)rW   rX   rY   ro   rm   r   r   r   r   r   r     s     .
r   r   c                       e Zd Zed        Zy)TestFtestPowerF2c                 P   t               }d|_        d|_        d|_        d|_        d|_        d|_        || _        |j                  |j                  |j                  |j                  |j
                  d| _        i | _	        g d| _
        t        j                  | _        d| _        y r   )r	   r   r   r   rg   r   rj   r   r   r   r    rG   rI   r   r   rl   s     r   rm   zTestFtestPowerF2.setup_class  s    x &
=#'77dff!%$.."jj*
 G""r   Nrn   r   r   r   r   r     s     r   r   c            
         t        j                         } d}| j                  |ddd dd      }t        |dd	       | j                  d dd|dd      }t        ||d
	       t	        | j
                  d   d       t	        t        | j
                        d       ddd| j                  d<   d| j                  d<   | j                  d dd|dd      }t        ||d
	       t	        | j
                  d   d       t	        t        | j
                        dt        | j
                               t        j                  | j                  d<   | j                  d dd|dd      }t        ||d
	       t	        | j
                  d   d       t	        t        | j
                        d
       | j                  dddd       }t        |d       t        t        | j                  d ddddd       t        j                  t               5  t        j"                  t              5  | j                  d ddddd       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr7   @  rD   r5   ry   r"   r$   r   r   rh   lDt&?r   r   r   r   r4   iupplowr#   gQ?r   )r-   )r"   r$   r#   r   g{Gzt?)r"   r#   r$   r   r   rh   )rG   r   r.   r   r   cache_fit_reslenstart_bqexp	start_ttpreprrP   nanr   r   rJ   r   r
   r   )nipes0pow_r>   s       r   test_power_solverr    s?    


C C??3d$d!'/  1D 11=	TT%- 
 
/BC+""1%q)S&&'+ .1%=COOM"#'CMM- 	TT%- 
 
/BC+""1%q)S&&'D9J9J4KL#%66CMM- 	TT%- 
 
/BC+""1%q)S&&'+ 
t4Qd	KBD!
 *coot4tQH> 
+	, H]]:& 	HOO$AT"'qh  H	HH H	H 	HH Hs$   II3II		IIz%Known failure on modern SciPy >= 0.10T)reasonstrictc            
         d} t        j                         }ddd|j                  d<   |j                  dd d| dd	
      }t	        |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	
       t        j                         5  t        j                   d       |j                  dd d| dd	
      }t        |j                  d   d       t        t        |j                        d       d d d        y # 1 sw Y   y xY w)Nr   rB   r   r   r"   r7   rD   r5   ry   r   r   r   r   r   r   )ConvergenceWarningignore)rG   r   r  r.   r   r   r  r  rP   r  r  statsmodels.tools.sm_exceptionsr  r   warningscatch_warningssimplefilter)r  r	  valr  s       r   test_power_solver_warnr    s3    D



C')#6COOG
//#TT&.  0C T1-""1%q)S&&'+  VVCMM'B#S__cDxI
 
	 	 	" 0h'oocTQ*2  4S&&q)1-S**+Q/0 0 0s   A%EEc                      t        j                  ddddd        t        j                  g d      } t        j                  g d      }t        j                  d|| dd      }t	        ||| k     d       y )	Nr   皙?r_   r4   )std_alternative)rD   r_   r7   r:   r  )gGz?gffffff?r   r:   r8   r   )rG   normal_sample_size_one_tailrP   asarrayr   )alphaspowersnobs_with_zeross      r    test_normal_sample_size_one_tailr   0  sf     ##AsD!TJ ZZ34FZZ34F55aANOv'78!<r   )5__doc__r   r  numpyrP   numpy.testingr   r   r   r   r   r   rJ   statsmodels.stats.powerstatsr   rG   (statsmodels.stats.tests.test_weightstatsr	   r  r
   matplotlib.pyplotpyplotrL   ImportErrorr   r]   rr   rv   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rZ   xfailr  r   r   r   r   <module>r+     s     K K  % % ; A	#
M1 M1x! !,! !.! !,! !,! !.! !0$ $,$ $,$ $,$ $.$ $.$ $2 :D%/ %*%/ %.%/ %0%/ %4#Q #QNA5H/ F$_ $N 8.Hd A$O0 P0D=o  		s   E EE