U
    Ãmœdn#  ã                   @   sh   d Z ddlZddlmZ ddlmZ ddlmZm	Z	 ddlm
  mZ G dd„ dƒZG dd	„ d	eƒZdS )
z�Unit tests for generic score/LM tests and conditional moment tests

Created on Mon Nov 17 08:44:06 2014

Author: Josef Perktold
License: BSD-3

é    N)Úassert_allclose)ÚOLS)ÚCMTNeweyÚ
CMTTauchenc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCheckCMTc                 C   s:   | j }|  ¡ D ]&\}}t||d t |¡… d|d� qd S ©Ng‚vIhÂ%<=)ZrtolÚerr_msg)Úresults_scoreÚ	res_scorer   ÚnpÚsize©ÚselfÚexpectedÚmsgÚactual© r   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/stats/tests/test_diagnostic_other.pyÚ
test_score   s
    ÿzCheckCMT.test_scorec                 C   s:   | j }|  ¡ D ]&\}}t||d t |¡… d|d� qd S r   )Úresults_hc0Úres_hc0r   r   r   r   r   r   r   Útest_scorehc0   s
    ÿzCheckCMT.test_scorehc0c                 C   s:   | j }|  ¡ D ]&\}}t||d t |¡… d|d� qd S r   )Úresults_opgÚres_opgr   r   r   r   r   r   r   Útest_scoreopg#   s
    ÿzCheckCMT.test_scoreopgN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s<   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ ZdS )Ú
