U
    Ãmœd
R  ã                   @   s|  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 d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZ d
dl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ƒZ"G dd„ dƒ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%ƒZ)G d&d'„ d'ƒZ*G d(d)„ d)e*ƒZ+dS )*é    N)Úassert_allcloseÚassert_equal)Údatasets)Úadd_constant)ÚHolder)ÚConvergenceWarning)ÚtruncatedpoissonÚtruncatednegbin)ÚTruncatedLFPoissonÚTruncatedLFNegativeBinomialPÚHurdleCountModel)ÚDATAé   )ÚRandHIE)Úresults_truncated)Úresults_truncated_stc                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚCheckResultsc                 C   s   t | jj| jjddd� d S )Nçñhãˆµøä>©ÚatolÚrtol)r   Úres1ÚparamsÚres2©Úself© r   úh/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/discrete/tests/test_truncated_model.pyÚtest_params   s     ÿzCheckResults.test_paramsc                 C   s   t | jj| jjddd� d S )Nr   çH¯¼šò×z>r   )r   r   Úllfr   r   r   r   r   Útest_llf#   s    zCheckResults.test_llfc                 C   s   t | j ¡ | jjddd� d S )Nçü©ñÒMbP?r   r   )r   r   Úconf_intr   r   r   r   r   Útest_conf_int&   s     ÿzCheckResults.test_conf_intc                 C   s   t | jj| jjdd� d S )Nr"   ©r   )r   r   Úbser   r   r   r   r   Útest_bse*   s    zCheckResults.test_bsec                 C   s   t | jj| jjddd� d S ©Nç{®Gáz„?gê-�™—q=r   )r   r   Úaicr   r   r   r   r   Útest_aic-   s    zCheckResults.test_aicc                 C   s   t | jj| jjddd� d S r(   )r   r   Úbicr   r   r   r   r   Útest_bic0   s    zCheckResults.test_bicc              	   C   s~   | j j}t t| j jƒ¡}t ¡ �& tjdt	d� |j
|d dd�}W 5 Q R X t|j| j jddd� t|j| j jddd� d S )	NÚignore)Úcategoryr)   r   )ÚalphaZdispr"   ç{®Gázt?©r   r   )r   ÚmodelÚnpÚonesÚlenr   ÚwarningsÚcatch_warningsÚsimplefilterr   Zfit_regularizedr   r&   )r   r3   r0   Zres_regr   r   r   Útest_fit_regularized3   s    
 ÿ ÿz!CheckResults.test_fit_regularizedN)
Ú__name__Ú
__module__Ú__qualname__r   r!   r$   r'   r+   r-   r:   r   r   r   r   r      s   r   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTruncatedLFPoissonModelc                 C   sf   t j ¡ }tt |j¡d d …d d…f dd�}t|j|dd�}|j	ddd�| _
tƒ }| ¡  || _d S )	Né   F©Úprependé   ©Ú
truncationÚnewtonéô  ©ÚmethodÚmaxiter)r   ÚrandhieÚloadr   r4   ÚasarrayÚexogr
   ÚendogÚfitr   r   Ztruncated_poissonr   ©ÚclsÚdatarM   Úmodr   r   r   r   Úsetup_classC   s    
$z'TestTruncatedLFPoissonModel.setup_classN©r;   r<   r=   ÚclassmethodrT   r   r   r   r   r>   B   s   r>   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestZeroTruncatedLFPoissonModelc                 C   sd   t j ¡ }tt |j¡d d …d d…f dd�}t|j|dd�}|j	dd�| _
tƒ }| ¡  || _d S )Nr?   Fr@   r   rC   rF   ©rI   )r   rJ   rK   r   r4   rL   rM   r
   rN   rO   r   r   Zzero_truncated_poissonr   rP   r   r   r   rT   O   s    
