U
    Kvfv                     @   s  d Z ddlZddlmZ ddlZddlmZm	Z	m
Z
 ddlmZmZmZmZmZ ddlmZ 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Z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dd  Zd!d" Z e Z!d#e!_"d$e!_#e$d%d&ge!_%e$d'd(ge!_&de!_'d)e!_(d*e!_)d+e!_*e Z+d#e+_"d,e+_#e$ej,d-ge+_%e$d'd(ge+_&de+_'d.e+_(d*e+_)d+e+_*e Z-d#e-_"d/e-_#e$d0ej,ge-_%e$d'd(ge-_&de-_'d1e-_(d*e-_)d+e-_*e Z.d2e._"d3e._#e$d%d&ge._%e$d'd(ge._&d4e._'d)e._(d*e._)d+e._*e Z/d2e/_"d5e/_#e$d0ej,ge/_%e$d'd(ge/_&d4e/_'d1e/_(d*e/_)d+e/_*e Z0d6e0_"d7e0_#e$ej,d-ge0_%e$d'd(ge0_&d8e0_'d.e0_(d*e0_)d+e0_*e Z1d9e1_"d:e1_#e$d;d<ge1_%d'e1_&d=e1_'d)e1_(d>e1_)d?e1_*e Z2d@e2_"dAe2_#e$ej,dBge2_%d'e2_&dCe2_'d.e2_(d>e2_)d?e2_*e Z3d9e3_"dDe3_#e$dEej,ge3_%d'e3_&d=e3_'d1e3_(d>e3_)d?e3_*e Z4dFe4_"dGe4_#e$dHdIge4_%e$d'd(ge4_&de4_'d)e4_(dJe4_5d*e4_)d+e4_*e Z6dFe6_"dKe6_#e$ej,dLge6_%e$d'd(ge6_&de6_'d.e6_(dJe6_5d*e6_)d+e6_*e Z7dFe7_"dMe7_#e$dNej,ge7_%e$d'd(ge7_&de7_'d1e7_(dJe7_5d*e7_)d+e7_*dOdPdQdRZ8G dSdT dTZ9dUdV Z:dWdX Z;dYdZ Z<dS )[a  tests for weightstats, compares with replication

no failures but needs cleanup
update 2012-09-09:
   added test after fixing bug in covariance
   TODOs:
     - I do not remember what all the commented out code is doing
     - should be refactored to use generator or inherited tests
     - still gaps in test coverage
       - value/diff in ttest_ind is tested in test_tost.py
     - what about pandas data structures?

Author: Josef Perktold
License: BSD (3-clause)

    N)stats)assert_assert_almost_equalassert_allclose)DescrStatsWCompareMeans	ttest_indztestzconfint)Holderc                   @   sX   e Zd ZedddZedddZdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )CheckExternalMixinr   c                 C   s   t | j| j|| _d S )N)r   dataweightsdescriptive)clsddof r   L/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/stats/tests/test_weightstats.pyget_descriptives   s    z#CheckExternalMixin.get_descriptivesdata.csvc                 C   s|   t jtt| jd}| j|d< | jjdkr:| j|d< n4t| jj	d D ]"}| jd d |f |d|d  < qJ|
| d S )N)indexr      Zdata1zdata%d)pdZ	DataFramenpZarangelenr   r   ndimrangeshapeZto_csv)r   fnamedfkr   r   r   	save_data$   s    
 zCheckExternalMixin.save_datac                 C   s   | j j}t|| jdd d S N-C6?rtol)r   meanr   )selfmnr   r   r   	test_mean0   s    zCheckExternalMixin.test_meanc                 C   s   | j j}t|| jdd d S r"   )r   sumr   )r'   smr   r   r   test_sum4   s    zCheckExternalMixin.test_sumc                 C   s   | j j}t|| jdd d S r"   )r   varr   )r'   r-   r   r   r   test_var8   s    zCheckExternalMixin.test_varc                 C   s   | j j}t|| jdd d S r"   )r   stdr   )r'   r/   r   r   r   test_std=   s    zCheckExternalMixin.test_stdc                 C   s*   t | dsd S | jj}t|| jdd d S )Nsemr#   r$   )hasattrr   Zstd_meanr   r1   )r'   r1   r   r   r   test_semB   s    
