U
    ÃmœdaY  ã                   @   s  d Z ddlmZ ddlZddlmZmZmZ ddl	Z
ddl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Z dd	lmZ dd
lmZ ddlmZmZ ej ¡ Z e !e j"¡e _"e !e j#¡e _#ee j#dd�e _#dZ$dZ%e
j&ee%ƒdd�Z'e' (e)¡Z'e *e'd ¡e'd< 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+ƒZ0G d d!„ d!e+ƒZ1G d"d#„ d#e+ƒZ2G d$d%„ d%e+ƒZ3G d&d'„ d'e+ƒZ4G d(d)„ d)e+ƒZ5G d*d+„ d+e5ƒZ6G d,d-„ d-e5ƒZ7G d.d/„ d/e5ƒZ8G d0d1„ d1e5ƒZ9G d2d3„ d3e5ƒZ:d4d5„ Z;dS )6zM
Created on Fri May 30 16:22:29 2014

Author: Josef Perktold
License: BSD-3

é    )ÚStringION)Úassert_Úassert_allcloseÚassert_equal)Údatasets©Úfit_constrained)ÚPoissonÚLogit©Úfamilies©ÚGLM)Úadd_constanté   )Úresults_glm_logit_constrainedÚresults_poisson_constrainedF)Úprependzœagecat	smokes	deaths	pyears
1	1	32	52407
2	1	104	43248
3	1	206	28612
4	1	186	12663
5	1	102	5317
1	0	2	18790
2	0	12	10673
3	0	28	5710
4	0	28	2585
5	0	31	1462ú	)Ú	delimiterÚpyearsZ	logpyearsc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCheckPoissonConstrainedMixinc                 C   sz   | j }| j}t|d |j| j dd� t t |d ¡¡}|dkt |j	| j ¡@ }t||  |j	| j |  dd� d S )Nr   ç�íµ ÷Æ°>©Zrtolr   )
Úres1Úres2r   ÚparamsÚidxÚnpÚsqrtZdiagÚisnanÚbse)Úselfr   r   Zbse1Úmask© r$   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/discrete/tests/test_constrained.pyÚ
test_basic9   s    z'CheckPoissonConstrainedMixin.test_basicc           
      C   sª  t | dƒ�rœt | jdƒs| jn| jj}| j}t|j|j| j dd� |jdkt 	|j| j ¡@ }t|j|  |j| j |  dd� |j
| jdf }t |j¡t 	|¡@ }t|j|  ||  dd� |j
| jdf }|jdkt 	|¡@ }t|j|  ||  dd� |j
| jd	f }|j
| jd
f }t ||f¡}t| ¡ t 	|¡  |t 	|¡  dd� t|j|jdd� t|j|jƒ |j|j d }	t|j|	ƒ n
t d¡ d S )NÚres1mÚ_resultsr   r   r   é   é   g-Cëâ6
?é   é   r   únot available yet)Úhasattrr'   r(   r   r   r   r   r!   r   r    Zparams_tableÚisinfÚtvaluesÚpvaluesZcolumn_stackZconf_intZllfÚllr   Zdf_modelZdf_mÚNZdf_residÚpytestÚskip)
r"   r   r   r#   r0   r1   Zci_lowZci_uppÚciZdf_rr$   r$   r%   Útest_basic_methodB   s6    ÿÿ"ÿz.CheckPoissonConstrainedMixin.test_basic_methodc                 C   sd   t | dƒrV| j}| j}t |dƒr4t|j|jdd� q`tr`dd l}d|j }| |¡ n
t	 
d¡ d S )Nr'   Úll_0r   r   r   z&test: ll_0 not available, llnull=%6.4Fr-   )r.   r'   r   r   Zllnullr8   ÚDEBUGÚwarningsÚwarnr4   r5   )r"   r   r   r:   Úmessager$   r$   r%   Ú
test_otherl   s    