$z+TestZeroTruncatedLFPoissonModel.setup_classNrU   r   r   r   r   rW   N   s   rW   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestZeroTruncatedNBPModelc                 C   sd   t j ¡ }tt |j¡d d …d d…f dd�}t|j|dd�}|j	dd�| _
tƒ }| ¡  || _d S )Né   Fr@   r   rC   rF   rX   )r   rJ   rK   r   r4   rL   rM   r   rN   rO   r   r   Zzero_truncted_nbpr   rP   r   r   r   rT   [   s    
$z%TestZeroTruncatedNBPModel.setup_classc                 C   s   d S ©Nr   r   r   r   r   r$   e   s    z'TestZeroTruncatedNBPModel.test_conf_intN)r;   r<   r=   rV   rT   r$   r   r   r   r   rY   Z   s   
	rY   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestTruncatedLFPoisson_predictc                 C   s€   ddg| _ tj d¡ d}t |df¡}d|d |d …df< | | j ¡}tj|d|jd�| _	t
| j	|dd�}|jd	d
d�| _d S )Nr   ç      à?é{   éÈ   é   r   ©ÚsizerC   Úbfgséˆ  rG   )Úexpected_paramsr4   ÚrandomÚseedr5   Údotr   ÚrvsÚshaperN   r
   rO   Úres©rQ   ÚnobsrM   Zmu_truer3   r   r   r   rT   j   s    
z*TestTruncatedLFPoisson_predict.setup_classc                 C   s$   t | j ¡  ¡ | j ¡ ddd� d S ©Nçš™™™™™É?r   ©r   rk   ÚpredictÚmeanrN   r   r   r   r   Ú	test_meanv   s     ÿz(TestTruncatedLFPoisson_predict.test_meanc                 C   s,   | j jdd� ¡ }t|| j ¡ ddd� d S )NÚvar©Úwhichro   r   çš™™™™™©?©rk   rq   rr   r   rN   rt   Z_dispersion_factor©r   Úvr   r   r   Útest_varz   s      ÿ      þz'TestTruncatedLFPoisson_predict.test_varc                 C   sN   | j }|jdd�}t t d¡|jdd�d d …d f d¡}t||ddd� d S )NÚprobru   é   ú	mean-mainr   ç»½×Ùß|Û=r2   )rk   rq   r   Úpmfr4   Úaranger   ©r   rk   ÚprZpr2r   r   r   Útest_predict_prob‚   s      ÿz0TestTruncatedLFPoisson_predict.test_predict_probN©r;   r<   r=   rV   rT   rs   r{   r„   r   r   r   r   r\   i   s
   
r\   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestTruncatedNBP_predictc                 C   sž   dddg| _ tj d¡ d}t |df¡}d|d |d …df< t | | j d d… ¡¡}tj|| j d dd|j	d�| _
t| j
|ddd	�}|jd
ddd�| _d S )Nr   r]   iÒ  r_   r`   éÿÿÿÿr   ra   )rD   ÚpÚnmrd   )rH   rI   Zmaxfun)re   r4   rf   rg   r5   Úexprh   r	   ri   rj   rN   r   rO   rk   rl   r   r   r   rT   Œ   s$        ÿ ÿz$TestTruncatedNBP_predict.setup_classc                 C   s$   t | j ¡  ¡ | j ¡ ddd� d S rn   rp   r   r   r   r   rs   š   s     ÿz"TestTruncatedNBP_predict.test_meanc                 C   s,   | j jdd� ¡ }t|| j ¡ ddd� d S )Nrt   ru   gš™™™™™¹?r)   r   rw   rx   ry   r   r   r   r{   ž   s      ÿ      þz!TestTruncatedNBP_predict.test_varc                 C   sX   | j }|jdd�}t t d¡|jdd�d d …d f |jd dd¡}t||ddd	� d S )
Nr|   ru   é   r~   r‡   r`   r   r   r2   )rk   rq   r	   r€   r4   r�   r   r   r‚   r   r   r   r„   ¦   s       þz*TestTruncatedNBP_predict.test_predict_probNr…   r   r   r   r   r†   ‹   s
   
