U
    KvfŸ<  ã                   @   sŒ  d Z ddlZddlZddlmZmZ ddlZddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZ d	d
lmZ d ¡ ZdZd ¡ e dg Z ee Z!ee  Z"G dd„ dƒZ#G dd„ dƒZ$G dd„ de#e$ƒZ%G dd„ de#ƒZ&G dd„ de$ƒZ'e (d¡Z)dZ*dZ+ei e ,dg¡fei e ,dg¡fei e ,e+e)g¡fei e ,e+e)e*g¡fedd	ie ,e+e)e*g¡fei e ,e+e)e*g¡fedd	ie ,e+e)e*g¡fei e ,e)g¡fei e ,e)e*g¡fedd	ie ,e)e*g¡fei e ,e)e*g¡feddie ,e)e*g¡fei e ,e)e*g¡feddie ,e)e*g¡fedd ie ,e)g¡fgZ-eeeeeeeegZ.d!d"„ Z/e/ƒ \Z0Z1ej2 3d#e-¡d$d%„ ƒZ4dS )&zK
Created on Sat Nov 13 12:48:37 2021

Author: Josef Perktod
License: BSD-3
é    N)Úassert_allcloseÚassert_equal)Úadd_constant)ÚPredictionResultsMonotonic)ÚBinaryModelÚLogitÚProbitÚPoissonÚNegativeBinomialÚNegativeBinomialPÚGeneralizedPoisson)ÚZeroInflatedPoissonÚZeroInflatedNegativeBinomialPÚZeroInflatedGeneralizedPoisson)ÚDATAé   )Úresults_predictzaget aget2 educyr actlim totchrZdocviszprivate medicaidÚconstc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCheckPredictc                 C   s¤   | j }| j}t| jdd ƒ}td| jd  d ƒ}t|j| |j| | jd t|j| |j| d| j d t 	|j¡}t 	|j¡}t|d t 
|d ¡| jd d S )Néÿÿÿÿr   r   ©Úrtolé   )Úres1Úres2ÚsliceÚk_inflr   Úparamsr   ZbseÚnpÚasarrayÚexp)Úselfr   r   Zsl1Zsl2Zparams1Zparams2© r"   úK/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/discrete/tests/test_predict.pyÚ
test_basic0   s     zCheckPredict.test_basicc                 C   s6  | j }| j}t t¡ d¡}|j}|j|f| jŽ}t	|j
|d jd dd t	|j|d jd ddd t|tƒr
| ¡ d }t	|d |d jd ddd t	|d	 |d
 jd ddd |jddd }t	|d |d jd ddd t	|d	 |d
 jd ddd nH| ¡ d }t	|d |d jd ddd t	|d	 |d
 jd ddd | ¡ \}}t	||jddd |j}|jf ddi| j—Ž}t	|j
|d jd dd t	|j|d jd ddd t|tƒrd| ¡ d }t	|d |d jd ddd t	|d	 |d
 jd ddd |jddd }t	|d |d jd ddd t	|d	 |d
 jd ddd nH| ¡ d }t	|d |d jd ddd t	|d	 |d
 jd ddd | ¡ \}}t	||jddd |j}|j|fdt d¡dœ| j—Ž}t	|j
|d jd	d… dd t	|j|d jd	d… ddd | ¡ }t	|d d …df |d jd	d… ddd t	|d d …d	f |d
 jd	d… ddd | ¡ \}}t	||jddd |j}|jf dt d¡ddœ| j—Ž}t	|j
|d jd	d… dd t	|j|d jd	d… ddd | ¡ }t	|d d …df |d jd	d… ddd t	|d d …d	f |d
 jd	d… ddd | ¡ \}}t	||jddd |j|j
d\}}t|dƒ td d… }	t t|jjƒ¡}
d	|
d d…< |
|
 ¡  }