TestCMTOLSc           	      C   sª   t j d¡ d\}}d}t j ||¡}d|d d …df< | d¡}||t j |¡  }t j |d¡}t  ||f¡}|| _|| _t||ƒ 	¡ | _
|  ¡  d| _d| _d| _d S )	Ni0 )éd   é   é   r   é   )gÞëºåøú?gß,ôgÈŒÛ?r"   )g(¡D‰­7ú?g–4v5Ü?r"   )gÏPñ†`Žû?gaUìAÛ?g       @)r   ÚrandomÚseedZrandnÚsumZcolumn_stackÚ	exog_fullÚexog_addr   ÚfitÚres_olsÚattach_moment_conditionsr	   r   r   )	ÚclsÚnobsZk_varsZsig_eÚx0Zy_trueÚyÚx1Úxr   r   r   Úsetup_class,   s     
zTestCMTOLS.setup_classc                 C   s  | j }| j}| j}|j\}}|jd d …d f | }| d¡}|j|j |¡ }||j	| 9 }t
j |¡}	d|	d d …| d …f< d|	| d …d d …f< |jd }
t
 |
¡| d … }|d d …d | …f }|j |¡}|| _|| _|| _|| _|| _|| _|	| _|| _d S )Nr   )r)   r&   r'   ÚshapeÚresidr%   Z	mse_residÚTÚdotZdf_residr   ÚlinalgÚinvÚeyer,   ÚmomsÚmoms_obsÚcov_momsÚcovmÚ
moms_derivÚweightsÚL)r+   r)   r0   r/   r,   Zk_constraintsr:   r9   r;   r>   Zk_momsr?   r=   r<   r   r   r   r*   F   s.    


z#TestCMTOLS.attach_moment_conditionsc                 C   sD  | j }| j}| j}| j}| j}| j}| j}| j}| j}	| j	}
g }|t
|j|
ƒ ¡ j }| d|f¡ | tj ||¡¡}| d|f¡ t |t |jd ¡dd … tj |¡|¡}| d|f¡ t|||d d …d d…f ||	ƒj}| d|f¡ t|d d… |d d…d d…f |dd … |dd …d d…f |ƒj}| d|f¡ |S )Núols R2zscore simpler   éþÿÿÿz	score mleÚNeweyÚTauchen)r)   r,   r9   r:   r;   r<   r=   r>   r?   r&   r   r3   r(   ÚrsquaredÚappendr5   r   r6   ZsolveÚdiaoÚ	lm_robustr8   r2   r7   r   Ú	chisquarer   )r   r)   r,   r9   r:   r;   r<   r=   r>   r?   r0   Úres_allÚstatÚtresr   r   r   r
   p   s8    
 ÿ"( ÿzTestCMTOLS.res_scorec                 C   sÆ  | j }| j}| j}| j}| j}| j}| j}| j}| j}	t	|j
j|	ƒjdd�}
g }t |¡}|t	||ƒ ¡ j }| d|f¡ |
j|dd�}| d|f¡ t|||d d …d d…f ||ƒj}| d|f¡ t|d d… |d d…d d…f |dd … |dd …d d…f |ƒj}| d	|f¡ t |dd … d
||¡}| d|f¡ tj|t |jd ¡dd … tj |¡|d d�}| d|f¡ tj|t |jd ¡dd … tj |¡d tj |¡d�}| d|f¡ |S )NZHC0)Zcov_typer@   F)Zdemeanz
comp_lm ucrA   rB   rC   r"   úscore subset QMLEr   ©Z
cov_paramsúscoreB QMLEúscoreV QMLE)r)   r,   r9   r:   r<   r=   r>   r?   r&   r   ÚmodelZendogr(   r   ÚonesrD   rE   Zcompare_lm_testr   rH   r   rF   Úlm_robust_subsetrG   r8   r2   r6   r7   )r   r)   r,   r9   r:   r<   r=   r>   r?   r0   Zres_ols2_hc0rI   rQ   rJ   rK   r   r   r   r   ’   sJ    
":ÿ
  ÿ
 
þzTestCMTOLS.res_opgc              	   C   sp  | j }| j}| j}| j}| j}| j}| j}| j}| j}	|j	j
}
| j}g }tj|j|
|dd�}| d|d d… f¡ t|||||	ƒj}| d|f¡ t|d d… |d d…d d…f |dd … |dd …d d…f |ƒj}| d|f¡ t |dd … d||¡}| d|f¡ t |t |jd	 ¡dd … tj |¡|¡}| d
|f¡ tj |¡}| |¡ |¡}tj|t |jd	 ¡dd … tj |¡d |d�}| d|f¡ t |d d …dd …f |dd …d d…f |d d …d d…f |d d…d d…f ¡}|j|jf}| d|f¡ | j}|j |¡}t |d d …dd …f |dd …d d…f |d d …d d…f |d d…d d…f ¡}|j|jf}| d|f¡ |d d…d d…f }|dd …d d…f }|dd …dd …f }|dd …d d…f }|d d…d d…f }|dd … d||f t  |dd … d|||||¡}| d|f¡ t |jd |jd d ¡}|}|}|}t !||||¡}| d|f¡ |S )Nr!   )r3   Zresid_derivZinstrumentsr>   Z
Wooldridger"   rB   rA   rC   rL   r   rN   rM   rO   Zcmtzscore subset_parts QMLEzscore reparam QMLE)"r)   r,   r9   r:   r;   r<   r=   r>   r?   rP   Zexogr'   rF   Zcm_test_robustr3   rE   r   rH   r   rR   rG   r   r8   r2   r6   r7   r5   Zconditional_moment_test_genericZstat_cmtZpval_cmtr&   r4   Zlm_robust_subset_partsZlm_robust_reparameterized)r   r)   r,   r9   r:   r;   r<   r=   r>   r?   r-   r/   rI   rK   ZAinvÚvvZtres_r0   Zhess_unscaledZscore_deriv_uuZscore_deriv_cuZcov_score_ccZcov_score_cuZcov_score_uuZparams_derivZscoreZscore_derivZ	cov_scorer   r   r   r   ¾   sœ    
 ÿ( ÿ
 ÿ
 þý þ  þ ÿzTestCMTOLS.res_hc0N)	r   r   r   Úclassmethodr1   r*   r
   r   r   r   r   r   r   r   *   s   

)",r   )Ú__doc__Únumpyr   Znumpy.testingr   Z#statsmodels.regression.linear_modelr   Z#statsmodels.stats._diagnostic_otherr   r   ÚstatsZ_diagnostic_otherrF   r   r   r   r   r   r   Ú<module>   s   	