U
    KvfjV                     @   s  d Z ddlZddlmZmZ ddlZddlmZ ddl	m
  mZ ddlm
  mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZm Z m!Z! dd	 Z"d
d Z#dd Z$dd Z%ej&'ddddgdd Z(G dd dZ)G dd dZ*G dd dZ+dd Z,dS )zM
Created on Wed Mar 18 17:45:51 2020

Author: Josef Perktold
License: BSD-3

    N)assert_allcloseassert_equal)OLS)confint_effectsize_onewayconfint_noncentralityeffectsize_onewayanova_onewayanova_genericequivalence_onewayequivalence_oneway_genericpower_equivalence_oneway_power_equivalence_oneway_empf2_to_wellekfstat_to_wellekwellek_to_f2)scale_transform)wald_test_noncent_genericwald_test_noncent_offset_constraintc            	      C   s   d} d}d}d}t | ||fddd}t| ||fdd}|jtd	 }d
dg}tddg}t||dd t|j|dd t||dd t|jd || dd t|j|dd d S )N      L   P   皙?z	two-sided)alphaalternativer   gUUUUUU?gׁsF?g?gj+?gMbH@@-C6?ZatolgiUMu?   )	r   r   Zci_fnpsqrtasarrayr   Zci_f_correctedci_nc)	Fdf1df2nobscici_esZ
ci_steigerZres_ci_steigerZ	res_ci_nc r*   G/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/stats/tests/test_oneway.pytest_oneway_effectsize   s     r,   c                  C   s  d} dddg}d}d}t |||ddd	}t|}d
}d}||  }||||| d}ddlm}	 d}
d}| }|d= |	 jf |}t||
dd t||dd tdddg}||d< t |||ddd	}t|}||d< |	 jf |}d}
d}t||
dd t||dd d S )Nr   g{G~@g=
ףp@gQI@ga:@   equalr   )use_varZddof_betweenr   g?)effect_sizer'   r   powerk_groups)FTestAnovaPowergH}8g?gS?r1   r   r   a2U0*C?   	   r'   r0   g鷯?gzG?g{Gzt?)	r   r    r!   statsmodels.stats.powerr3   copyr1   r   array)n_groupsmeansvars_r'   esr   r1   nobs_tkwdsr3   Zres_powZres_esZkwds_pr*   r*   r+   test_effectsize_power3   s<    