|jf |	dddœ| j—Ž}| ¡ }|jdd|
d}| ¡ }t	|j
|j
dd t	||dd d S )Nr   Úbç-Cëâ6?r   Úse)r   ZatolZllgü©ñÒMbP?r   ÚulÚdelta©ÚmethodÚaverageTga2U0*©3?gú~j¼t“h?gü©ñÒMb@?Úprobé   ©ÚwhichÚy_valuesé   ©r0   r1   r,   g{®Gázt?)Úvalueé   Úmean)Úexogr0   r,   )r0   r,   Zagg_weightsç‚vIhÂ%<=gH¯¼šò×z>)r   r   r   r   r7   r6   Zresults_margins_atmeansÚget_predictionÚpred_kwds_meanr   Ú	predictedZilocr'   Ú
isinstancer   Úconf_intÚt_testZtvaluesZresults_margins_meanÚaranger   ÚzerosÚlenÚmodelÚendogÚpred_kwds_6Úsummary_frame)r!   r   r   ÚexÚrdfÚpredÚciÚstatÚ_Zdf6ZawZpm6Zdfm6ZpmwZdfmwr"   r"   r#   Útest_predict<   s’      ÿ **ÿÿ **
ÿzCheckPredict.test_predictc                 C   sr   | j }|jdd}|jt d¡d}t|jjd dƒ t|jjd dƒ z|j	dd	 W n t
k
rl   Y nX d S )
Né   )Zy_maxé   )Z	bin_edgesr   r2   é   é   )Zupp_xlim)r   Úget_diagnosticZtest_chisquare_probr   r?   r   Zdiff1ÚshapeÚprobs_predictedZ
plot_probsÚImportError)r!   r   ÚdiaZres_chi2r"   r"   r#   Útest_diagnostic–   s    zCheckPredict.test_diagnosticN)Ú__name__Ú
__module__Ú__qualname__r$   rL   rV   r"   r"   r"   r#   r   .   s   Zr   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCheckExtrasc                 C   s–   | j }t td d… ¡}|j|fddi| j—Ž}t|jƒ|jd  }|dkrjt 	|t 
|jd |f¡f¡}| |¡}| ¡ }| ¡ }t||dd d S )Né   r0   Zlinearr   r   çê-™—q=r   )r   r   r   r7   r9   r:   rA   r   rR   Zcolumn_stackr@   r>   r=   r   )r!   r   rF   rH   Zk_extraÚttZcipZcitr"   r"   r#   Útest_predict_linear§   s    
zCheckExtras.test_predict_linearc                 C   s  | j }|  ttjd d …d d…f ¡}|jddd}t |jd d… dg|jdd … g¡}t 	dt
|ƒf¡}d|d< |jjd d …dd …f }ddlm} |||dd	}|||d fd
}	t|	d d… |d d… ƒ |||d|dd}
|||d fdd}t|d d… |
d d… ƒ d S )Nr   Únewtoné,  ©r+   Úmaxiterr   r   )r   éþÿÿÿ)Ú
score_test)Úparams_constrainedÚk_constraints©Ú
exog_extrar.   ÚHC0)re   rf   Úr_matrixÚcov_type©rh   rk   )r   ÚklassrC   r7   ÚvaluesÚfitr   Úconcatenater   r@   rA   rB   Ú%statsmodels.base._parameter_inferencerd   r   )r!   r   ÚmodrÚresrÚparams_restrrj   rh   rd   Zsc1Úsc2Zsc1_hcÚsc2_hcr"   r"   r#   Útest_score_test´   s0    ÿÿ  ÿ
ÿzCheckExtras.test_score_testc                 C   sþ   |   ttjd d …d d…f ¡}|jddd}t |jd d … dgg¡}t dt	|ƒf¡}d|d< tj
 d¡ d	tj
 tjd ¡ }dd
