U
    ÃmœdjV  ã                   @   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‰ÒÞà“ç?gèj+ö—Ýý?gòÒMb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*   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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£„@g…ëQ¸I„@g¸¥a:¥ŠÆ@é   Úequalr   )Úuse_varZddof_betweenr   gš™™™™™é?)Úeffect_sizer'   r   ÚpowerÚk_groups)ÚFTestAnovaPowergH¿}8gê?gÙÎ÷Sãá?r1   r   r   ça2U0*©C?é   é	   r'   r0   gé·¯çŒê?gáz®Gáâ?g{®Gázt?)	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•¶¾ÿê?gQ ë6‚Íè?)g‘Ç\©Cää?g¦öIÀâê?g‚Ìð.“³ÿ?)g˜ûîÀ’¡÷?gî§âå€@)gfffffæF@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»ô!¨¦ºØ?)gàhŽ hå@r   é(   rC   rD   g{®Gáz”?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@çôýÔxéÆW@çÝ$�•{Z@ç\�Âõ(ôW@çžï§ÆK÷V@ç-²�ï§žY@çð§ÆK7©Y@çmçû©ñY@ççû©ñÒ}Y@çbX9´èX@çôýÔxé~Z@çã¥›Ä V@çd;ßO�§Y@çÉv¾Ÿ_Z@çî|?5^ªX@çTã¥›ÄˆW@çòÒMb¨X@çsh‘í|WV@ç“V�Z@ç /Ý$6U@ç¬Zd;Y@çF¶óýÔð]@çÉv¾ŸïY@ç/Ý$IW@çÇK7‰A[@çq=
×£àX@ç¸…ëQ@V@çÍÌÌÌÌ[@çL7‰A`�T@ç-²�ï§Y@çw¾Ÿ/íY@ç?5^ºIÄZ@çÍÌÌÌÌ4Y@ç¸…ëQY@ç¬Zd;×Y@ç…ëQ¸NW@çÍÌÌÌÌÔW@çßO�—nY@ç     °W@çÇK7‰AÈZ@ç9´Èv¾�X@ç�Âõ(\X@ç�Âõ(\ïX@çB`åÐ"ƒZ@çNbX9,W@çÉv¾ŸGW@çd;ßO��X@é   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_typeg�St$—ÿ€?çü©ñÒ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¦   gºI+‡†?r¨   r   g      @geª`TR§6@r4   gKê46¼?çyé&1¬|?rª   r   gèj+ö—ÝÃ?©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 )	Ngùk#IŸo@r   g µq¬´k?@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   gÁüH­[Cñ?gHxBX…`Ö?rR   gÇ«�™(@güY(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À   )gQ“7‹˜šû?gµ9vö¡vÈ?)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� �q¶d S )NrX   r   T)Zscalar)ÚdiffZjointrC   rD   r.   r¤   r   )Zncc)r2   r­   g      è?F)r2   r   rÙ   rØ   ÚfitÚmodelr'   r    ÚeyeZzerosÚshapeZ	wald_testÚdf_numrÂ   Z
cov_paramsr   Úparamsr   r«   r   rF   r   Ú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�}|	 
|¡ q¶t|ˆ ƒ‰‡ ‡‡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=
Ç?gìQ¸…ëÁ?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ôþ?N˜0Æ?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__Ú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