zCheckExternalMixin.test_semc                 C   sP   t j| jt jd}dD ]4}| jj| j|d}t j|t jd}t||dd qd S )N)Zdtype)FT)return_pandasr#   r$   )r   asarray	quantilesZfloat64r   quantilequantile_probsr   )r'   Zquantr4   Zqtlr   r   r   test_quantilesJ   s    
z!CheckExternalMixin.test_quantilesN)r   )r   )__name__
__module____qualname__classmethodr   r!   r)   r,   r.   r0   r3   r9   r   r   r   r   r      s   r   c                   @   s2   e Zd ZdZdZdZdZejd Z	e
dd ZdS )	TestSim1g(?geڣ")@gGĔH?g|~?)g}\*gI2gY?gg~5?g(rwy@c                 C   sH   t jd t jjdd| _t jjdddd| _t jd | _| 	  d S )N5    sizer      r   g?      ?g      ?r   
r   randomseednormalr   uniformr   r_r8   r   r   r   r   r   setup_class]   s
    zTestSim1.setup_classNr:   r;   r<   r&   r*   r-   r/   r   rK   r6   r=   rM   r   r   r   r   r>   S   s   
r>   c                   @   s2   e Zd ZdZdZdZdZejd Z	e
dd ZdS )		TestSim1tgOA4@gޭ,Yc@g.B@#@g~C	@)r   r         	   c                 C   s|   t jd t jjdddd| _| jdd | jdd< | jdd | jd	d< t jjdd
dd| _t jd | _| 	  d S )Nr?   r   
   r@   rA   rP            rC   rD   )
r   rG   rH   randintr   rJ   r   rK   r8   r   rL   r   r   r   rM   p   s    zTestSim1t.setup_classNrN   r   r   r   r   rO   f   s   
rO   c                   @   s6   e Zd ZdZdZdZdZdZej	d Z
edd Zd	S )
	TestSim1ng	ԿgXhg?g?gpA.?)g&jjg	3mJgN],Ͽgŏ1w?g6v?c                 C   sb   t jd t jjdd| _t jjdddd| _|  jd| j  9  _t jd | _	| 
d d S )Ni  r@   rA   r   rC   rD   r   )r   rG   rH   rI   r   rJ   r   r*   rK   r8   r   rL   r   r   r   rM      s    zTestSim1n.setup_classN)r:   r;   r<   r&   r*   r-   r/   r1   r   rK   r6   r=   rM   r   r   r   r   rX   {   s   
rX   c                   @   sR   e Zd ZddgZddgZddgZddgZeej	d	 ej	d
 fZ
edd ZdS )TestSim2ggs˿g}#;οg݀Zggbc?gă?g<O?g!I.?)g뭁lg';zgOeg!u?gCԷL@)gtgeI)vgJ)Ŀg4k?gtv28J?c                 C   sH   t jd t jjdd| _t jjdddd| _t jd | _| 	  d S )Ni  )r@      rA   r   rC   r@   rD   rF   rL   r   r   r   rM      s
    zTestSim2.setup_classN)r:   r;   r<   r&   r*   r-   r/   r   Zcolumn_stackrK   r6   r=   rM   r   r   r   r   rY      s   rY   c                   @   sH   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )TestWeightstatsc                 C   s   t jd d\}}d\}}|t j| }|t j| }|t j|d }|t j|d }t jdd|}	t jdd|}
|| | _| _|	|
 | _| _|| | _	| _