lm}m} ||d |d d}t |d ¡ ¡ r¸t‚||d |fd}	|	d d	ksØt‚||d |fdd}
|
d d	ksút‚d S )Nr   r_   r`   ra   r   r   )r   r   i‹WÖ:g{®Gáz„?)rd   Ú_scorehess_extra)rh   Zexog2_extraZ	hess_kwdsrg   ri   rl   )rm   rC   r7   rn   ro   r   rp   r   r@   rA   ÚrandomÚseedÚrandnrR   rq   rd   rx   ÚisnanÚanyÚAssertionError)r!   rr   rs   rt   rj   rh   rd   rx   Úshru   rv   r"   r"   r#   Útest_score_test_alphaÊ   s&     ÿ
ÿz!CheckExtras.test_score_test_alphac                 C   sL   | j }ddlm} ||ƒ}ddddddd	g}|D ]}t||ƒ q0| ¡  d S )
Nr   )ÚMLEInfluenceZcooks_distanceZd_fittedvaluesÚd_fittedvalues_scaledZd_paramsZdfbetasZhat_matrix_diagZresid_studentized)r   Z$statsmodels.stats.outliers_influencer   ÚgetattrrE   )r!   r   r   ÚinfluÚattrsÚattrr"   r"   r#   Útest_influenceì   s       ÿzCheckExtras.test_influenceN)rW   rX   rY   r^   rw   r€   r‡   r"   r"   r"   r#   rZ   ¥   s   "rZ   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNegativeBinomialPPredictc                 C   sD   t | _t ttƒjddd}|| _tj| _i | _	i | _
d| _d| _d S )Nr_   r`   ra   r   ç:Œ0âŽyE>)r   rm   rC   r7   ro   r   ÚrespÚresults_nb_docvisr   r:   rD   r   r   )Úclsr   r"   r"   r#   Úsetup_classý   s    z(TestNegativeBinomialPPredict.setup_classN©rW   rX   rY   Úclassmethodr   r"   r"   r"   r#   rˆ   û   s   rˆ   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestZINegativeBinomialPPredictc                 C   s   t td dd}ttt|dd}t dddd	d
ddddddg¡}|j|ddd}|| _t	j
| _d| d¡i| _d|d d… i| _d| _d| _d S )NZagetF)Úprependr.   )Ú	exog_inflÚpgR¸…ëQÀg{®Gázô¿gR¸…ëQÈ?g{®Gáz´?g)\Âõ(Ì?gš™™™™™©¿g¸…ëQ¸ž?gÃõ(\ÂÅ?gHáz®GÑ?gÃõ(\Âå?g×£p=
×ã?r_   r`   ©Zstart_paramsr+   rb   r’   r   r5   r&   )r   r   r   rC   r7   r   Úarrayro   r   rŠ   Zresults_zinb_docvisr   r6   r:   rD   r   r   )rŒ   r’   Zmod_zinbÚspr   r"   r"   r#   r     s2     ÿ         þz*TestZINegativeBinomialPPredict.setup_classNrŽ   r"   r"   r"   r#   r   
  s   r   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestGeneralizedPoissonPredictc                 C   sF   t | _t ttƒ}|jdd}|| _tj| _i | _	i | _
d| _d| _d S )Nr_   r*   r   r‰   )r   rm   rC   r7   ro   r   rŠ   r‹   r   r:   rD   r   r   )rŒ   Zmod1r   r"   r"   r#   r   "  s    
z)TestGeneralizedPoissonPredict.setup_classNrŽ   r"   r"   r"   r#   r—      s   r—   ç      ø?g      ø¿gš™™™™™¹?r“   r.   Zloglike_methodZnb1Z	geometricc                  C   sP   t j d¡ d} t  | df¡}t j | ¡}dd| d  }t  |d ¡}||fS )Né\cÛ:éô  r   r˜   r.   ç      à?)r   ry   rz   Zonesr{   Útrunc)ÚnobsÚxZynÚyr"   r"   r#   Úget_data_simulatedP  s    r    Úcasec              	   C   sâ  t t }}t|ƒ}tj d¡ | \}}}t|tƒr@|dk t	¡}|||f|Ž}|}| 
|¡}	|	 d¡jdkspt‚z|	j|dfd ¡ }
W n$ tk
r¬   |	j|d ¡ }
Y nX ||
|f|Ž}|j|ddd}| 
|j¡}t| ¡  ¡ d |
 ¡ d	d
 t| ¡  ¡ d |
 ¡ d	d
 |jdd}t|| ¡  ¡ dd
 | ¡ }t|j|
| t |¡ dd
 t|tƒsÐ|jdt d¡d}|jt|jƒdfks–t‚|jdt d¡dd}t|j| d¡dd
 | ¡ }|j |t krÞt! "¡ $ t!j#dt$d | %¡ }| &¡  W 5 Q R X |j'jt|
ƒfks$t‚z"| (¡ }|jt|
ƒfksDt‚W n t)k
r\   Y nX | *¡ }|jt|
ƒfks|t‚|j+}|jt|
ƒfks˜t‚z.t! "¡  t!j#dt$d | ,¡  W 5 Q R X W n t-k
rÜ   Y nX d S )Nr™   r›   r   )ÚsizeZbfgsrš   r”   r   gš™™™™™É?r   Úvar)r0   r\   r8   r-   r[   r/   Tr3   g»½×Ùß|Û=Úignore)Úcategory).Úy_countÚx_constrA   r   ry   rz   Ú
issubclassr   ZastypeÚfloatÚget_distributionZpmfÚndimr~   ZrvsZsqueezeÚ
ValueErrorro   r   r   r6   r£   ZpredictZresid_pearsonÚsqrtr?   rR   rC   r9   r;   rQ   rS   Úmodels_influÚwarningsÚcatch_warningsÚsimplefilterÚUserWarningZget_influencerE   ÚresidZresid_score_factorÚAttributeErrorZresid_scorer‚   Zplot_influencerT   )r¡   rŸ   rž   r   Z	cls_modelÚkwdsr   ÚmodZ
params_dgpZdistrÚy2ÚresZdistr2Zvar_r6   ZprobsZprobs2rU   r„   r³   Zf_scr"   r"   r#   Ú
test_distr]  sn    



  ÿ


r¹   )5Ú__doc__r¯   Znumpyr   Znumpy.testingr   r   ZpytestZstatsmodels.tools.toolsr   Z&statsmodels.base._prediction_inferencer   Z#statsmodels.discrete.discrete_modelr   r   r   r	   r
   r   r   Z statsmodels.discrete.count_modelr   r   r   Z5statsmodels.sandbox.regression.tests.test_gmm_poissonr   Úresultsr   rŠ   ÚsplitZ
XLISTEXOG2Z
endog_nameZ
exog_namesrC   r7   r   rZ   rˆ   r   r—   ÚlogÚmuÚalphaÚwr•   Úmodelsr®   r    r¦   r§   ÚmarkZparametrizer¹   r"   r"   r"   r#   Ú<module>   sh   $	wV
ñø

