U
    Kvf#                     @   s&  d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddl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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 eZdS )!z
Unit tests for fit_constrained
Tests for Poisson and Binomial are in discrete


Created on Sun Jan  7 09:21:39 2018

Author: Josef Perktold
    N)assert_allcloseassert_equal)family)GLM)OLSWLS)ValueWarning)add_constantc                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
ConstrainedCompareMixinc                 C   s   d\}}t jd t j||d }t|}|dd }|dt j|  }|| _|| _ddddg| _t 	| j| _
dg| _|d d | jf  | _}t|d|d d df   |}d	d
ddg|jd d < || _|   d S )Nd             r               ?constx2x3x4)nprandomseedrandnr	   sumendogexogidx_ucarrayidx_p_ucidx_cexogcr   
exog_namesmod2initclsZnobsZk_exogxZy_trueyZxcZ	mod_ols_c r+   M/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/genmod/tests/test_constrained.pysetup_class   s     z#ConstrainedCompareMixin.setup_classc                 C   s(   | j }| j}t|j| j |jdd d S N绽|=rtol)res1res2r   paramsr!   selfr2   r3   r+   r+   r,   test_params.   s    z#ConstrainedCompareMixin.test_paramsc                 C   sx   | j }| j}t|j|j t|j|jdd t|j| j |jdd t| | jd d d f | jf | ddd d S )Nr/   r0   g:0y5>gV瞯<)r1   atol)	r2   r3   r   df_residr   scaleZbser!   Z
cov_paramsr5   r+   r+   r,   test_se3   s      zConstrainedCompareMixin.test_sec                 C   s"   | j }| j}t|j|jdd d S r.   )r2   r3   r   resid_responseZresidr5   r+   r+   r,   
test_resid=   s    z"ConstrainedCompareMixin.test_residN)__name__
__module____qualname__classmethodr-   r7   r;   r=   r+   r+   r+   r,   r
      s
   

r
   c                   @   s   e Zd Zedd ZdS )TestGLMGaussianOffsetc                 C   sn   | j  | _t| j| jd| jd d | jf   d}ddddg|j	d d < | | _
t| jjd | _d S )Nr   offsetr   r   r   r   r   r%   fitr3   r   r   r#   r   r"   squeezer$   r2   r   arangeshaper!   r(   modr+   r+   r,   r&   E   s    

zTestGLMGaussianOffset.initNr>   r?   r@   rA   r&   r+   r+   r+   r,   rB   C   s   rB   c                   @   s   e Zd Zedd ZdS )TestGLMGaussianConstrainedc                 C   sB   | j  | _t| j| j}dddddg|jd d < |d| _d S )Nr   x1r   r   r   x1=0.5	r%   rF   r3   r   r   r   r$   fit_constrainedr2   rJ   r+   r+   r,   r&   Q   s    zTestGLMGaussianConstrained.initNrL   r+   r+   r+   r,   rM   O   s   rM   c                   @   s   e Zd Zedd ZdS )TestGLMGaussianOffsetHCc                 C   sz   d}| j j|d| _t| j| jd| jd d | jf   d}ddddg|j	d d < |j|d| _
t| jjd	 | _d S )
NHC0cov_typer   rC   r   r   r   r   r   rE   r(   rU   rK   r+   r+   r,   r&   [   s    
zTestGLMGaussianOffsetHC.initNrL   r+   r+   r+   r,   rR   Y   s   rR   c                   @   s   e Zd Zedd ZdS )TestGLMGaussianConstrainedHCc                 C   sN   d}| j j|d| _t| j| j}dddddg|jd d < |jd|d| _d S )	NrS   rT   r   rN   r   r   r   rO   rP   rV   r+   r+   r,   r&   h   s
    z!TestGLMGaussianConstrainedHC.initNrL   r+   r+   r+   r,   rW   f   s   rW   c                   @   s   e Zd Zedd ZdS )ConstrainedCompareWtdMixinc                 C   s   d\}}t jd t j||d }t|}t jdd|| _|dd }|dt j|  }|| _|| _	ddddg| _
t | j
| _dg| _|d d | j
f  | _}t|d	|d d df   || jd
}ddddg|jd d < || _|   d S )Nr   r   r   
   r   r   r   r   r   )weightsr   r   r   r   )r   r   r   r   r	   randintaweightsr   r   r   r   r    r!   r"   r#   r   r$   r%   r&   r'   r+   r+   r,   r-   s   s"    $z&ConstrainedCompareWtdMixin.setup_classN)r>   r?   r@   rA   r-   r+   r+   r+   r,   rX   q   s   rX   c                   @   s   e Zd Zedd ZdS )TestGLMWtdGaussianOffsetc                 C   sr   | j  | _t| j| jd| jd d | jf   | j	d}ddddg|j
d d < | | _t| jjd | _d S )Nr   rD   var_weightsr   r   r   r   r   r%   rF   r3   r   r   r#   r   r"   rG   r\   r$   r2   r   rH   rI   r!   rJ   r+   r+   r,   r&      s    

