U
    md{                     @   s  d Z ddlmZmZ ddlZddlZddl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Z ddlm  m  mZ dd Ze \ZZZejeed	Zeejeeg\ZZejej kst!ejej kst!e"d
ddddddddddddgZ#e"dddddddddd d!d"d#gZ$e"d$d%d&d'd(d)d*d+d,d-d.d/d0gZ%e"d1d2d3d4d5d6d7d8d9d:d;d<d=gZ&e"d>d?d@dAdBdCdDdEdFdGdHdIdJgZ'dKdL Z(dMdN Z)dOdP Z*ee+e$Z,e,dQd e,ddQ  Z,edde,f Z-G dRdS dSZ.G dTdU dUZ/G dVdW dWe/Z0G dXdY dYe/Z1G dZd[ d[e/Z2G d\d] d]e/Z3G d^d_ d_e/Z4G d`da dae/Z5G dbdc dce/Z6G ddde dee/Z7G dfdg dge/Z8G dhdi die/Z9G djdk dkZ:G dldm dmZ;G dndo doe;Z<dpdq Z=drds Z>dS )tz>

Created on Fri Oct 04 13:19:01 2013

Author: Josef Perktold
    )lrangelmapN)assert_allcloseassert_equal)add_constant)OLSc            
      C   s  t jtd } t j| d}t|}|d  }|jd }|D ]V}t	
||d| < t|D ]6}|j|j| df |kr`d|j|j| d| f< q`q`qBd|d< t|ddd	d
ddddddddg dd}t|d	d
ddddddddddddg }|d }	|	||fS )Nr   zgriliches76.dtayearzD_%i   constsiqexprtenurernssmsaD_67D_68D_69D_70D_71D_73T)prependZmedZkwwZageZmrtZlw)ospathsplit__file__joinpdZ
read_statauniqueshapenpzerosrangelocindexr   )
curdirr   Zgriliches76_dataZyearsNyriXZY r,   f/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/sandbox/regression/tests/test_gmm.pyget_griliches76_data   sJ    

             r.   )dtypez(Intercept)r   r   r   r   r   r   r   r   r   r   r   r   gjP"@U?AAJh9L,x<?Vyz?So"ZpRg$?<vC"	^?1?j(S?]Nkw?g(޷?g%/\?gk?ge^os?gÆ~؀?g+B|D?g?wY~?g`0?g{{?gC_ݪ?g,?g)RĖܮ?g/i?g(V?gZ)@gZtS| @g2AMgK|%@g0@gMC']gZ)r+@ggĜ?g`3eLf@g͛y(&@g%?g-cyW?g_`!9g SF<g r?gEȨ+>g :5>gmj?gĊÛ?g j6E?gW?g ]k?gg	p?g
?g{=?c                  C   sV   t ttt} |  }tj\}}t|jtddd t|j	t	ddd t
| drRtd S )NHz>&.>rtolatolr   gv!>Z_results)gmmIV2SLSendogexog
instrumentfitr   r   paramsbsehasattrAssertionError)modresnkr,   r,   r-   test_iv2sls_rU   s    
rN   c            	      C   s   t j\} }tj\}}ttjt| }tj|}t	t
t t}|jtt jd td|ddddd}t|jtddd t|jtd	dd |j|j|}t|t|jdd
d d S )Nr	   r   bfgs:0yE>Zgtoldispmaxiterinv_weightsoptim_method
optim_argsg-C6?r=   g
ףp=
?h㈵>)rC   r   rD   r    dotTlinalginvr@   IVGMMrB   rE   onesfloatr   rF   rG   modelscorer!   )	rL   rM   nobsk_instrw0invw0rJ   rK   ra   r,   r,   r-   test_ivgmm0_ri   s    