d S )Nr?   r@   r@   r   g333333?rC   r      )r   rG   rH   randnrW   x1x2w1w2x1_2dx2_2d)r   n1n2m1m2r`   ra   rd   re   rb   rc   r   r   r   rM      s    zTestWeightstats.setup_classc                 C   s   | j | j }}| j| j }}dtt| }dtt| }t|}tt	||||fdd d t
	tj||f tj||f  d S )Ng       @r   rZ   )r`   ra   rb   rc   r   onesr   r   r   r   r   rK   )r'   r`   ra   rb   rc   Zw1_Zw2_d1r   r   r   test_weightstats_1   s    	z"TestWeightstats.test_weightstats_1c           
      C   s  | j | j }}| j| j }}t|}t||d}t||d}| }| }	tt||||fdd d t||	d t|		d|j	d t|	
 |j
d t|	 |jd ttj|	dd|jd t|dd d t|dd t|dd d t|dd d S )	Nrj   rZ      r   r   ZbiasrC      )r`   ra   rb   rc   r   	asrepeatsr   r   r   r&   r-   r/   r   cov
ttest_meanttest_1samp)
r'   r`   ra   rb   rc   rl   d1wd2wx1rx2rr   r   r   test_weightstats_2   s(    
 	"
 z"TestWeightstats.test_weightstats_2c                 C   s  | j | j }}| j| j }}t||d}t||d}| }| }t|d|jd t|d|jd t|	d|j	d tt
j|jdd|jd tt
|j|jd |d\}	}
}t|	|
gt|dd t||}| }t||}t|d d |d d S )	Nrj   r   rn   r   ro   rC   rp   rZ   )rd   re   rb   rc   r   rq   r   r&   r-   r/   r   rr   Tcorrcoefrs   r   rt   r   r   )r'   rd   re   rb   rc   Zd1w_2dZd2w_2dZx1r_2dZx2r_2dtpdcmZressmZresssr   r   r   test_weightstats_3   s"    
z"TestWeightstats.test_weightstats_3c           	      C   s   | j }| j}t||dd}t||dd}t||dd}| }| }| }ttj| tj| d ttj| tj| d |d}|d}|d}ttj| tj| d ttj| tj| d | }| }| }t||d t||d d S )Nr   r   r   r   rZ   rn   rE   )rd   rb   r   rs   r   r   rK   tconfint_mean)	r'   rd   rb   Zd1w_d0Zd1w_d1Zd1w_d2res0res1res2r   r   r   test_weightstats_ddof_tests  s(    


z+TestWeightstats.test_weightstats_ddof_testsc                 C   s   | j | j }}t|}t|}t||}ddlm} dD ]*}dD ] }|j||d}	tt|	| q@q8t	||}
tt
| t
|
 k d S Nr   )SimpleTable)TF)pooledunequal)use_tusevar)rd   re   r   r   statsmodels.iolib.tabler   summaryr   
