U
    Kvf4                     @   s   d Z ddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlm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G dd deZG dd dZdS )z=
Created on Mon May 05 17:29:56 2014

Author: Josef Perktold
    N)assert_allclose)OLSGLS)TheilGLSc                   @   s@   e Zd Zedd Zdd Zdd Zdd Zej	j
d	d
 ZdS )TestTheilTextilec                 C   s  t jt jt}t j|dd}tj|dd| _d	 }t
d	 tdd}|d d d	f }t
|d d d
d f t
|jd f}t
d	ddgdd	dgg}d	dg}t
ddgddgg}	t|||||	d}
|
jddd| _d| jjd< d	dlm} |j| _d S )Nresultsztheil_textile_predict.csv,)sepzyear	lconsump	lincome	lpricea_          1923	1.99651	1.98543	2.00432
        1924	1.99564	1.99167	2.00043
        1925	2	2	2
        1926	2.04766	2.02078	1.95713
        1927	2.08707	2.02078	1.93702
        1928	2.07041	2.03941	1.95279
        1929	2.08314	2.04454	1.95713
        1930	2.13354	2.05038	1.91803
        1931	2.18808	2.03862	1.84572
        1932	2.18639	2.02243	1.81558
        1933	2.20003	2.00732	1.78746
        1934	2.14799	1.97955	1.79588
        1935	2.13418	1.98408	1.80346
        1936	2.22531	1.98945	1.72099
        1937	2.18837	2.0103	1.77597
        1938	2.17319	2.00689	1.77452
        1939	2.2188	2.0162	1.78746         r   gffffffg
ףp=
?g{Gz)q_matrixsigma_prior
data-priorT)cov_typeZuse_tg{:(?scale)results_theil_textile)ospathdirnameabspath__file__joinpdZread_csvres_predictsplitnparrayfloatZreshapecolumn_stackonesshaper   fitres1_cacher   r   res2)clsZcur_dirfilepathnamesdataendogexogr_matrixZr_meanZcov_rmodZ	resmodule r/   K/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/regression/tests/test_theil.pysetup_class   s,    

 *zTestTheilTextile.setup_classc           
      C   s  | j jd d d df j}|\}}}}}}t| jj|dd d}d}d}t| jj| |dd t| jj| |dd | j }	t|	d d df |dd t|	d d df |dd t| jj	| j j
dd | jj| j j }tt| jj| | j jdd t| jj| jd	 d
d d S )N   >rtolgd64y?g_l)?r   r   g{Gz?fittedvaluesg    ׇA)atol)r&   Zparams_tableTr   r$   paramsbsetvaluesZconf_intrsquaredr2df_residZdf_rr   sqrtZ	mse_residZrmser6   r   )
selfptZparams2Zbse2Ztvalues2Zpvalues2Zci_lowZci_upp	corr_factcir/   r/   r0   
test_basicF   s*    
  zTestTheilTextile.test_basicc                 C   s^   | j  }tt|d | jjdd tt|d | jjdd | j  }t|ddd d S )Nr   r3   r4   r   gCcn(B:?)	r$   Ztest_compatibilityr   r   Zsqueezer&   compatZpvalueZ
share_data)r@   Ztcfracr/   r/   r0   
test_otherd   s
    