rf   c                  C   s   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g}tj\}}tj\}}t tjt| }t j|}t	t
t j}tt
tt}	|	j|d|ddddd }
d S )!Ngr^RkP"@r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   g(㗏޷?grh-q?geE<?gЪt?g+i|?g a?g¯B?gLǵ?gO8z?gM?gZ?gmK?gZ2}e?gP'?r	   rO   ư>r   rQ   rS   )r    arrayrC   r   rD   rY   rZ   r[   r\   r   rB   rE   rF   r@   r]   )Zparams_stataZ	bse_statarL   rM   rb   rc   rd   re   startrJ   rK   r,   r,   r-   test_ivgmm1_stata   s>    
      
      

rj   r	   c                   @   s:   e Zd Zedd Zdd Zejjde	dddd	 Z
d
S )
TestGMMOLSc                 C   st   t }tt| }|j\}}t|j|| }t	t||}|jt
|jd td|ddddd}|| _|| _d S )Nr	   r   rO   rg   rQ   rS   )exog_str   rB   rE   r   r    rY   rZ   r@   r]   r^   r_   res1res2)clsrC   res_olsrb   rc   rd   rJ   rK   r,   r,   r-   setup_class   s    
 zTestGMMOLS.setup_classc                 C   s|   | j | j }}t|j|jddd t|j|jddd |jjjd }d}t|j| |jddd t|j| |jddd d S )NMb@?r   r=   h㈵>r	   rX   r;   )	rm   rn   r   rF   r`   rC   r   rG   ZHC0_se)selfrm   rn   rL   dffacr,   r,   r-   
test_basic   s    zTestGMMOLS.test_basicz!Not asserting anything meaningfulTreasonZraisesstrictc                 C   s   | j | j }}td S N)rm   rn   NotImplementedErrorrt   rm   rn   r,   r,   r-   
test_other   s    zTestGMMOLS.test_otherN)__name__
__module____qualname__classmethodrq   rv   pytestmarkxfailr{   r}   r,   r,   r,   r-   rk      s   
 rk   c                   @   sL   e Zd ZddgZddgZdd Zdd Zdd Zej	j
d	d
 Zdd ZdS )CheckGMMrX   Ơ>c                 C   s   | j | j }}| j\}}t|j|j|dd t|j|jd|d |jjjd }d}| j\}}t|j	| |j	|dd t|j	| |j	d|d d S )Nr   r=   r	   )
rm   rn   
params_tolr   rF   r`   rC   r   bse_tolrG   )rt   rm   rn   r>   r?   rL   ru   r,   r,   r-   rv      s    

zCheckGMM.test_basicc                 C   s:   | j | j }}t|j|jddd t|j|jddd d S )NrX   r   r=   -C6
?)rm   rn   r   qQZjvalJr|   r,   r,   r-   r}      s    zCheckGMM.test_otherc           	      C   s   | j | j }}tt|j}||}t|j|j	ddd t|j
|jddd | j\}}t|j|j	|d |d t|j
|j|d |d ||d d }|j|d d dd}d S )N-q=r   r=   
   T)Zscalar)rm   rn   r    eyelenrF   t_testr   tvaluetvaluespvaluepvaluesr   f_testZ	wald_test)	rt   rm   rn   restrictionres_tr>   r?   res_fZres_waldr,   r,   r-   test_hypothesis   s    

zCheckGMM.test_hypothesisc                 C   s0   | j }| }tt|jd t|jd  d S Nr	   rm   summaryr   r   tablesrF   rt   rm   summr,   r,   r-   test_summary   s    zCheckGMM.test_summaryc                 C   s>   t | j}d|_| }dt|ks*tdt|ks:td S )NTzP>|t|zP>|z|)copydeepcopyrm   use_tr   strrI   r   r,   r,   r-   
test_use_t   s
    zCheckGMM.test_use_tN)r~   r   r   r   r   rv   r}   r   r   r   smoker   r   r,   r,   r,   r-   r      s   