zTestGLMWtdGaussianOffset.initNrL   r+   r+   r+   r,   r]      s   r]   c                   @   s   e Zd Zedd ZdS )TestGLMWtdGaussianConstrainedc                 C   sH   | j  | _t| j| j| jd}dddddg|jd d < |d| _	d S )Nr_   r   rN   r   r   r   rO   
r%   rF   r3   r   r   r   r\   r$   rQ   r2   rJ   r+   r+   r,   r&      s    z"TestGLMWtdGaussianConstrained.initNrL   r+   r+   r+   r,   ra      s   ra   c                   @   s   e Zd Zedd ZdS )TestGLMWtdGaussianOffsetHCc                 C   s~   d}| j j|d| _t| j| jd| jd d | jf   | j	d}ddddg|j
d d < |j|d| _t| jjd	 | _d S )
NrS   rT   r   r^   r   r   r   r   r   r`   rV   r+   r+   r,   r&      s    
zTestGLMWtdGaussianOffsetHC.initNrL   r+   r+   r+   r,   rd      s   rd   c                   @   s   e Zd Zedd ZdS )TestGLMWtdGaussianConstrainedHCc                 C   sT   d}| j j|d| _t| j| j| jd}dddddg|jd d < |jd	|d| _	d S )
NrS   rT   rb   r   rN   r   r   r   rO   rc   rV   r+   r+   r,   r&      s
    z$TestGLMWtdGaussianConstrainedHC.initNrL   r+   r+   r+   r,   re      s   re   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 )TestGLMBinomialCountConstrainedc                 C   s   ddl m} | }t|j|_t|j|_t|jdd}tt|j}|d d d df }t	|j|t
 |d| _t	|j|t
 |d| _|   d S )Nr   )loadT)prepend)r   rD   )Zstatsmodels.datasets.star98rg   r   Zasarrayr   r   r	   Zoneslenr   r   ZBinomialr%   mod1r&   )r(   rg   datar   rD   Z	exog_keepr+   r+   r,   r-      s    z+TestGLMBinomialCountConstrained.setup_classc                 C   sN   | j  | _| jjjd }t|d | _t	|dd  }| j
|| _d S )Nr   r   ri   r%   rF   r3   rk   r   rI   r   rH   r!   eyerQ   r2   r(   kconstraintsr+   r+   r,   r&      s
    z$TestGLMBinomialCountConstrained.initc                 C   s"   | j }| j}t|j|jdd d S )N:0yE>r0   )r2   r3   r   r<   r5   r+   r+   r,   r=      s    z*TestGLMBinomialCountConstrained.test_residc              	   C   sb   dD ]"}t t| j|t| j|dd qt ( tdt t | jj| jjdd W 5 Q R X d S )N)ZllfZnull_devianceZaicr9   Zdf_modelZpearson_chi2r:   r/   r0   ignore)	r   getattrr2   r3   warningscatch_warningssimplefilterFutureWarningZbic)r6   attrr+   r+   r,   test_glm_attr   s    
 
z-TestGLMBinomialCountConstrained.test_glm_attrc              	   C   s  | j }| j}t|j}t|j}d}t N tdt |jt	
|dd  |dd}|jt	
|dd  |dd}W 5 Q R X t|j|jdd t|j|jdd	 t|j|j d}t N tdt |jt	
|dd  |dd}|jt	
|dd  |dd}W 5 Q R X t|j|jdd	 t|j|jdd	 t|j|j t|j|j t| d
d  | d
d   t > tdt tdt tdt | j   | j   W 5 Q R X d S )NFrs   r   T)use_fZscalarg#B;)r8   rr   r0   i)r2   r3   rj   r4   ru   rv   rw   r   Z	wald_testr   rn   r   ZpvalueZ	statisticr   Zdf_denomZdf_numsummaryrx   RuntimeWarningZsummary2)r6   r2   r3   Zk1Zk2r{   Zwt2Zwt1r+   r+   r,   	test_wald   s8    


(
("

z)TestGLMBinomialCountConstrained.test_waldN)	r>   r?   r@   rA   r-   r&   r=   rz   r~   r+   r+   r+   r,   rf      s   


rf   c                   @   s   e Zd Zedd ZdS )!TestGLMBinomialCountConstrainedHCc                 C   sV   | j jdd| _| jjjd }t|d | _t	|dd  }| jj
|dd| _d S )NrS   rT   r   r   ri   rm   ro   r+   r+   r,   r&     s
    z&TestGLMBinomialCountConstrainedHC.initNrL   r+   r+   r+   r,   r   
  s   r   )__doc__ru   Znumpyr   Znumpy.testingr   r   Zstatsmodels.genmod.familiesr   Z+statsmodels.genmod.generalized_linear_modelr   Z#statsmodels.regression.linear_modelr   r   Zstatsmodels.tools.sm_exceptionsr   Zstatsmodels.tools.toolsr	   r
   rB   rM   rR   rW   rX   r]   ra   rd   re   rf   r   r+   r+   r+   r,   <module>   s(   
+

Q