rA   c                  C   s   d} d}d}d}d}d}d}d}d	\}}	}
t ||	|
f}tt|j|d
d t|j| d
d t|j|d
d t|j|d
d t	||	|
fdd}t ||	 |	|
f}t|j|dd t|j|dd t|j|dd tt|j|dd d S )Ng0b?)gޯ}?g{2d?gC!V?)g5K?g?gQ6?)g\C?gI?g.?)g?g@)gfffffF@r   #   vIh%<=Zrtol皙?r   g-C6*?)
smo_fstat2effectsizer   r    r!   f2eta2Zeps2omega2r   )ZEta_Sq_partialZCI_eta2ZEpsilon_Sq_partialZCI_eps2ZOmega_Sq_partialZ	CI_omega2ZCohens_f_partialZCI_ff_statr%   r&   fesr#   r)   r*   r*   r+   test_effectsize_fstatZ   s(    
rM   c                  C   s   d} d}d}d}d}d}d\}}}t |||f}	t|	j| dd	 t|	j|d
d	 t j|||fdd}
t|
j||fdd	 t|
j||fdd	 d S )Ng|i?g_`?gퟲa?g,)?gb8?g!?)ghh@r   (   rC   rD   g{Gz?rE   r   r   g?)rF   rG   r   rI   rJ   r   Z	ci_omega2)rI   Zlb_eta2Zub_eta2rJ   Z	lb_omega2Z	ub_omega2rK   r%   r&   rL   r)   r*   r*   r+   test_effectsize_fstat_stataz   s    
rO   centermedianmeantrimmedc                 C   s   t jdd}t|| dddd}t|j| dddd}t|j|dd	 t|d d df | ddd
}t||d d df dd	 t||dd d f dd	 d S )Nr   r   abs皙?r   )rP   	transform	trim_fracZaxis   rC   rD   )rP   rV   rW   )r    randomZrandnr   Tr   )rP   xZxtZxttZxt0r*   r*   r+   test_scale_transform   s    
r\   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestOnewayEquivalencc                 C   s   ddddddddd	d
g
}ddddddddddddg}dddddddddd d!d"d#g}d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2g}d3}d4d5 ||||fD }t d6d5 |D }t |}t d7d5 |D }	t d8d5 |D }
|| _|	| _|| _|
| _|| _|| _d S )9NZd;\@Zd;Y@tU@Zd;OmY@xW@${Z@\(W@KV@-吏Y@K7Y@mY@}Y@bX9X@x~Z@㥛 V@d;OY@v_Z@|?5^X@T㥛ĈW@MbX@sh|WV@VZ@/$6U@Zd;Y@F]@vY@/$IW@K7A[@q=
ףX@Q@V@[@L7A`T@-Y@w/Y@?5^IZ@4Y@QY@Zd;Y@QNW@W@OnY@     W@K7AZ@9vX@(\X@(\X@B`"Z@NbX9,W@vGW@d;OX@   c                 S   s   g | ]}t |qS r*   )r    r"   .0yir*   r*   r+   
<listcomp>   s     z4TestOnewayEquivalenc.setup_class.<locals>.<listcomp>c                 S   s   g | ]}t |qS r*   lenr   r*   r*   r+   r      s     c                 S   s   g | ]}|  qS r*   rR   r   r*   r*   r+   r      s     c                 S   s   g | ]}|j d dqS rX   )ZddofZstdr   r*   r*   r+   r      s     )	r    r"   rR   datar;   r'   stdsr:   	nobs_mean)clsy0y1y2y3r:   Zarrs_wr'   r   r;   r   r*   r*   r+   setup_class   s\                        
z TestOnewayEquivalenc.setup_classc           	   	   C   s   | j }| j}| j}| j}d}t||d |dd}|j}t||| ||jddd}t	|j
dd	d
 t|jddg t	|ddd
 t| j|ddd}t	|j
dd	d
 t|jddg d S )N      ?r   r.   r/   r   wellekr   margin_typegSt$?MbP?r   r   .   g3?r4   r/   r   )r;   r'   r   r:   r	   	statisticr   sumdfr   pvaluer   r
   r   )	selfr;   r'   r   r:   epsres0fresr*   r*   r+   test_equivalence_equal   s(     
z+TestOnewayEquivalenc.test_equivalence_equalc              	   C   s  | j }| j}| j}| j}|d }d}t|||ddd}|j}t||| ||jddd}	t	|	j
d	d
d t	|	jddgdd t	|ddd t| j|ddd}	t	|	j
d	dd t	|	jddgdd t	|	jddd t|||||j}
t	|
ddd t||| |d ddd}
t	|
ddd | }t|||dd}t|}t|d |}tt|||| }t||||d ddd}
t	|
ddd t	||dd t||}t|d |||d ddd}
t	|
ddd d S )Nr   r   unequalF)r/   Zwelch_correctionr   r   r   gI+?r   r   g      @ge`TR6@r4   gK46?y&1|?r   r   gj+?r:   r   r   r   rC   r   rH   )r;   r'   r   r:   r	   r   r   r   r   r   r   r
   r   rK   r   r   r   r    r!   r   r   r   )r   r;   r'   r   r:   r<   r   r   rK   r   pow_r>   r=   Zes_w0Zes_wmarginr*   r*   r+   test_equivalence_welch   sp    
 

  
  
  z+TestOnewayEquivalenc.test_equivalence_welchN)__name__