r†   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCheckTruncatedSTc                 C   sN  | j }| j}t|j|jdd� t|j|jdd� |j}|jj	j
d }t|jd |… |jd |… dd� t|jd |… |d |…df dd� t|jd |… |d |…df ddd	� t|jd |… |d |…d
f ddd	� t|j|jƒ t|j|jd dd� t|j|jd dd� |jjj
d }t|jjdk  ¡ dƒ t|j|t|jƒ ƒ d S )Nç:Œ0âŽyE>©r   gñhãˆµøÔ>r   r   r%   r`   çü©ñÒMb@?r2   rZ   r   éþÿÿÿr‡   r   )r   r   r   r    ÚllZllnullZll_0Úparams_tabler3   rM   rj   r   r&   ÚtvaluesÚpvaluesr   Údf_modelZdf_mr*   Zicrr,   rN   ÚsumÚdf_residr6   )r   r   r   Úpt2Úkrm   r   r   r   Ú
test_basic²   s     "$&&zCheckTruncatedST.test_basicc           	      C   s‚  | j }| j}|jj}|jddd�}t|j|d dd� t|j|d dd	d
� | ¡ d }t|d |d dd	d
� t|d |d dd	d
� |j	j
 d¡}|jj}|j|dd�}t|j|d dd� t|j|d dd	d
� | ¡ d }t|d |d dd	d
� t|d |d dd	d
� |jj}z|jdd�}W n tk
�rD   d }Y nX |d k	�r¶t|j|d dd� t|j|d dd	d
� | ¡ d }t|d |d dd	d
� t|d |d dd	d
� |j	j
 d¡}|jj}|j	jd }|jd |j	j }|jddd�}t|j||… |d d…df dd� t|j||… |d d…df dd	d
� | ¡ ||… }t|d d …df |d d…df dd	d
� t|d d …df |d d…df dd	d
� |j	j
 d¡}|jj}|jd d }|jddd�}t|jd |… |d d…df dd� t|jd |… |d d…df dd	d
� | ¡ d |… }t|d d …df |d d…df dd	d
� t|d d …df |d d…df dd	d
� d S )Nr~   T)rv   Úaverager   g-Cëâ6
?rŽ   r   r�   r   r2   r?   r   rB   ru   )r›   r|   r‡   z	prob-baseg-Cëâ6J?)r   r   Zmargins_meansÚtableÚget_predictionr   Ú	predictedÚser#   r3   rM   rr   Zmargins_atmeansZ
margins_cmÚNotImplementedErrorZmargins_cprrD   rj   Z
margins_pr)	r   r   r   ÚrdfÚpredÚciÚexZ	start_idxr™   r   r   r   Útest_predictÈ   sj    

$ ÿ(($ ÿ(zCheckTruncatedST.test_predictN©r;   r<   r=   rš   r¥   r   r   r   r   rŒ   °   s   rŒ   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTruncatedLFPoissonStc                 C   s^   t d }dddg}t | }t||ƒjddd�| _tj| _t||t d d�}|jddd�| _d S ©	NÚdocvisÚagetÚtotchrÚconstrc   é,  rG   )Úoffset)r   r
   rO   r   Ú
results_tsZresults_trunc_poissonr   Ú
res_offset©rQ   rN   Ú
exog_namesrM   Z
mod_offsetr   r   r   rT   	  s    
ÿz$TestTruncatedLFPoissonSt.setup_classc                 C   sº   | j }| j}t|jdd … |jdd … dd� t|jd |jd d dd� | ¡ }| ¡ }t||dd� |jjd d… }|jjd d… }|j|dd�}|j||dd�}t||dd� d S ©	Nr   r�   rŽ   r   rB   F)Ú	transform)r®   r´   ©r   r°   r   r   rq   r3   rM   r®   ©r   r   ZresoZpred1Zpredor¤   Zoffsr   r   r   Útest_offset  s    "z$TestTruncatedLFPoissonSt.test_offsetN©r;   r<   r=   rV   rT   r·   r   r   r   r   r§     s   
r§   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTruncatedNegBinStc                 C   s^   t d }dddg}t | }t||ƒjddd�| _tj| _t||t d d�}|jddd�| _d S r¨   )r   r   rO   r   r¯   Zresults_trunc_negbinr   r°   r±   r   r   r   rT   (  s    
ÿÿz!TestTruncatedNegBinSt.setup_classc                 C   sº   | j }| j}t|jdd … |jdd … dd� t|jd |jd d dd� | ¡ }| ¡ }t||dd� |jjd d… }|jjd d… }|j|dd�}|j||dd�}t||dd� d S r³   rµ   r¶   r   r   r   r·   5  s    "z!TestTruncatedNegBinSt.test_offsetNr¸   r   r   r   r   r¹   &  s   
r¹   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTruncatedLFPoisson1Stc                 C   s@   t d }dddg}t | }t||dd�jddd	�| _tj| _d S )
Nr©   rª   r«   r¬   r   rC   rc   r­   rG   )r   r
   rO   r   r¯   Zresults_trunc_poisson1r   ©rQ   rN   r²   rM   r   r   r   rT   I  s    
  ÿ þz%TestTruncatedLFPoisson1St.setup_classNrU   r   r   r   r   rº   G  s   rº   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestTruncatedNegBin1Stc                 C   s@   t d }dddg}t | }t||dd�jddd	�| _tj| _d S )
Nr©   rª   r«   r¬   r   rC   rE   r­   rG   )r   r   rO   r   r¯   Zresults_trunc_negbin1r   r»   r   r   r   rT   V  s    
  ÿ þz"TestTruncatedNegBin1St.setup_classNrU   r   r   r   r   r¼   T  s   r¼   c                   @   s(   e Zd Zedd„ ƒZdd„ Zdd„ ZdS )ÚTestHurdlePoissonRc                 C   s<   t d }dddg}t | }t||ƒjddd�| _tj| _d S )Nr©   r¬   rª   r«   rE   r­   rG   )r   r   rO   r   Ú	results_tZhurdle_poissonr   r»   r   r   r   rT   c  s    
ÿzTestHurdlePoissonR.setup_classc                 C   s   | j }| j}t|j|jdd� |j}t|j|d d …df dd� t|j|d d …df dd� t|j|d d …df ddd	� t|j	|d d …d
f ddd	� t
|j|jƒ t
|j|j|j ƒ t|j|jdd� t t d
d¡t d
¡f¡}|j|d d …d f |f }tt | ¡ ¡|ddd	� d S )Nr�   rŽ   r   r   r%   r   r`   r�   r2   rZ   r   é   ç-Cëâ6?)r   r   r   r    Zloglikr’   r   r&   r“   r”   r   r—   Zdf_residualr•   Údf_nullr*   r4   Zconcatenater�   ÚvcovrL   Z
cov_params)r   r   r   r˜   ÚidxrÂ   r   r   r   rš   l  s"     ÿzTestHurdlePoissonR.test_basicc                 C   sÜ  | j }| j}|jjjddd�}|j |¡}t | ¡}d| }t	||j
ddd� |jj ||jd d… ¡}t	||j
ddd� |jj|dd	�}t	||jddd� |jj|d
d	�d | }	t |¡|	d< t	|	d d… |jddd� t	|| |jddd� | |¡}
t	|
|jddd� |j|dd	�}t	||jddd� |j|dd	�}t	||jd|jd   ddd� |j|dd	�}	|j|dd	�}t	|	d|  |j
ddd� |j|d
d	�d }t	|d d… |jddd� d}|jjd |… }|j|d
t d¡d�}|j|d
t d¡d�}t	||jddd� |jd
t d¡d�}|jd
t d¡dd�}t	| d¡|jddd� dD ]L}|j||d	�}|j||d	�}t	||jddd� | ¡ j|dfk�sXt‚�qX|jd d… }t dddddg¡}t	||ddd� d S )Nr   T)Zkeepdimsr   r�   r2   r?   r~   ru   r|   r"   g�íµ ÷Æ°>g�íµ ÷Æ >r   úmean-nonzeroú	prob-mainz
prob-truncr   rB   rZ   ©rv   Úy_valuesr   )rv   rÇ   r›   )rr   r~   rÅ   ú	prob-zeroZlinearg	–£†mù¿g’I;»Ô¿g‡öJºhù¿gBz9�)å?gn)èÎCiå¿)r   r   r3   rM   rr   Zresults_zerorq   r4   rŠ   r   Zpredict_zeroZ_prob_nonzeror   Úresults_countZpredict_mean_mainZsqueezeZpredict_probZpredict_meanr�   r�   rž   Zsummary_framerj   ÚAssertionErrorZresid_pearsonrL   )r   r   r   r¤   Zmu1Z	prob_zeroZprob_nzZprob_nz_Z	mean_mainZ	prob_mainÚmÚmmZmnzÚptÚprobsZk_exZex5Zp1aZp1bZp2aZp2brv   Zp3aZp3bZresid_p1Zresid_p2r   r   r   r¥   �  s|     ÿ ÿ
 ÿ ÿÿ   þzTestHurdlePoissonR.test_predictN)r;   r<   r=   rV   rT   rš   r¥   r   r   r   r   r½   a  s   