ÿz'CheckPoissonConstrainedMixin.test_otherN)Ú__name__Ú
__module__Ú__qualname__r&   r7   r=   r$   r$   r$   r%   r   7   s   	*r   c                   @   s8   e Zd Zedd„ ƒZejjdd„ ƒZejjdd„ ƒZ	dS )ÚTestPoissonConstrained1ac                 C   s¢   t j| _dddddddg| _d}tj|td	�}t|jƒ}t	 
|¡}t	 |j ¡ ¡|d< d
}t |j¡ |¡}t||j|j|dddœd�| _|j||ddd�| _d S )Né   r*   r+   r,   é   r   r   ú'deaths ~ logpyears + smokes + C(agecat)©ÚdataúC(agecat)[T.4] = C(agecat)[T.5]Úbfgs©ÚmethodÚdisp©Ústart_paramsÚfit_kwds©rM   rJ   rK   )ÚresultsÚresults_noexposure_constraintr   r   r	   Úfrom_formularF   ÚlenÚ
exog_namesr   ÚzerosÚlogÚendogÚmeanÚpatsyÚ
DesignInfoÚlinear_constraintr   ÚcoefsÚ	constantsr   r'   ©ÚclsÚformulaÚmodZk_varsrM   ÚconstrÚlcr$   r$   r%   Úsetup_class�   s"    

þ ÿz$TestPoissonConstrained1a.setup_classc                 C   s   | j  ¡ }td|jkƒ d S )Núlinear equality constraints)r'   Úsummaryr   Ú	extra_txt©r"   Úsummr$   r$   r%   Útest_summaryž   s    
z%TestPoissonConstrained1a.test_summaryc                 C   s    | j  ¡ }td|jd kƒ d S )Nre   r   )r'   Úsummary2r   rg   rh   r$   r$   r%   Útest_summary2¥   s    
z&TestPoissonConstrained1a.test_summary2N)
r>   r?   r@   Úclassmethodrd   r4   ÚmarkÚsmokerj   rl   r$   r$   r$   r%   rA      s   

rA   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonConstrained1bc                 C   s‚   t j| _ddddddg| _d}tj|ttd jd	�}d
}t 	|j
¡ |¡}t||j|jdddœd�| _|| _|j|ddd�| _d S )NrC   r)   r*   r+   r,   r   údeaths ~ smokes + C(agecat)r   ©rF   ZexposurerG   ÚnewtonrI   ©rN   )rP   Úresults_exposure_constraintr   r   r	   rR   rF   ÚvaluesrY   rZ   rT   r[   r   r\   r]   r   Úconstraintsr'   ©r_   r`   ra   rb   rc   r$   r$   r%   rd   ¯   s"    ÿÿÿÿz$TestPoissonConstrained1b.setup_classN©r>   r?   r@   rm   rd   r$   r$   r$   r%   rp   ­   s   rp   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonConstrained1cc                 C   sˆ   t j| _ddddddg| _d}tj|tt td j	¡d	�}d
}t
 |j¡ |¡}t||j|jdddœd�| _|| _|j|ddd�| _d S )NrC   r)   r*   r+   r,   r   rq   r   ©rF   ÚoffsetrG   rs   rI   rt   )rP   ru   r   r   r	   rR   rF   r   rV   rv   rY   rZ   rT   r[   r   r\   r]   r   rw   r'   rx   r$   r$   r%   rd   Ç   s    ÿÿÿz$TestPoissonConstrained1c.setup_classNry   r$   r$   r$   r%   rz   Å   s   rz   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonNoConstrainedc                 C   sb   t j| _ddddddg| _d}tj|tt td j	¡d	�}|j
dd
�j}|j| ¡ f| _|| _d S )NrC   r)   r*   r+   r,   r   rq   r   r{   )rK   )rP   Zresults_exposure_noconstraintr   r   r	   rR   rF   r   rV   rv   Úfitr(   r   Z
cov_paramsr   r'   )r_   r`   ra   r   r$   r$   r%   rd   ß   s    ÿz$TestPoissonNoConstrained.setup_classNry   r$   r$   r$   r%   r}   Ý   s   r}   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonConstrained2ac                 C   s¢   t j| _dddddddg| _d}tj|td	�}t|jƒ}t	 
|¡}t	 |j ¡ ¡|d< d
}t |j¡ |¡}t||j|j|dddœd�| _|j||ddd�| _d S )NrB   r*   r+   r,   rC   r   r   rD   rE   ú%C(agecat)[T.5] - C(agecat)[T.4] = 0.5rH   rI   rL   rO   )rP   Zresults_noexposure_constraint2r   r   r	   rR   rF   rS   rT   r   rU   rV   rW   rX   rY   rZ   r[   r   r\   r]   r   r'   r^   r$   r$   r%   rd   ñ   s"    