__module____qualname__classmethodr   r   r   r*   r*   r*   r+   r]      s   
r]   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestOnewayScalec                 C   sp  t ddddddddd	d
dddg}t 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ddd d!d"d#d$g}t d%d&d'd(d)d*d+d,d-d.d/d0d1g}t d2d/d3d4d5d6d7d8d9d:d;d<d=d6d2d>g}t d?d@dAdBdCdDdEdFdGdHd=dIdJdKg}dL}|||g}t dMdN |D }	t |	}
t dOdN |D }t dPdN |D }|| _|||g| _|| _|	| _|| _|| _	|
| _
d S )QNg     Y@g      t@g        g     Z@g     h@g      i@g      @g      4@g     [@g      `@g      @g     ]@g     Ps@g      ?g     l@g     @T@g     U@g     S@g     f@g     E@g      (@g     V@g     @Z@g      [@g      "@g     @@g     `r@g     `@g      k@g     T@g     @Q@g     O@g     X@g     `c@g     S@g     R@g     @|@g     P@g     P@g     {@g     @v@g     @g     p@g     @g     @g     P@g     @g     0{@g     n@g     @g     0@g     }@g     |@g     Ȅ@g     0}@g     v@g     h@g     @g     |@g     X@g     p@g     Ȁ@g     @g     |@g     @g     @g     @g     Ȋ@g     @g      @g     @g     @g     @g     @g     ؉@r   c                 S   s   g | ]}t |qS r*   r   r   r*   r*   r+   r     s     z/TestOnewayScale.setup_class.<locals>.<listcomp>c                 S   s   g | ]}|  qS r*   r   r   r*   r*   r+   r   !  s     c                 S   s   g | ]}|j d dqS r   r   r   r*   r*   r+   r   "  s     )r    r9   r"   rR   r   Zdata_transformedr;   r'   r   r:   r   )r   Zyt0Zyt1Zyt2r   r   r   r:   r   r'   r   r;   r   r*   r*   r+   r     sj                          