r½   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCheckHurdlePredictc                 C   sr   | j }| j}|j|jkst‚|j|jks,t‚|jj|jks>t‚t|jjƒ|j	ksTt‚|jj|jksft‚| 
¡  d S r[   )r   r   r•   rÊ   r—   r3   Úk_extrar6   r²   Úk_paramsÚsummary)r   r   r   r   r   r   rš   Ç  s    zCheckHurdlePredict.test_basicc                 C   sÄ  | j }|jj}|jj}|jdd� ¡ }t|| ¡ dd� |dk}||  ¡ }|jdd� ¡ }t||dd� |j|| dd� ¡ }t||d	d� |jjdd� ¡ }	t|	|d	d� t|	|d
d� |jdd� ¡ }
t|
|j 	¡ dd� |jjdd� ¡ }
t|
|j|dk  	¡ dd� t
 | t¡¡t|ƒ }|jdd� d¡}t||ddd� | ¡ }t|j d¡|dd� z| ¡  W n tk
�rˆ   Y nX |jdd� d¡}t||d d
d� t||d dd� d S )Nrr   ru   r)   rŽ   r   rÄ   rw   )rM   rv   r�   rÀ   rt   r|   r1   r2   r   rÈ   )r   r3   rN   rM   rq   rr   r   rÉ   Zresidrt   r4   ZbincountZastypeÚintr6   Zget_diagnosticZprobs_predictedZ
plot_probsÚImportError)r   r   rN   rM   Z	pred_meanZmask_nzZmean_nzZpred_mean_nzZpred_mean_nnzZpred_mean_nzmZpred_varÚfreqZ	pred_probZdia_hnbZ
pred_prob0r   r   r   r¥   Ô  s@    
ÿ
zCheckHurdlePredict.test_predictNr¦   r   r   r   r   rÏ   Å  s   rÏ   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestHurdleNegbinSimulatedc                 C   s  d}t  t  |¡t  dd|¡f¡}t  |¡|d  }t||ddd�}t  dddd	ddg¡}|j|d
t  d¡d�}| d¡}|j	d }t  |t  |¡f¡}t j
 d¡}	|	 