þ ÿz$TestPoissonConstrained2a.setup_classNry   r$   r$   r$   r%   r   ï   s   r   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonConstrained2bc                 C   sŠ   t j| _ddddddg| _d}tj|ttd jd	�}d
}t 	|j
¡ |¡}t||j|jdddœd�| _|| _|j|dd| jd d�| _d S )NrC   r)   r*   r+   r,   r   rq   r   rr   r€   rs   rI   rt   rH   ©rJ   rK   rM   )rP   Úresults_exposure_constraint2r   r   r	   rR   rF   rv   rY   rZ   rT   r[   r   r\   r]   r   rw   r'   rx   r$   r$   r%   rd     s"    ÿÿÿ
ÿz$TestPoissonConstrained2b.setup_classNry   r$   r$   r$   r%   r�     s   r�   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestPoissonConstrained2cc                 C   s�   t j| _ddddddg| _d}tj|tt td j	¡d	�}d
}t
 |j¡ |¡}t||j|jdddœd�| _|| _|j|dd| jd d�| _d S )NrC   r)   r*   r+   r,   r   rq   r   r{   r€   rs   rI   rt   rH   r‚   )rP   rƒ   r   r   r	   rR   rF   r   rV   rv   rY   rZ   rT   r[   r   r\   r]   r   rw   r'   rx   r$   r$   r%   rd   +  s"    ÿÿ þz$TestPoissonConstrained2c.setup_classNry   r$   r$   r$   r%   r„   )  s   r„   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestGLMPoissonConstrained1ac                 C   sŠ   ddl m} tj| _dddddddg| _d	}tj|tt	 
¡ d
�}d}t |j¡ |¡}|||j|jddid�| _|| _|j|dd�| _d S )Nr   r   rB   r*   r+   r,   rC   r   rD   )rF   ÚfamilyrG   Úatolç»½×Ùß|Û=rt   ©r‡   )Ústatsmodels.base._constraintsr   rP   rQ   r   r   r   rR   rF   r   r	   rY   rZ   rT   r[   r\   r]   r   rw   r'   )r_   r   r`   ra   rb   rc   r$   r$   r%   rd   E  s    ÿÿz'TestGLMPoissonConstrained1a.setup_classNry   r$   r$   r$   r%   r…   C  s   r…   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestGLMPoissonConstrained1bc                 C   s°   ddl m} ddlm} ddlm} tj| _ddddd	dg| _	d
}|j
|t| ¡ t td j¡d�}d}t |j¡ |¡}|||j|jddid�| _|| _|j|dd�j| _d S )Nr   r   r   r   rC   r)   r*   r+   r,   rq   r   )rF   r†   r|   rG   r‡   rˆ   rt   r‰   )rŠ   r   Ústatsmodels.genmodr   Ú+statsmodels.genmod.generalized_linear_modelr   rP   ru   r   r   rR   rF   r	   r   rV   rv   rY   rZ   rT   r[   r\   r]   r   rw   r(   r'   )r_   r   r   r   r`   ra   rb   rc   r$   r$   r%   rd   \  s"    þÿz'TestGLMPoissonConstrained1b.setup_classc                 C   sÂ   | j }| j}d}tj|ttd jd�}d}|j|| j jdddd�}t|j|jd	d
� t|j	|j	dd
� | 
¡ }t|| 
¡ dd
� t|j|dd
� t|j|dd
� t|j
dd�|j
dd�dd
� d S )Nrq   r   rr   rG   rs   Fr   )rM   rJ   Zwarn_convergencerK   gê-�™—q=r   g•dyáý¥=rˆ   Zlinear)Úwhich)r'   r   r	   rR   rF   rv   r   r   r   r!   ÚpredictÚmuÚfittedvalues)r"   r   r   r`   ra   rb   Ú	predictedr$   r$   r%   Útest_compare_glm_poissons  s,    ÿ þ
þz4TestGLMPoissonConstrained1b.test_compare_glm_poissonN)r>   r?   r@   rm   rd   r“   r$   r$   r$   r%   r‹   Z  s   
r‹   c                   @   s   e Zd Zdd„ ZdS )ÚCheckGLMConstrainedMixinc              	   C   sr   | j }| j}t|j|jd dd� dd l}| ¡ �$ | dt¡ t|j	|j	dd� W 5 Q R X t|j
|j
dd� d S )Nr+   rˆ   r   r   Úignore)r   r'   r   ZaicZinfocritr:   Úcatch_warningsÚsimplefilterÚFutureWarningZbicZdeviance)r"   r   r   r:   r$   r$   r%   Útest_glm”  s    
z!CheckGLMConstrainedMixin.test_glmN)r>   r?   r@   r™   r$   r$   r$   r%   r”   ‘  s   r”   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestGLMLogitConstrained1c                 C   sV   t d ƒ| _tj| _ttjtjt	 
¡ d�}d}| |¡| _| jj\}}t|||ƒ| _d S )N©r†   úx1 = 2.8)Úslicer   ÚreslogitÚresults_constraint1r   r   Úspector_datarW   Úexogr   ÚBinomialr   r'   rw   r   ©r_   Úmod1rb   ÚRÚqr$   r$   r%   rd   ­  s    