zTestTheilTextile.test_otherc                 C   sT   t | jjj| jjj }| jjjddd}t|j|jdd t|j|jdd d S )Nr   r   )Z
pen_weightr   g|=r4   )	r   r$   modelr+   r,   r#   r   r9   r:   )r@   res_olsZ	res_theilr/   r/   r0   test_no_penalizationr   s    z%TestTheilTextile.test_no_penalizationc              	   C   s$   t t | j  W 5 Q R X d S )N)pytestZwarnsUserWarningr$   summary)r@   r/   r/   r0   test_summaryx   s    zTestTheilTextile.test_summaryN)__name__
__module____qualname__classmethodr1   rD   rG   rJ   rK   markZsmokerN   r/   r/   r/   r0   r      s   
.r   c                   @   s(   e Zd ZddiZedd Zdd ZdS )CheckEquivalenceMixindefault)-C6?g#B;c                 C   sn   t jd d\}}dt dddddg }t j||}d|d d df< t ||dt j|  }||fS )Ni@ )            ?皙?r   r   r   )r   randomseedr   randndot)r'   nobsk_varsbetaxyr/   r/   r0   
get_sample   s    z CheckEquivalenceMixin.get_samplec                 C   s   dddddddg}dd	d
g}dd l }| |}t| ddsD|| |D ]l}t| j|}t| j|}t|dks|d t| }| j	|| jd \}}	d| }
t
||||	|
d qHt
| jj| jjddd t
| jj| jjddd d S )Nr9   r<   r>   Zdf_modelZllfZaicbicr:   r;   pvaluesr   skip_inferenceFr   rU   zattribute: )r5   r7   err_msgMbP?rV   )r5   r7   )copygetattrextendr$   r&   r   sizelentolgetr   r6   Zresid)r@   Zattributes_fitZattributes_inferencerj   
attributesZattZr1r=   r5   r7   messager/   r/   r0   test_attributes   s4      


  z%CheckEquivalenceMixin.test_attributesN)rO   rP   rQ   ro   rR   rd   rs   r/   r/   r/   r0   rT   ~   s   
	rT   c                   @   s   e Zd Zedd ZdS )
TestTheil1c                 C   sR   |   \}}t||ddddgd}|d| _t||d d d df  | _d S )Nr         ?r   @    rd   r   r#   r$   r   r&   r'   rc   rb   mod1r/   r/   r0   r1      s    zTestTheil1.setup_classNrO   rP   rQ   rR   r1   r/   r/   r/   r0   rt      s   rt   c                   @   s   e Zd Zedd ZdS )
TestTheil2c                 C   sB   |   \}}t||ddddgd}|d| _t|| | _d S )Nr   ru   rv   ry   rz   r/   r/   r0   r1      s    zTestTheil2.setup_classNr|   r/   r/   r/   r0   r}      s   r}   c                   @   s   e Zd Zedd ZdS )
TestTheil3c                 C   s`   d| _ |  \}}t||f}tddd}t|||d}|jddd| _t|| | _	d S )NTrX   
   r-   ri   r   r   )
rg   rd   r   r    eyer   r#   r$   r   r&   )r'   rc   rb   Zxdr-   r{   r/   r/   r0   r1      s    zTestTheil3.setup_classNr|   r/   r/   r/   r0   r~      s   r~   c                   @   s   e Zd Zedd ZdS )TestTheilGLSc                 C   sv   |   \}}t|}t||d k d }t|||ddddgd}|d| _t||d d d df |d | _d S )	Nr   rY   r   ru   )sigmar   rw   rx   )r   )	rd   rn   r   aranger   r#   r$   r   r&   )r'   rc   rb   r_   weightsr{   r/   r/   r0   r1      s    zTestTheilGLS.setup_classNr|   r/   r/   r/   r0   r      s   r   c                   @   s   e Zd Zedd ZdS )TestTheilLinRestrictionc                 C   s   |   \}}|d d d df  }|d d df  |d d df 7  < t||d d d df dddggd}|d| _t|| | _dd	d
}|| j || _d S )Nr   r   rx   r   r
   r   rw   )rV   gH׊>)gMb@?r   )rf   r;   )	rd   rj   r   r#   r$   r   r&   updatero   )r'   rc   rb   x2r{   ro   r/   r/   r0   r1      s    $&z#TestTheilLinRestriction.setup_classNr|   r/   r/   r/   r0   r      s   r   c                   @   s   e Zd Zedd ZdS )TestTheilLinRestrictionApproxc                 C   s   |   \}}|d d d df  }|d d df  |d d df 7  < t||d d d df dddggd}|d| _t|| | _dd l}|| j}dd	d
d}|| || _d S )Nr   r   rx   r   r
   r   d   )g333333?r   )g?r   )g{Gz?ri   )rU   r9   rf   )	rd   rj   r   r#   r$   r   r&   ro   r   )r'   rc   rb   r   r{   rj   ro   Ztol2r/   r/   r0   r1      s    $&
z)TestTheilLinRestrictionApprox.setup_classNr|   r/   r/   r/   r0   r      s   r   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestTheilPanelc           	      C   s   d}d}|| }d}ddl m} ||||dd}d|j| |_td	|j | }t	|j
d d d
d f |jd d d f t|kf}|| _|| _|| _
t|| | _d S )Ni,  rX   rx   r   )PanelSampleiɠ )r\   r   r\   r   )Z&statsmodels.sandbox.panel.random_panelr   Zrandom_stater]   Zgroup_meansprintr\   Zgenerate_panelr   r    r,   groupsr   dgpr+   r   r#   rI   )	r'   r_   Znobs_in_groupsr`   r   r   rc   rb   r/   r/   r0   r1     s     zTestTheilPanel.setup_classc              @   C   s  | j }| j}| jj| jj }}t|d d| t|d |d f  }tjt	|d |f|f }t	|d }d|d d |d f< d}t
|||||d}	|	 }
tddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBg>}t|
j| |	jdCdD}|	jdEdD}|	jdFdD}|	jdGdD}t||dHdI t|dJdKdI t|dLdKdI t|dMdKdI t|dNdKdI d S )ONr   ru   r
   r-   r   r   gUG4?g$?gw3?gS?d @g;ۣ@gZ8@gq?g:_@gpp@gDTק	@ge?.@g$d@g30@ga)y@gYr>	@gFbz@gSi<@g@$~@g D,(@gx@gV4JUb@g}?B@g!@g7@g>{V@g2f"@gk^4;]	@gl~4@g{CCY@g!Hc@g?gd?gpC9@gҚ|^?g6g@go&X@gcF	@gx*gs@gK@g\23y ?gW@@gwƚ@gܤ?	@g<Z@g'U<@gں'Q'{@gn@g>({*3@g &B!@gcAJ-@gƉ^@grC|@g+WOZ@g&Ϧ@geY@g9M%@g"4Ə	@gW3|UxA@g$,_ @g|]@gOyL@gF}@Zaicc)methodZgcvZcvre   rZ   r4   g%f@rV   gfffff@g "@g2gf?)r+   r,   r   r   r`   r   r   r!   Zc_zerosr   r#   r   r   r9   Zselect_pen_weight)r@   rc   rb   r   r`   ZRgRrlambdr.   resZparams1Zpen_weight_aiccZpen_weight_gcvZpen_weight_cvZpen_weight_bicr/   r/   r0   test_regression"  s                                                     zTestTheilPanel.test_regressionc                 C   s  | j }| j}t|}|d }tjd tjt|}|| }|| }d}t|d | |d |d |f 	 }	t||d  ||d d |f 	 }