r   c                   @   s   e Zd Zedd ZdS )
TestGMMSt1c           	      C   sz   t }tt| j}tj\}}ttj	t| }t
t|t}|j|d|ddddddid}|| _d	d
lm} || _d S )Nr   rO   rg   r   rQ   centeredFrT   rU   rV   rW   wargsr	   )results)rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   r]   rm   Zresults_gmm_griliches_iterr   rn   	ro   rC   ri   rb   rc   rd   rJ   Zres10r   r,   r,   r-   rq     s    

 zTestGMMSt1.setup_classNr~   r   r   r   rq   r,   r,   r,   r-   r     s   r   c                   @   s   e Zd Zedd ZdS )TestGMMStTwostepc           	      C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|ddddd	d
id}|| _ddlm} || _d S )Nr   rX   r      rO   rg   r   rQ   r   Fr   r	   results_twostepr   r   rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   r]   rm   results_gmm_grilichesr   rn   r   r,   r,   r-   rq     s    



 zTestGMMStTwostep.setup_classNr   r,   r,   r,   r-   r     s   r   c                   @   s   e Zd Zedd ZdS )TestGMMStTwostepNOc           	   	   C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|dddddd	id	d
}|| _ddlm} || _d S )Nr   rX   rg   r   rO   r   rQ   r   FrT   rU   rV   rW   r   has_optimal_weightsr	   r   r   r   r,   r,   r-   rq   1  s     



  zTestGMMStTwostepNO.setup_classNr   r,   r,   r,   r-   r   .  s   r   c                       sB   e Zd Zedd Zdd Zejjde	dd fdd	Z
  ZS )
TestGMMStOnestepc           	      C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|ddddd}|| _d	d
lm} || _d S )Nrr   r   y&1|?r   rO   rg   rQ   rS   r	   results_onestepr   r   rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   r]   rm   r   r   rn   	ro   rC   ri   rb   rc   rd   rJ   rK   r   r,   r,   r-   rq   H  s    



zTestGMMStOnestep.setup_classc                 C   sJ   | j | j }}tt|jdd}| j j| j jtj	
| j j}d S )NFr   )rm   rn   r    sqrtdiag_cov_paramsr`   gmmobjectiverF   r[   r\   weights)rt   rm   rn   rG   r   r,   r,   r-   test_bse_other\  s    zTestGMMStOnestep.test_bse_otherq vs Q comparison failsTrw   c                    s   t t|   d S rz   )superr   r}   rt   	__class__r,   r-   r}   i  s    zTestGMMStOnestep.test_other)r~   r   r   r   rq   r   r   r   r   rI   r}   __classcell__r,   r,   r   r-   r   F  s   
 r   c                       s:   e Zd Zedd Zejjdedd fddZ	  Z
S )TestGMMStOnestepNOc           	   	   C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|dddddd	id	d
}|| _ddlm} || _d S )Nrs   rg   rX   r   r   rO   rQ   r   Fr   r	   r   r   r   r,   r,   r-   rq   r  s     



  zTestGMMStOnestepNO.setup_classr   Trw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}     s    zTestGMMStOnestepNO.test_otherr~   r   r   r   rq   r   r   r   rI   r}   r   r,   r,   r   r-   r   o  s   
 r   c                       sB   e Zd Zedd Zejjdedd fddZ	dd	 Z
  ZS )
TestGMMStOneiterc           	      C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|ddddd	}|| _dd
lm} || _d S )Nrr   r   r   r	   rO   rg   r   rQ   rS   r   r   r   r,   r,   r-   rq     s    



 zTestGMMStOneiter.setup_classr   Trw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}     s    zTestGMMStOneiter.test_otherc           	      C   s   | j | j }}|j|j}|j|}tt|j	d|j
d}tt|j	dd}tjd }ttjt| }| j j| j j|}d S )NFr   r   r   r   )rm   rn   r`   momcondrF   Zcalc_weightmatrixr    r   r   r   r   rD   r   rY   rZ   r   )	rt   rm   rn   ZmomswrG   rb   rd   r   r,   r,   r-   r     s    