zTestOnewayScale.setup_classc                 C   sT   d}ddg}d}t | jdd}t|j|dd t|j|dd t|j|jg| d S )	Ngk#Io@r   gqk?@gO=L@g?bfr   rC   rD   )r   r   r   pvalue2r   Zdf_num2df_denom)r   r   	parameterp_valuer   r*   r*   r+   
test_means+  s    zTestOnewayScale.test_meansc           
      C   s$  | j }d}d}tj|ddddd}t|j|dd	 t|j|dd	 d
}d}ddg}tj|ddddd}t|j|dd	 t|j|dd	 t|j| d}ddg}d}tj|ddddd}t|j|dd	 t|j|dd	 t|j| d}d}ddlm} |j	| \}}	t|	|dd	 t||dd	 d S )Ng>b?g47?r.   rQ   rT   rU   methodrP   rV   Ztrim_frac_meanrC   rD   gS\?g@P,r?r   rN   rS   gH[C?gHxBX`?rR   gǫ(@gY(jG?r   )stats)
r   rF   test_scale_onewayr   r   r   r   Zscipyr   Zbartlett)
r   r   r   r   r   r   r   r   statpvr*   r*   r+   test_levene:  sF    
 
 
 zTestOnewayScale.test_levenec           	      C   s  | j }d\}}d}tj|ddddd}t|j|dd	 t|j|dd	 t|j| d
\}}d}d}d}tj|ddddd}t|j|dd	 t|j|dd	 t|j| t|j|dd	 t|j| d\}}d}tj|ddddd}t|j|dd	 t|j|dd	 t	|j| d\}}d}tj|dddd dd}t|j|dd	 t|j|dd	 t|j| tj|ddddd}t
| j dd}t|j|jdd	 t|j|jdd	 t|j|j d S )N)gɚG?g}%?)       @g+\ \g8@r   rQ   rT   rU   r   rC   rD   )gr q?g#P/?)gM?#ޖa>@g
vټO?)r   r   r   )gQ7?g9vv?)r   g      D@r.   rR   Zsquare)gv\n?gx7YC?c                 S   s   t | |  S )N)r    log)r[   r*   r*   r+   <lambda>      z.TestOnewayScale.test_options.<locals>.<lambda>r   identityr   )r   rF   r   r   r   r   r   r   r&   r   r   )	r   r   r   r   r   r   Zp_value2r&   res2r*   r*   r+   test_optionsh  sb    
 
 
 

 zTestOnewayScale.test_optionsc                 C   s   | j }tj|ddddd}t| j ddd}t|j|jdd t|j|jdd t|j|j tj|dd	ddd}t| j dd	d}t|j|jdd t|j|jdd t|j|j d S )
Nr   r   r   r   )r   rP   rV   r   rC   rD   r   )r   rF   Zequivalence_scale_onewayr
   r   r   r   r   )r   r   r   r   r*   r*   r+   test_equivalence  s"    

z TestOnewayScale.test_equivalenceN)	r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   
  s   
.4r   c                   @   s    e Zd Zedd Zdd ZdS )TestOnewayOLSc           	      C   s   ddddddddd	d
g
}ddddddddddddg}dddddddddd d!d"d#g}d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2g}d3 | _ }||||g | _}td4d5 |D  | _}tt||}|d d d f t|ktj| _	t
|| _d S )6Nr^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 S   s   g | ]}t |qS r*   r   r   r*   r*   r+   r     s     z-TestOnewayOLS.setup_class.<locals>.<listcomp>)r2   r   r    r"   r'   repeatZarangeZastypeZint64exZconcatenatey)	r   r   r   r   r   kr   r'   groupsr*   r*   r+   r     sP                        
$zTestOnewayOLS.setup_classc              	   C   s   | j }t| j| j }|jj}t|dd   }d|d d df< t	|j
d }|j|dd}|j|j }}| }	t|j|||	d dd}
t|
|j|j dd t|j|||d dd}t||
dd |
| }tj|j|j| jdd	}t||dd d
}tjt||||dd}tjt||||d d}t||dd |jd }t||j|}|j||| fdd}t||||	d dd}t||j|j dd t||||	d dd}t|j
d D ]D}t||||d  |||d  |	d dd}t|| |dd qd S )NrX   r   T)Zscalar)ZdiffZjointrC   rD   r.   r   r   )Zncc)r2   r   g      ?F)r2   r   r   r   Zfitmodelr'   r    ZeyezerosshapeZ	wald_testdf_numr   Z
cov_paramsr   paramsr   r   r   rF   r   ZscalesmpwrZftest_powerr!   Zftest_anova_powerr   range)r   r   Zres_olsr>   Zc_equalvwtr   r   Zcov_pZnc_wtZnc_wt2Zes_olsZ	es_onewayr   Zpow_olsZ
pow_onewayZ
params_altZv_offZwt_offZ	nc_wt_offZ	nc_wt_veciZnc_wt_ir*   r*   r+   test_ols_noncentrality  st        
      z$TestOnewayOLS.test_ols_noncentralityN)r   r   r   r   r   r   r*   r*   r*   r+   r     s   
r   c               
      s  d d} t ddddg|  }t ddddgd	 }t dd
ddg}| d}dddg}d}t jd tj|||||d|dd}|jdkd| }t|dddgdd g }	|D ]}
t	||||
d}|	
| qt|  fdd|	D }t|ddd gd!d d S )"Nr   
   r-      r5   r   rX   gQ?r   r   g r?r   r.   r   d   i rE   r   )r<   k_mcrW   Zoptions_varr   r   g(\?g
ףp=
?gQ?r   r   r   c                    s"   g | ]}t | d dddqS )Nr   rH   r   )r   )r   Zes_r2   r   r>   r*   r+   r      s        z-test_simulate_equivalence.<locals>.<listcomp>g[#qp?g?N0?gso?r   )r    r9   r   rY   seedrF   Z!simulate_power_equivalence_onewayr   r   r   appendr   )Zk_replr'   r;   r<   r   Zopt_varr   Zres_mcZfrac_rejectZ	es_alt_liZuvr=   r   r*   r   r+   test_simulate_equivalence  s>    
      
r   )-__doc__Znumpyr    Znumpy.testingr   r   ZpytestZ#statsmodels.regression.linear_modelr   r7   r   r1   r   Zstatsmodels.stats.onewayZonewayrF   r   r   r   r   r	   r
   r   r   r   r   r   r   Z statsmodels.stats.robust_comparer   Zstatsmodels.stats.contrastr   r   r   r,   rA   rM   rO   markZparametrizer\   r]   r   r   r   r*   r*   r*   r+   <module>   s(   8' 
l *O