|df¡}
t j||
k dd�}t||ddd�}|jdd�| _d}t|dd||d |d ddddddgd�| _d S )NiÐ  r   rZ   Znegbin)ÚdistZzerodistgš™™™™™Ù¿r`   r]   ro   r|   é2   rÆ   r   i\cÛ:)Zaxisr­   rX   r?   r¿   Zzm_constZzm_x1Zzm_alphar¬   Úx1r0   )rm   rÑ   r•   rÁ   r—   rÐ   r²   )r4   Zcolumn_stackr5   Zlinspacer�   r   Úarrayrq   Zcumsumrj   rf   Zdefault_rngZargminrO   r   r   r   )rQ   rm   rM   Zy_fakerS   Zp_dgprÎ   ZcdfÚnÚrngÚurN   Zmod_hnbrÁ   r   r   r   rT     s:    

 ÿ
ÿùz%TestHurdleNegbinSimulated.setup_classNrU   r   r   r   r   rÖ     s   rÖ   ),r7   Únumpyr4   Znumpy.testingr   r   Zstatsmodelsr   Zstatsmodels.tools.toolsr   Zstatsmodels.tools.testingr   Zstatsmodels.tools.sm_exceptionsr   Z"statsmodels.distributions.discreter   r	   Z$statsmodels.discrete.truncated_modelr
   r   r   Z5statsmodels.sandbox.regression.tests.test_gmm_poissonr   Zresults.results_discreter   Úresultsr   r¾   r   r¯   r   r>   rW   rY   r\   r†   rŒ   r§   r¹   rº   r¼   r½   rÏ   rÖ   r   r   r   r   Ú<module>   s4   $"%W!d<