U
    KvfaY                     @   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)prependzagecat	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$   O/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/discrete/tests/test_constrained.py
test_basic9   s    z'CheckPoissonConstrainedMixin.test_basicc           
      C   s  t | drt | 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llfZ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llnullr7   DEBUGwarningswarnr3   r4   )r"   r   r   r9   messager$   r$   r%   
test_otherl   s    

z'CheckPoissonConstrainedMixin.test_otherN)__name__
__module____qualname__r&   r6   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rL   rI   rJ   )resultsresults_noexposure_constraintr   r   r	   from_formularE   len
exog_namesr   zeroslogendogmeanpatsy
DesignInfolinear_constraintr   coefs	constantsr   r'   clsformulamodZk_varsrL   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 )Nrd   r   )r'   summary2r   rf   rg   r$   r$   r%   test_summary2   s    
z&TestPoissonConstrained1a.test_summary2N)
r=   r>   r?   classmethodrc   r3   marksmokeri   rk   r$   r$   r$   r%   r@      s   

r@   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 )NrB   r)   r*   r+   r,   r   deaths ~ smokes + C(agecat)r   rE   ZexposurerF   newtonrH   rM   )rO   results_exposure_constraintr   r   r	   rQ   rE   valuesrX   rY   rS   rZ   r   r[   r\   r   constraintsr'   r^   r_   r`   ra   rb   r$   r$   r%   rc      s"    z$TestPoissonConstrained1b.setup_classNr=   r>   r?   rl   rc   r$   r$   r$   r%   ro      s   ro   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 )NrB   r)   r*   r+   r,   r   rp   r   rE   offsetrF   rr   rH   rs   )rO   rt   r   r   r	   rQ   rE   r   rU   ru   rX   rY   rS   rZ   r   r[   r\   r   rv   r'   rw   r$   r$   r%   rc      s    z$TestPoissonConstrained1c.setup_classNrx   r$   r$   r$   r%   ry      s   ry   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 )NrB   r)   r*   r+   r,   r   rp   r   rz   )rJ   )rO   Zresults_exposure_noconstraintr   r   r	   rQ   rE   r   rU   ru   fitr(   r   Z
cov_paramsr   r'   )r^   r_   r`   r   r$   r$   r%   rc      s    z$TestPoissonNoConstrained.setup_classNrx   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 )NrA   r*   r+   r,   rB   r   r   rC   rD   %C(agecat)[T.5] - C(agecat)[T.4] = 0.5rG   rH   rK   rN   )rO   Zresults_noexposure_constraint2r   r   r	   rQ   rE   rR   rS   r   rT   rU   rV   rW   rX   rY   rZ   r   r[   r\   r   r'   r]   r$   r$   r%   rc      s"    

 z$TestPoissonConstrained2a.setup_classNrx   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 )NrB   r)   r*   r+   r,   r   rp   r   rq   r   rr   rH   rs   rG   rI   rJ   rL   )rO   results_exposure_constraint2r   r   r	   rQ   rE   ru   rX   rY   rS   rZ   r   r[   r\   r   rv   r'   rw   r$   r$   r%   rc     s"    
z$TestPoissonConstrained2b.setup_classNrx   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 )NrB   r)   r*   r+   r,   r   rp   r   rz   r   rr   rH   rs   rG   r   )rO   r   r   r   r	   rQ   rE   r   rU   ru   rX   rY   rS   rZ   r   r[   r\   r   rv   r'   rw   r$   r$   r%   rc   +  s"     z$TestPoissonConstrained2c.setup_classNrx   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   rA   r*   r+   r,   rB   r   rC   )rE   familyrF   atol绽|=rs   r   )statsmodels.base._constraintsr   rO   rP   r   r   r   rQ   rE   r   r	   rX   rY   rS   rZ   r[   r\   r   rv   r'   )r^   r   r_   r`   ra   rb   r$   r$   r%   rc   E  s    z'TestGLMPoissonConstrained1a.setup_classNrx   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   rB   r)   r*   r+   r,   rp   r   )rE   r   r{   rF   r   r   rs   r   )r   r   statsmodels.genmodr   +statsmodels.genmod.generalized_linear_modelr   rO   rt   r   r   rQ   rE   r	   r   rU   ru   rX   rY   rS   rZ   r[   r\   r   rv   r(   r'   )r^   r   r   r   r_   r`   ra   rb   r$   r$   r%   rc   \  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 )Nrp   r   rq   rF   rr   Fr   )rL   rI   Zwarn_convergencerJ   g-q=r   gdy=r   Zlinear)which)r'   r   r	   rQ   rE   ru   r   r   r   r!   predictmufittedvalues)r"   r   r   r_   r`   ra   	predictedr$   r$   r%   test_compare_glm_poissons  s,     
z4TestGLMPoissonConstrained1b.test_compare_glm_poissonN)r=   r>   r?   rl   rc   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infocritr9   catch_warningssimplefilterFutureWarningZbicZdeviance)r"   r   r   r9   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_datarV   exogr   Binomialr   r'   rv   r   r^   mod1ra   Rqr$   r$   r%   rc     s    

z$TestGLMLogitConstrained1.setup_classNrx   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   rG   )rI   rI   rs   )r   r   r   r   r   r
   r   rV   r   r   r'   rv   r[   r\   r   r   r$   r$   r%   rc     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?   rl   rc   r3   rm   r4   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   rs   )r   r   r   Zresults_constraint2r   r   r   rV   r   r   r   r   r'   rv   r[   r\   r   constraints_rqr   r$   r$   r%   rc     s    

z$TestGLMLogitConstrained2.setup_classc                 C   sH   | j }| j}| }t||jdd t|j|dd t|j|dd d S )NgHz>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 )Nrd   zx1 - x3 = 0.0)r'   re   r   rf   strrv   AssertionError)r"   rh   Z	lc_stringr$   r$   r%   ri     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   rd   )r9   r   r   r   r'   rj   r   rf   )r"   r9   rh   r$   r$   r%   rk     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?   rl   rc   r   r3   rm   rn   ri   rk   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   rs   )r   r   r   results_constraint2_robustr   r   r   rV   r   r   r   r   r'   rv   r   r   r^   r   r   r   ra   r   r   r$   r$   r%   rc     s$    

 
z&TestGLMLogitConstrained2HC.setup_classNrx   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   rs   )r   r   r   r   r   r
   r   rV   r   r   r'   rv   r[   r\   r   r   r   r$   r$   r%   rc   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   rq   z:C(smokes)[T.1]:C(agecat)[3] = C(smokes)[T.1]:C(agec`at)[4]r   rI   rG   rs   rC   rD   rF   rr   )r	   rQ   rE   ru   r}   rX   rY   rS   rZ   r[   r\   r   )
Zformula2r`   rv   rX   rb   r   r   Z	formula1aZmod1aZlc_1ar$   r$   r%   junkN  s&    r   )<__doc__ior   Znumpyr   Znumpy.testingr   r   r   ZpandaspdrX   r3   Zstatsmodelsr   r   r   Z#statsmodels.discrete.discrete_modelr	   r
   r   r   r   r   Zstatsmodels.tools.toolsr   rO   r   r   r   Zspectorloadr   ZasarrayrV   r   r8   ssZread_csvrE   ZastypeintrU   r   r@   ro   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   <module>   sN   

H.!7; 