ÿz$TestGLMLogitConstrained1.setup_classNry   r$   r$   r$   r%   rš   «  s   rš   c                   @   s.   e Zd Zedd„ ƒZejjdd�dd„ ƒZdS )ÚTestLogitConstrained1c                 C   sd   t d ƒ| _tj| _ttjtjƒ}d}|j	|dd�| _
| j
jj| j
jj }}t	|||ddid�| _d S )Nrœ   rH   )rJ   rJ   rt   )r�   r   rž   rŸ   r   r
   r    rW   r¡   r   r'   rw   r\   r]   r   r£   r$   r$   r%   rd   Á  s    
z!TestLogitConstrained1.setup_classú	not a GLM©Úreasonc                 C   s   d S ©Nr$   ©r"   r$   r$   r%   r™   Ó  s    zTestLogitConstrained1.test_glmN©	r>   r?   r@   rm   rd   r4   rn   r5   r™   r$   r$   r$   r%   r§   ¿  s   
r§   c                   @   sH   e Zd Zedd„ ƒZdd„ Zejjdd„ ƒZ	ejjdd„ ƒZ
d	d
„ ZdS )ÚTestGLMLogitConstrained2c                 C   sv   t d ƒ| _tj| _ttjtjt	 
¡ d�}d}|j|dd�| _| jjj| jjj }}t|||ddid�| _||f| _d S )Nr›   úx1 - x3 = 0rˆ   r‰   r‡   rt   )r�   r   rž   Zresults_constraint2r   r   r    rW   r¡   r   r¢   r   r'   rw   r\   r]   r   Úconstraints_rqr£   r$   r$   r%   rd   Ú  s    

ÿz$TestGLMLogitConstrained2.setup_classc                 C   sH   | j }| j}| ¡ }t||jdd� t|j|dd� t|j|dd� d S )NgH¯¼šò×z>r‰   rˆ   r   )r   r'   r�   r   Z
predict_mur�   r‘   )r"   r   r   r’   r$   r$   r%   Útest_predictê  s    z%TestGLMLogitConstrained2.test_predictc                 C   s4   | j  ¡ }td|jkƒ t| j jƒ}|dks0t‚d S )Nre   zx1 - x3 = 0.0)r'   rf   r   rg   Ústrrw   ÚAssertionError)r"   ri   Z	lc_stringr$   r$   r%   rj   ô  s    
z%TestGLMLogitConstrained2.test_summaryc              	   C   sH   dd l }| ¡ � | dt¡ | j ¡ }W 5 Q R X td|jd kƒ d S )Nr   r•   re   )r:   r–   r—   r˜   r'   rk   r   rg   )r"   r:   ri   r$   r$   r%   rl   ý  s
    
