U
    Ãmœdý#  ã                   @   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+   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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:Œ0âŽy5>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ç:Œ0âŽyE>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   Ú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