zTestGMMStOneiter.test_bse_other)r~   r   r   r   rq   r   r   r   rI   r}   r   r   r,   r,   r   r-   r     s   
 r   c                       s:   e Zd Zedd Zejjdedd fddZ	  Z
S )TestGMMStOneiterNOc           	   	   C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|ddddd	d
id
d}|| _ddlm} || _d S )Nrs   rg   rX   r   r	   rO   r   rQ   r   Fr   r   r   r   r,   r,   r-   rq     s     



  zTestGMMStOneiterNO.setup_classr   Trw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}     s    zTestGMMStOneiterNO.test_otherr   r,   r,   r   r-   r     s   
 r   c                       s:   e Zd Zedd Zejjdedd fddZ	  Z
S )TestGMMStOneiterNO_Linearc           	   	   C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }tt|t}|j|d|dddd	d
didd}|| _tt|t}|j|d|dddd	d
didd}|| _ddlm} || _d S )Ng:0y5>r<   &.>绽|=r	   rO   rP   r   rQ   r   Fr   rg   r   )r   r   rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   LinearIVGMMrm   r]   res3r   r   rn   r   r,   r,   r-   rq     s0    



  
  z%TestGMMStOneiterNO_Linear.setup_classr   Trw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}     s    z$TestGMMStOneiterNO_Linear.test_otherr   r,   r,   r   r-   r     s   
 r   c                       sF   e Zd Zedd Zejjdedd fddZ	 fdd	Z
  ZS )
TestGMMStOneiterNO_Nonlinearc           
   	   C   s   ddg| _ ddg| _t}tt| j}tj\}}t	
tjt| }dd }tt|t|}|j|d|ddd	d
ddidd}|| _tt|t}|j|d|ddd	d
ddidd}|| _ddlm}	 |	| _d S )Nr   rX   皙?c                 S   s   t || S rz   )r    rY   )rF   rC   r,   r,   r-   func  s    z6TestGMMStOneiterNO_Nonlinear.setup_class.<locals>.funcr	   rO   rP   r   rQ   r   Fr   rg   r   )r   r   rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   ZNonlinearIVGMMrm   r]   r   r   r   rn   )
ro   rC   ri   rb   rc   rd   r   rJ   rK   r   r,   r,   r-   rq     s2    



  
  z(TestGMMStOneiterNO_Nonlinear.setup_classr   Trw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}     s    z'TestGMMStOneiterNO_Nonlinear.test_otherc                    s   | j jd }| j j}| j j||}t| j jj| j j||}t||ddd t||ddd | j j| j j|}t|t	t
