U
    Ãmœd¦  ã                   @   s¶  d Z ddlmZ ddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ d	d
dddddddddgZdd„ Zd(dd„Zdd„ Zedk�r²edƒ edƒ eD ]TZeeƒ eeƒ\ZZZZZeeeƒZdddd œ ed!¡Zejje e¡eed"� q¢ed#ƒ eD ]RZeeƒ eeƒ\ZZZZZd$d%„ eD ƒZ ej!e Ž Zee e¡edd&…  ƒ �qed'ƒ edƒ edd… D ]<Zeeƒ eeƒ\ZZZZZeeeƒZee e¡e ƒ �qtdS ))z�calculating anova and verifying with NIST test data

compares my implementations, stats.f_oneway and anova using statsmodels.OLS
é    )ÚlmapN)Ústats)Úadd_constant)ÚOLSé   )Ú
data2dummyz
SiRstv.datz
SmLs01.datz
SmLs02.datz
SmLs03.datzAtmWtAg.datz
SmLs04.datz
SmLs05.datz
SmLs06.datú
SmLs07.datú
SmLs08.datú
SmLs09.datc              	   C   s   t j t¡}t j t j |d| ¡¡}t|ddd��}| ¡  d¡}W 5 Q R X dd„ |dd … D ƒ}d	d„ |d
d… D ƒ}t	j
|dd�}|j\}}	| t¡}t	 |¡}
t|d d ƒ}t|d d ƒ}t|d d ƒ}t|d d ƒ}t|d d ƒ}tj |||¡}||	t	 ||||g¡||
fS )NÚdataÚrzutf-8)ÚencodingÚ
c                 S   s   g | ]}|  ¡ ‘qS © ©Úsplit©Ú.0Úliner   r   úk/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/sandbox/regression/anova_nistcertified.pyÚ
<listcomp>   s     zgetnist.<locals>.<listcomp>é<   c                 S   s   g | ]}|r|  ¡ ‘qS r   r   r   r   r   r   r      s      é(   é0   )Zskiprowsr   éÿÿÿÿé   é   éüÿÿÿr   éýÿÿÿ)ÚosÚpathÚdirnameÚ__file__ÚabspathÚjoinÚopenÚreadr   ÚnpZloadtxtÚTZastypeÚintÚuniqueÚfloatr   ÚfÚsfÚarray)ÚfilenameÚhereÚfnameÚfdÚcontentr   Ú	certifiedZdatafÚyÚxÚcatyr,   ÚR2ÚresstdÚdfbnÚdfwnÚprobr   r   r   Úgetnist   s"    


r=   c                 C   s*  | d d …t jf }|d d …t jf | ¡  }ddlm} ||d d …d d…f |d d …d d…f ƒ\}}}}	t  |j|¡}
t  || ¡  d |	j¡}|jd }|jd }|d }|| }|t|ƒ }|
t|ƒ }|| }t	j
 |||¡}||
|  }t  |¡}dd„ }t|||||fƒ\}}}}||||fS )Nr   )Úgroupsstats_dummyr   r   c                 S   s   t  | ¡dkr| d S | S d S )N)r   r   )r   r   )r'   Úshape)Úzr   r   r   Ú_fix2scalarK   s    z!anova_oneway.<locals>._fix2scalar)r'   ZnewaxisZmeanZtry_catdatar>   Údotr(   r?   r+   r   r,   r-   Úsqrtr   )r5   r6   ÚseqZyrvsZxrvsr>   ZmeangZvargZ
xdevmeangrZcountgZsswnZssbnZnobsZncatr:   r;   ZmsbZmswr,   r<   r8   r9   rA   r   r   r   Úanova_oneway0   s*    ÿ


rE   c                 C   s8   t t|ƒdd�}t| |ƒ ¡ }|j|j|jt |j	¡fS )NF)Úprepend)
r   r   r   ÚfitZfvalueZf_pvalueZrsquaredr'   rC   Z	mse_resid)r5   r6   ÚXÚresr   r   r   Ú	anova_olsT   s    rJ   Ú__main__z
 using new ANOVA anova_onewayzf, prob, R2, resstdgÙÎ÷Sã¥›?g_ÎQÚ[?g-Cëâ6?)r	   r   r
   gH¯¼šò×z>)Úrtolz
 using stats ANOVA f_onewayc                 C   s   g | ]}t t|k ‘qS r   )r6   r5   )r   Úiir   r   r   r   o   s     r   r   z
 using statsmodels.OLS)r   )"Ú__doc__Zstatsmodels.compat.pythonr   r   Únumpyr'   Zscipyr   Zstatsmodels.tools.toolsr   Z#statsmodels.regression.linear_modelr   Ztry_ols_anovar   Z
filenamelir=   rE   rJ   Ú__name__ÚprintÚfnr5   r6   Úcertr4   r7   rI   ÚgetrL   ÚtestingZassert_allcloser.   ZxlistZf_onewayr   r   r   r   Ú<module>   s^   
    þ
$

ý ü

