U
    KvfR                     @   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 )Nh㈵>atolrtol)r   res1paramsres2self r   S/tmp/pip-unpacked-wheel-2v6byqio/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   Hz>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 )NMbP?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{Gz?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"   {Gzt?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:0yE>r   gh㈵>r   r   r%   r`   Mb@?r2   rZ   r   r   r   )r   r   r   r    Z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	rt|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}t|j}t|dd  |dd  dd t|d |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   r4   rL   r   r   rq   r3   rM   r   	r   r   ZresoZparamsoZparams1Z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}t|j}t|dd  |dd  dd t|d |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   7  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   M  s    
   z%TestTruncatedLFPoisson1St.setup_classNrU   r   r   r   r   r   K  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   Z  s    
   z"TestTruncatedNegBin1St.setup_classNrU   r   r   r   r   r   X  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   g  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   p  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	mgI;ԿgJhg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   e  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   Z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<