|ddd d S )N皙?rg   r   r=   r;   rP   )rm   rF   r   r`   ra   r   r   r   r    r!   r   )rt   rF   r   Zsc1Zsc2r   r,   r-   
test_score$  s    z'TestGMMStOneiterNO_Nonlinear.test_score)r~   r   r   r   rq   r   r   r   rI   r}   r   r   r,   r,   r   r-   r     s   
 r   c                       s:   e Zd Zedd Zejjdedd fddZ	  Z
S )TestGMMStOneiterOLS_Linearc           	   	   C   s   ddg| _ ddg| _t}tt| }tt|j	}t
j\}}t|j|| }tt||}|j|d|ddiddddd	d
}d	|_|jt|j	 |_|| _|| _d S )Ndy=r   r   rR   ZiidFk_params)r   ddofT)rT   rU   rW   Zweights_methodr   r   )r   r   rl   r   rB   rE   r    r^   r   rF   rD   r   rY   rZ   r@   r   r   rb   df_residrm   rn   )	ro   rC   rp   ri   rb   rc   rd   rJ   rK   r,   r,   r-   rq   4  s$    



z&TestGMMStOneiterOLS_Linear.setup_classz&RegressionResults has no `Q` attributeTrw   c                    s   t t|   d S rz   )r   r   r}   r   r   r,   r-   r}   R  s    z%TestGMMStOneiterOLS_Linear.test_other)r~   r   r   r   rq   r   r   r   AttributeErrorr}   r   r,   r,   r   r-   r   2  s   
 r   c                   @   s    e Zd Zedd Zdd ZdS )
TestGMMSt2c           	   	   C   s   t }tt| j}tj\}}ttj	t| }t
t|t}|j|d|dddddddd}|| _d	d
lm} || _t
t|t}|j|d	|dddddddd}|| _d S )Nr   r   F)r   r   rO   rg   rQ   )rT   rU   r   rV   rW   r	   )results_gmm2s_robust)rl   r   rB   rE   rF   rD   r   r    rY   rZ   r@   r]   rm   results_ivreg2_grilichesr   rn   r   r   r,   r,   r-   rq   ^  s(    

 
 zTestGMMSt2.setup_classc              	   C   s  | j | j }}t|j|jddd t|j|jddd |jjjd }td}t|j	| |j	ddd t|j	| |j	ddd tt
|jd|jd}t|j	|j	d	dd tt
|jd|jdd
}t|j	|j	ddd t| jj	|j	ddd t| jj	|j	ddd d S )Nr   r   r=   rX   gN`s?g{Gzt?Tr         ?)r   r   Zuse_weightsg?)rm   rn   r   rF   r`   rC   r   r    r   rG   r   r   r   r   )rt   rm   rn   rL   ZdffactrG   r,   r,   r-   rv   y  s$    


zTestGMMSt2.test_basicN)r~   r   r   r   rq   rv   r,   r,   r,   r-   r   Z  s   
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zejj	d	d
 Z
dS )CheckIV2SLSc                 C   s   | j | j }}t|j|jddd t|j|jddd |jjjd }t|j|jddd t|j|jddd t|j|jddd d S )Nr<   r   r=   r   r   r   )	rm   rn   r   rF   r`   rC   r   rG   r   )rt   rm   rn   rL   r,   r,   r-   rv     s    zCheckIV2SLS.test_basicc                 C   s   | j | j }}t|j|jddd t|j|jddd t|j|jddd t|j	|j
ddd tt|j|jddd t|j|jddd t|j|jddd t|j|jddd t|j|jddd t|j|j t|j|j d S )Nr;   r   r=   r   rP   r<   )rm   rn   r   Zrsquaredr2Zrsquared_adjZr2_afvalueFf_pvalueFpr    r   Z	mse_residZrmseZssrZrssZuncentered_tssyyZcentered_tssZyycZessZmssr   Zdf_modelZdf_mr   Zdf_rr|   r,   r,   r-   r}     s    zCheckIV2SLS.test_otherc                 C   s   | j | j }}tt|j}||}t|j|j	ddd t|j
|jddd ||d d }t|j|jddd t|j
|jddd t|j|jddd t|j
|jddd d S )Nr   r   r=   r   r   rP   )rm   rn   r    r   r   rF   r   r   r   r   r   r   r   r   r   r   r   )rt   rm   rn   r   r   r   r,   r,   r-   r     s    
zCheckIV2SLS.test_hypothesisc                 C   sN   | j | j }}| }t|d |jd ddd t|d |jd ddd d S )	Nr   ZDWHr   r=   r	   ZDWHpr   g}:)rm   rn   Zspec_hausmanr   Zhausman)rt   rm   rn   Zhausmr,   r,   r-   test_hausman  s    zCheckIV2SLS.test_hausmanc                 C   s0   | j }| }tt|jd t|jd  d S r   r   r   r,   r,   r-   r     s    zCheckIV2SLS.test_summaryN)r~   r   r   rv   r}   r   r   r   r   r   r   r,   r,   r,   r-   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestIV2SLSSt1c                 C   sP   t }tt| j}tj\}}tt|t}| }|| _	ddl
m} || _d S )Nr	   )results_small)rl   r   rB   rE   rF   rD   r   r@   rA   rm   r   r   rn   )ro   rC   ri   rb   rc   rJ   rK   r   r,   r,   r-   rq     s    
zTestIV2SLSSt1.setup_classc                 C   st  t jd}|dd}|d}t d|d d df  t d|  |d d df< t |d d dgf |d d d f f}t d|d t d|d d df   }|d d df |d d df  |  }}|d d d f }t|}t|}	|d d df }
|}t|}|j	d d dgf }|j	d d df }|}t|d d df }|j
}t|}|	|||f}||
|||f}||||f}t||| }t||
| }t||
| }|D ]}|D ]}|D ]}t ||jd k}
t ||jd k}|r|
sqt||| }|r:t|j|j n*|
rV|sVt|j|j nt|j|j q֐qΐqd S )Ni     r   r   r   r	   )r    randomZRandomStateZrandnr   column_stackr   ZSeriesZ	DataFrameZilocvaluesr@   rA   rE   sizer   r   rF   )rt   rsxzeZy_1dyZy_2dZy_seriesZy_dfZx_1dZx_2dZx_dfZx_df_singleZx_seriesZz_2dZz_seriesZz_1dZz_dfZysZxsZzsrn   rm   Zres1_2sintrZ_yZ_xZ_zrK   r,   r,   r-   test_input_dimensions  sL    
4(.(



z#TestIV2SLSSt1.test_input_dimensionsN)r~   r   r   r   rq   r   r,   r,   r,   r-   r     s   
r   c                  C   sb   t d d d df } tt| t}| }t|jtj	 |
 }tt|jd t|jd  d S )Nr   r	   )rl   r@   rA   rB   rD   rE   r   r   r    nanr   r   r   rF   )rC   rJ   rK   r   r,   r,   r-   test_noconstant  s    r   c            
      C   sX  t dddd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ddddddg}t t t| | f}G dd dtj}t ddddg}||| |dddj|ddid}| }t	t|j
