U
    Kvfn#                     @   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 )
zUnit 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 NgvIh%<=)Zrtolerr_msg)results_score	res_scorer   npsizeselfexpectedmsgactual r   Q/tmp/pip-unpacked-wheel-2v6byqio/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(D7?g4v5?r"   )gP`?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__Z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   	