isinstance	from_datastrr'   rd   re   rl   d2cm1r   r   r   Zsmrycm2r   r   r   &test_comparemeans_convenient_interface+  s    
z6TestWeightstats.test_comparemeans_convenient_interfacec                 C   s   | j | j }}t|}t|}t||}ddlm} dD ]*}dD ] }|j||d}	tt|	| q@q8t	||}
tt
| t
|
 k d S r   )r`   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   )test_comparemeans_convenient_interface_1d<  s    
z9TestWeightstats.test_comparemeans_convenient_interface_1dN)r:   r;   r<   r=   rM   rm   ry   r   r   r   r   r   r   r   r   r[      s   
# r[   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CheckWeightstats1dMixinc                 C   s   | j }| j}t|d|jd t|jd|jd|jd t|jd|jd|jd |jdd}t|jddd|d |jdd}t|jddd|d tt	j
|jd|j d|j
d d S )Nr   rn   )r   r   ro   )rw   ru   r   r&   r-   r   r/   Zvar_ddofZstd_ddofr   rr   rz   )r'   rw   ru   Zvar1Zstd1r   r   r   
test_basicQ  s    z"CheckWeightstats1dMixin.test_basicc                 C   s2   | j }| j}t|dd d t|dd d S )NrC   rZ   rp   )rw   ru   r   rs   r   rt   r'   rw   ru   r   r   r   
test_ttesta  s    
 z"CheckWeightstats1dMixin.test_ttestc                 C   s  | j | j }}| j| j }}| j| j }}t||}tt||||fdd d |d t	t
||ddt
||dd}t| d d |d t	t
||ddt
||dd}t| d d |d t	t
||ddt
||dd}	t	t
||ddt
||dd}
t	t
||ddt
||dd}|	jdd}|
jdd}|jdd}t||d t||d |	jd	d}|
jd	d}|jd	d}t||d t||d |	jdd}|
jdd}|jdd}t||d t||d d S )
Nrj   rZ   rn   r   r   r   r   r   r   )r`   ra   rw   rx   rb   rc   r   r   r   r   r   Ztconfint_diff)r'   r`   ra   rw   rx   rb   rc   Zres_spr   Zcm0r   r   r   r   r   r   r   r   test_ttest_2samplek  sP     z*CheckWeightstats1dMixin.test_ttest_2samplec                 C   s   | j }d}| \}}||\}}}t||t|j d ||\}}}t||t|j d |t||f\}}}t||t|j d d S )Ng?rQ   )ru   r   rs   r   r   rk   r   Zvstack)r'   ru   alphalowZuppr|   r}   r~   r   r   r   test_confint_mean  s    z)CheckWeightstats1dMixin.test_confint_meanN)r:   r;   r<   r   r   r   r   r   r   r   r   r   O  s   
-r   c                   @   s   e Zd Zdd ZdS )CheckWeightstats2dMixinc                 C   s&   | j }| j}tt|j|jd d S )Nrn   )rw   ru   r   r   r{   rz   r   r   r   r   	test_corr  s    z!CheckWeightstats2dMixin.test_corrN)r:   r;   r<   r   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestWeightstats1d_ddofc           	      C   s   t jd d\}}d\}}|t j|d }|t j|d }t jdd|}t jdd|}|| | _| _|| | _| _t	||dd| _
t	||dd| _| j
 | _| j | _d S )Nr?   r\   r]   r   r^   r   r   rG   rH   r_   rW   r`   ra   rb   rc   r   ru   rv   rq   rw   rx   	r   rf   rg   rh   ri   r`   ra   rb   rc   r   r   r   rM     s    z"TestWeightstats1d_ddof.setup_classNr:   r;   r<   r=   rM   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestWeightstats2dc           	      C   s   t jd d\}}d\}}|t j|d }|t j|d }t jdd|}t jdd|}|| | _| _|| | _| _t	||d| _
t	||d| _| j
 | _| j | _d S )Nr?   r\   r]   rC   r   r^   rj   r   r   r   r   r   rM     s    zTestWeightstats2d.setup_classNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestWeightstats2d_ddofc           	      C   s   t jd d\}}d\}}|t j|d }|t j|d }t jdd|}t jdd|}|| | _| _|| | _| _t	||dd| _
t	||dd| _| j
 | _| j | _d S )Nr?   r\   r]   rC   r   r^   r   r   r   r   r   r   rM     s    z"TestWeightstats2d_ddof.setup_classNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestWeightstats2d_nobsc           	      C   s   t jd d\}}d\}}|t j|d }|t j|d }t jdd|}t jdd|}|| | _| _|| | _| _t	||dd| _
t	||dd| _| j
 | _| j | _d S )	Nr?   )r@      r]   rC   r   r^   r   r   r   r   r   r   r   rM     s    z"TestWeightstats2d_nobs.setup_classNr   r   r   r   r   r     s   r   c                  C   sp   d} d}d}d}t | |dd\}}}t||g||gd d} d	}d
}t | |dd\}}}t||g||gd d S )N)r   rZ   rC   )g?g333333@g@g9(?ger   r      )r   rZ   rC   r^   gJ?g*ʿ)r   r   )abprtrr|   r}   r   r   r   r   test_ttest_ind_with_uneq_var  s    r   c            
      C   sP  dd l m  m}  ddg}ddg}| jdddd}t||}|d}t||dd	d
 t|t|d d }|d}t	||dd |