|
j
|	j
 }t||d  ||d d |f t||	j||	  d}|j	dd}|j	dd}t||d d d |f 	 }t|j|jdd	 t|j
|j
 }t|j|j| d
d	 tddddddddddg
}t|j|dd	 d S )Nr   i r   r   r   r   Zsandwichg&.>r4   ri   gYf{?g#|?gԒ?gKe7?gW:%?g]U?gNlp.?g:->?gˤ]w?g*A?gHz>)r+   r,   rn   r   r[   r\   Zpermutationr   r   r#   r   r   r   r9   Z
cov_paramsr   r?   r:   r   )r@   r+   r,   r_   Zn05Zshuffle_idxZysxskZres_ols0Zres_ols1wZmod_1Zres_1pZres_1sZres_olsfrB   Zbse1r/   r/   r0   test_combine_subset_regressionM  sF    &&&
        z-TestTheilPanel.test_combine_subset_regressionN)rO   rP   rQ   rR   r1   r   r   r/   r/   r/   r0   r     s   
+r   )__doc__r   Znumpyr   Zpandasr   rK   Znumpy.testingr   Z#statsmodels.regression.linear_modelr   r   Z(statsmodels.sandbox.regression.penalizedr   r   rT   rt   r}   r~   r   r   r   r   r/   r/   r/   r0   <module>   s    i-