z&TestGLMLogitConstrained2.test_summary2c                 C   sJ   | j }ddlm} || jj| jƒ}t|j|jdd� t|j|jdd� d S )Nr   )Úfit_constrained_wrapr   r   )r   rŠ   r´   r'   Úmodelr°   r   r   )r"   r   r´   Zres_wrapr$   r$   r%   Útest_fit_constrained_wrap	  s
    z2TestGLMLogitConstrained2.test_fit_constrained_wrapN)r>   r?   r@   rm   rd   r±   r4   rn   ro   rj   rl   r¶   r$   r$   r$   r%   r®   Ø  s   



r®   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestGLMLogitConstrained2HCc                 C   s€   t d ƒ| _tj| _ttjtjt	 
¡ d�}d}ddi}d}|j|||dd�| _| jj\}}t|||d||dœd	�| _||f| _d S )
Nr›   ÚHC0Úscaling_factorç„B!„ð?r¯   rˆ   )Úcov_typeÚcov_kwdsr‡   )r‡   r»   r¼   rt   )r�   r   rž   Úresults_constraint2_robustr   r   r    rW   r¡   r   r¢   r   r'   rw   r   r°   ©r_   r¤   r»   r¼   rb   r¥   r¦   r$   r$   r%   rd     s$    

ÿ ÿ
þz&TestGLMLogitConstrained2HC.setup_classNry   r$   r$   r$   r%   r·     s   r·   c                   @   s.   e Zd Zedd„ ƒZejjdd�dd„ ƒZdS )ÚTestLogitConstrained2HCc                 C   s‚   t d ƒ| _tj| _ttjtjƒ}d}ddi}d}|j	|||dd�| _
| j
jj| j
jj }}t	|||d||dœd�| _||f| _d S )	Nr¸   r¹   rº   r¯   rˆ   )r»   r¼   Útol)rÀ   r»   r¼   rt   )r�   r   rž   r½   r   r
   r    rW   r¡   r   r'   rw   r\   r]   r   r°   r¾   r$   r$   r%   rd   0  s     
 ÿ
þz#TestLogitConstrained2HC.setup_classr¨   r©   c                 C   s   d S r«   r$   r¬   r$   r$   r%   r™   I  s    z TestLogitConstrained2HC.test_glmNr­   r$   r$   r$   r%   r¿   .  s   
r¿   c            
      C   sª   d} t j| ttd jd�}| ¡  d}dd l}| |j¡ |¡}|j	|j
 }}|j||ddid� d	}t j|td
�}| ¡  | |j¡ d¡}	|j|	j	|	j
ddid� d S )Nz*deaths ~ C(agecat) + C(smokes) : C(agecat)r   rr   z:C(smokes)[T.1]:C(agecat)[3] = C(smokes)[T.1]:C(agec`at)[4]r   rJ   rH   rt   rD   rE   rG   rs   )r	   rR   rF   rv   r~   rY   rZ   rT   r[   r\   r]   r   )
Zformula2ra   rw   rY   rc   r¥   r¦   Z	formula1aZmod1aZlc_1ar$   r$   r%   ÚjunkN  s&    ÿÿÿrÁ   )<Ú__doc__Úior   Únumpyr   Znumpy.testingr   r   r   ZpandasÚpdrY   r4   Zstatsmodelsr   rŠ   r   Z#statsmodels.discrete.discrete_modelr	   r
   rŒ   r   r�   r   Zstatsmodels.tools.toolsr   rP   r   rž   r   ZspectorÚloadr    ZasarrayrW   r¡   r9   ÚssZread_csvrF   ZastypeÚintrV   r   rA   rp   rz   r}   r   r�   r„   r…   r‹   r”   rš   r§   r®   r·   r¿   rÁ   r$   r$   r$   r%   Ú<module>   sN   

H.!7; 