dd}| dddd}t	|d |d dd ddg}ddg}t||}t| | }| tddgtddg}t|d |d dd t|| }	t|	d |d dd t	|	|dd d S )Nr   r   rP   rT   g      4@rE   )valuegQ?g~jth?r%   Zatolg      5@r@      )decimalg?g333333?rS   r$   )Zstatsmodels.stats.proportionr   Z
proportionZproportions_ztestr   
ztest_meanr   r   arrayr   Z
ztost_meanZproportions_ztostr	   rq   Zproportions_chisquarer5   r   	ztest_ind)
Zsmpropr`   rb   r   rl   r   r   ra   rc   Zres1ar   r   r   test_ztest_ztost  s0    



r   g}y4S4@gWCf=gOǯ?gfa?@g)A@g@	two.sidedzTwo-sample z-Testzx and yg4?g/In@lessg   @f=g/3	?greatergK͎@gNs?r   gc?g*,g9O*?rZ   g[-@g띏F)>gj2@gO+@皙@zOne-sample z-Testxgcg@,j?g q@皙@gF)>g&@gA'@g;,#>gnC?g飉@r   g?gki @g=g=秘?ZsmallerZlargerz	two-sided)r   r   r   c                   @   s    e Zd Zedd Zdd ZdS )	TestZTestc                 C   sj   t ddddddddd	d
dg| _t ddddddddg| _t| j| _t| j| _t| j| j| _d S )Ng333333@gffffff@g      @r   g333333@g      @r   gffffff@g@gffffff@g333333@g      @g@gffffff@g      @gffffff@g      @)	r   r   r`   ra   r   rl   r   r   r   rL   r   r   r   rM     s       zTestZTest.setup_classc           
      C   s  | j | j }}| j}ttttttfD ]*}t	|||j
t|j d\}}t||jdd t||jddd |j|j
t|j d\}}t||jdd t||jddd |j }t|d rtj |d< t|d rtj|d< t||dt|j d}t||dd |jt|j d}t||dd t|||j
t|j d}t|||j
 dd q$tttfD ]F}t	|||j
t|j d	d
\}}t||jdd t||jddd q\| j}	tttfD ] }t	||j
t|j d\}}t||jdd t||jddd |	j|j
t|j d\}}t||jdd t||jddd |j }t|d rXtj |d< t|d rrtj|d< t|dt|j d}t||dd |	j t|j d}t||dd qd S )N)r   alternativeg|=r$   gؗҜ<r   r   r   )r   r   )r   r   r   )!r`   ra   r   ztest_ztest_smallerztest_largerztest_muztest_smaller_muztest_larger_mur	   
null_valuealternativesr   r   	statisticp_valuer   conf_intcopyr   isnaninfr
   Zzconfint_diffztest_unequalztest_smaller_unequalztest_larger_unequalrl   ztest_mu_1sztest_smaller_mu_1sztest_larger_mu_1sr   Zzconfint_mean)
r'   r`   ra   r   ZtcZzstatZpvalZtc_conf_intcirl   r   r   r   test  s|      












zTestZTest.testN)r:   r;   r<   r=   rM   r   r   r   r   r   r     s   
r   c                  C   s6   dg} dg}t | |}|dddgdk s2td S )Nr   g        rE         ?r   r7   allAssertionErrorr`   rb   rl   r   r   r   test_weightstats_len_1,  s    
r   c                  C   sX   dgdgg} dgdgg}t | |}ttt|j |ddgdk  sTtd S )Nr   rZ   rE   r   )	r   printr   r   r   r   r7   r   r   r   r   r   r   test_weightstats_2d_w13  s
    
r   c                  C   s>   dgg} dgg}t | |}|dddgdk  s:td S )Nr   r   rE   r   r   r   r   r   r   test_weightstats_2d_w2;  s    
r   )=__doc__Znumpyr   Zscipyr   Zpandasr   Znumpy.testingr   r   r   Zstatsmodels.stats.weightstatsr   r   r   r	   r
   Zstatsmodels.tools.testingr   r   r>   rO   rX   rY   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   Zestimater   r   methodZ	data_namer   nanr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s  6 *V	)W