d t|jd  d d! tt|jD }t	|jj| ||| |ddd}d"d#d$d%g}|| |j|ddid}	t	|	jj| d S )&Ng      ?g333333?g@g       @g?gffffff?g?r   gffffff?gQ?r   g?r   gɿg?g333333ӿg      gٿgg333333?gQѿgQ?c                   @   s   e Zd Zdd ZdS )ztest_gmm_basic.<locals>.GMMbasec                 S   s|   |\}}}}| j d d d f }| j}| j}|| ||  | }	|| ||  d ||d|   d  | }
t|	|
f}|S )Nr      )rB   rC   rD   r    r   )rt   rF   p0p1p2Zp3rB   rC   instZmom0Zmom1gr,   r,   r-   r   2  s    z'test_gmm_basic.<locals>.GMMbase.momcondN)r~   r   r   r   r,   r,   r,   r-   GMMbase1  s   r  r   g{Gz?r	      )rB   rC   rD   Zk_momsr   rR   )rW   c                 S   s   g | ]}d | qS )zp%2dr,   ).0r(   r,   r,   r-   
<listcomp>C  s     z"test_gmm_basic.<locals>.<listcomp>betagammapsiphi)r    rh   r   r^   r   r@   ZGMMrE   r   r   r   rF   r"   r`   Z
exog_namesZset_param_names)
cdZdcdr  r  Zbeta0rK   r   ZpnamesrJ   rm   r,   r,   r-   test_gmm_basic(  sR                   
 

r  )?__doc__Zstatsmodels.compat.pythonr   r   r   r   r   numpyr    Znumpy.testingr   r   Zpandasr   Zstatsmodels.tools.toolsr   Z#statsmodels.regression.linear_modelr   Z"statsmodels.sandbox.regression.gmmZsandboxZ
regressionr@   r.   Zyg_dfZxg_dfZzg_dfZasarrayr_   rB   rC   rD   r/   Zfloat64rI   rh   varnamesrF   rG   r   r   rN   rf   rj   r   idxrl   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r,   r,   r,   r-   <module>   s   !                   
      '<)1#3(E?>