U
    Ãmœd“:  ã                
   @   sð   d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
Zd dlZddlmZ ddlmZ dd dœZd	d
„ ZG dd„ dƒZej ej e¡¡Zej ed¡Ze e¡Zdd„ eD ƒZdZdZdZej  de!e  "eeee¡ƒ¡dd„ ƒZ#dS )é    N)ÚPHReg)Úassert_allcloseÚassert_equalÚassert_é   )Úsurvival_r_results)Úsurvival_enet_r_resultsZbfgs)ÚmethodZdispc                 C   s¶   |d krBd| ||f }d| ||f }d| ||f }d| ||f }n@d| |||f }d| |||f }d| |||f }d| |||f }t t|ƒ}t t|ƒ}	t t|ƒ}
t t|ƒ}||	|
|fS )	Nzcoef_%d_%d_%szse_%d_%d_%sztime_%d_%d_%szhazard_%d_%d_%szcoef_%d_%d_%s_%szse_%d_%d_%s_%sztime_%d_%d_%s_%szhazard_%d_%d_%s_%s)Úgetattrr   )ÚnÚpÚextÚtiesÚ	coef_nameZse_nameZ	time_nameZhazard_nameÚcoefÚseÚtimeZhazard© r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/duration/tests/test_phreg.pyÚget_results"   s    



r   c                   @   s”   e Zd Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZdd„ ZdS )Ú	TestPHRegc                 C   s~   t j t j t¡¡}tjt j |d| ¡dd�}|d d …df }|d d …df }|d d …df }|d d …dd …f }||||fS )NÚresultsú )Ú	delimiterr   r   é   é   )ÚosÚpathÚdirnameÚabspathÚ__file__ÚnpZ
genfromtxtÚjoin)ÚfnameÚcur_dirÚdatar   ÚstatusÚentryÚexogr   r   r   Ú	load_file6   s    ÿzTestPHReg.load_filec                 C   sÔ  t  | ¡\}}}}t|ƒ}|  d¡}	t|	d ƒ}t|	d  d¡d ƒ}
|dd… }t tdƒt |d ¡¡}t	||||d�}|j
f tŽ}t||
d |ƒ\}}}}t|j|dd	� t|j|d
d	� |jd \}}}t	|||||d�j
f tŽ}t||
d|ƒ\}}}}t|j|dd	� t|j|dd	� t	|||||d�j
f tŽ}t||
d|ƒ\}}}}t|j|d
d	� t|j|d
d	� t	||||||d�j
f tŽ}t||
d|ƒ\}}}}t|j|dd	� t|j|d
d	� |jd \}}}d S )NÚ_r   r   Ú.r   é   )r   gü©ñÒMbP?©Zrtolg-Cëâ6?)r'   r   Úet)Ústratar   Úst)r'   r/   r   Zet_st)r   r)   ÚlenÚsplitÚintr!   ÚkronÚrangeÚonesr   ÚfitÚargsr   r   ÚparamsÚbseÚbaseline_cumulative_hazard)r#   r   Úentry_fÚstrata_fr   r&   r'   r(   r   Úvsr   Zties1r/   ÚmodZphrbZcoef_rZse_rZtime_rZhazard_rZtime_hÚcumhazÚsurvr   r   r   r   r   Údo1C   sN    

ÿÿ
ÿÿ
 ÿÿzTestPHReg.do1c                 C   s¾   t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}t j|dd…< t j|dd	…< t j|d	d
…d d …f< t	|||dd�}t
t|jƒdƒ t
t|jƒdƒ t
|jjt jd ƒ d S )Néº…  é2   éÈ   ©Úsizer   r   ©rE   é   r,   é
   é   Zdrop)Úmissingé¹   )rM   rI   )r!   ÚrandomÚseedÚuniformÚrandintÚastypeÚfloat64ÚnormalÚnanr   r   r1   Úendogr&   r(   ÚshapeÚr_)Úselfr   r&   r(   Úmdr   r   r   Útest_missingr   s    zTestPHReg.test_missingc              
   C   s<  t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}t  |¡}|dd… d |dd…< t	 
|||d d …df |d d …d	f |d d …df |d d …d
f |dœ¡}t||||d�}| ¡ }d}tj||||d�}	|	 ¡ }
tj||ddd�}| ¡ }t|j|
jƒ t|j|jƒ t|j|
jƒ t|j|jƒ d S )NrC   rD   rE   rF   r   r   rH   rJ   r   r   )r   r&   Úexog1Úexog2Zexog3Zexog4r'   ©r'   z$time ~ exog1 + exog2 + exog3 + exog4)r&   r'   r&   r'   )r!   rN   rO   rP   rQ   rR   rS   rT   Z
zeros_likeÚpdÚ	DataFramer   r7   Úfrom_formular   r9   r:   )rY   r   r&   r(   r'   ÚdfÚmod1Úrslt1ÚfmlÚmod2Úrslt2Zmod3Zrslt3r   r   r   Útest_formula‚   s8    
  ý
ÿ
ÿzTestPHReg.test_formulac                 C   sb   t jd }t jd }t jd }t jd }t ||||dœ¡}tjdd|d�}t|jjd	d
gƒ d S )N)	r   r   r   rI   r,   é   é   é   é	   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r&   Úx1Úx2z"time ~ C(x1) + C(x2) + C(x1)*C(x2)r&   )r&   r%   rl   rk   )	r!   rX   r_   r`   r   ra   r   r(   rW   )rY   r   r&   rm   rn   rb   Úmodel1r   r   r   Útest_formula_cat_interactions¢   s    



 ÿÿz'TestPHReg.test_formula_cat_interactionsc                 C   sr  d}t j d¡ dt jj|d� }t j dd|¡ t j¡}t jjdd|dfd�}t |||d d …df |d d …df dœ¡}d	}t	j
|||d
�}| ¡ }ddlm}	 |	|jj|ƒ}
| ¡ }|j|d�}|j|j|
d�}|j|j| ¡ |
d�}||||f}tdƒD ],}t|ƒD ]}t|| j|| jƒ �q�q |||f}tdƒD ],}t|ƒD ]}t|| j|| jƒ �qL�q@d S )Néd   rC   rD   rF   r   r   r   )r   r&   r\   r]   z*time ~ exog1 + np.log(exog2) + exog1*exog2)r&   )Údmatrix)r(   )Ú
cov_paramsr(   rI   r   )r!   rN   rO   rP   rQ   rR   rS   r_   r`   r   ra   r7   Zpatsyrr   r%   Zdesign_infoÚpredictr9   rs   r5   r   Zpredicted_valuesZstandard_errors)rY   r   r   r&   r(   rb   re   ro   Úresult1rr   ZdfpZpr1Zpr2Zpr3Zpr4ZprlÚiÚjr   r   r   Útest_predict_formula¯   s>     ÿþ
ÿ
zTestPHReg.test_predict_formulac              	   C   sü   t j d¡ d}dt jj|d� }t jjdd|d� t j¡}t jjdd�}t jj|d�}t jjdd|d�| }t 	|||d d …df |d d …df ||d	œ¡}t
jd
ddd|d�}| ¡ }	t
jd
|j|j|j|d�}
|
 ¡ }t|	j|jƒ t|	j|jƒ d S )NrC   rE   rD   rF   r   r   )rE   r   r   )r   r&   rm   rn   Úoffsetr'   ztime ~ x1 + x2r&   ry   r'   )r&   ry   r'   r%   )r!   rN   rO   rP   rQ   rR   rS   rT   r_   r`   r   ra   r7   r&   ry   r'   r   r9   r:   )rY   r   r   r&   r(   ry   r'   rb   ro   ru   Zmodel2Zresult2r   r   r   Útest_formula_argsÔ   s0      ÿ
 ÿ ÿzTestPHReg.test_formula_argsc           
      C   sÄ   t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}dD ]v}t|||ƒ}| 	¡ }|d d …df |j
d  }|d d …d	d …f }t|||||d
�}| 	¡ }	t|	j
|j
d	d … ƒ qHd S )NrC   rD   rE   rF   r   r   rH   ©ÚbreslowZefronr   )ry   r   )r!   rN   rO   rP   rQ   rR   rS   rT   r   r7   r9   r   )
rY   r   r&   r(   r   rc   rd   ry   rf   rg   r   r   r   Útest_offseté   s    zTestPHReg.test_offsetc                 C   s˜  t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}t|||ƒ}| 	¡ }|j
}tt  |¡ ¡ dƒ |j}tt  |d ¡ d¡t jd	 ƒ |j}d
d„ |d D ƒ}	t jd }
t|	|
ƒ |j}t jd }	t  |¡ d¡}
t|	|
ƒ t j ddd¡}t|||ƒ}|j	|d�}| ¡ }ddddg}	t  |¡ d¡}
t|	|
dd� |j}t  t  |¡ d¡¡}||d d …f }t jd }	tt  |¡ d¡|	ƒ d S )NrC   rD   rE   rF   r   r   rH   gG– mb.^@)g&³†=@gŠQ¾=[�#@g/óÂBRÊ%@gÒ¢ã«8*@c                 S   s   g | ]}t  t  |¡¡‘qS r   )r!   ÚmeanÚabs©Ú.0Úxr   r   r   Ú
<listcomp>  s     z2TestPHReg.test_post_estimation.<locals>.<listcomp>)gû�›{7@g”ÄûiAÜ?gnü¥ô¢øå?)gÀ—>KÂKà?gÎt
MmÝ?gìœÈ6ß?g:¸*?_iá?r   ©Úgroupsgã�Ë‡¹u?g\M	Nž.Š?gòÝ´ø˜€?g“?ïø¼h?g�íµ ÷Æ°>r-   r   )g8nJÜ×?ë?g^0—Ø¥[ç?gäˆsÜBšç?g,ç{Û&é?)r!   rN   rO   rP   rQ   rR   rS   rT   r   r7   Zmartingale_residualsr   r   ÚsumZweighted_covariate_averagesrX   r;   Zscore_residualsr~   rs   Zschoenfeld_residualsZflatnonzeroÚisfiniteÚall)rY   r   r&   r(   r?   ÚrsltZ
mart_residZw_avgZbc_hazÚvÚwZscore_residr…   Z
robust_covZs_residÚiir   r   r   Útest_post_estimationû   s@    ÿ




zTestPHReg.test_post_estimationc                 C   s0  t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}t|||ƒ}| 	¡ }| 
¡ }t  t  d¡t  d¡¡}t||||d	�}| 	¡ }| 
¡ }d
}t|t|ƒkƒ t  t  d¡t  d¡¡}	t|||ƒ}|j	|	d�}| 
¡ }t j ddd¡| }
t||||
d�}| 	¡ }| 
¡ }d}t|t|ƒkƒ d S )NrC   rD   rE   rF   r   r   rH   rI   )r/   z%3 strata dropped for having no eventsé   rk   r„   çš™™™™™¹?gš™™™™™é?r^   z*200 observations have positive entry times)r!   rN   rO   rP   rQ   rR   rS   rT   r   r7   Úsummaryr4   Zaranger6   r   Ústr)rY   r   r&   r(   r?   r‰   Zsmryr/   Úmsgr…   r'   r   r   r   Útest_summary$  s.    zTestPHReg.test_summaryc                 C   s¸   t j d¡ dt jjdd� }t j ddd¡ t j¡}t jjdd�}t|||ƒ}| 	¡ }| 
¡  dD ]N}|j
|d	� |j
|dd
… |d� |j
|dd
… |dd
…d d …f |d� qdd S )NrC   rD   rE   rF   r   r   rH   )ZlhrÚhrr@   rA   )Ú	pred_typerJ   )rV   r•   )rV   r(   r•   )r!   rN   rO   rP   rQ   rR   rS   rT   r   r7   rt   )rY   rV   r&   r(   r?   r‰   r•   r   r   r   Útest_predictB  s     ÿzTestPHReg.test_predictc                 C   sÊ   t j d¡ d}t jj|dfd�}| d¡}t  | ¡}| t  t jj|d�¡ }t  |¡}d|dd…< t  	t
dƒt  |d ¡¡}t||||d	�}| ¡ }	|	 ¡ }
|
 ¡ }|}|
 ¡ }|
 ¡ }|
 ¡ }d S )
NrC   rE   r   rF   r   r   é   r,   )r&   r/   )r!   rN   rO   rT   r†   ÚexpÚlogrP   r6   r4   r5   r   r7   Úget_distributionr~   ÚvarÚstdZrvs)rY   r   r(   Zlin_predZ	elin_predr   r&   r/   r?   r‰   ÚdistZfitted_meansZ
true_meansZ
fitted_varZ	fitted_sdÚsampler   r   r   Útest_get_distributionV  s"    

zTestPHReg.test_get_distributionc                    sà   dD ]Ö\}}t ddgƒD ]À\}‰d|||f }tt|ƒ}d||f }|  |¡\‰}}}	|	|	 d¡8 }	|	|	jddd� }	tˆ|	|dd	�‰ ˆ jˆd
�}
t|
j	|dd� ‡ ‡‡fdd„}||ƒ}||
j	ƒ}t
t || ¡dƒ qqd S )N))rD   r   )rq   r,   r   r�   zcoef_%d_%d_%dzsurvival_data_%d_%d.csvr   )Zddofr|   )r&   r   )Úalphag333333Ó?r-   c              	      sP   ˆ   | ¡tˆƒ }d}|ˆd| t | d ¡ d |t t | ¡¡    }|S )Nr   r   )Zlogliker1   r!   r†   r   )r9   ZllfZL1_wt©ÚmodelÚsr   r   r   Úplf†  s    6z+TestPHReg.test_fit_regularized.<locals>.plf)Ú	enumerater
   r   r)   r~   rœ   r   Zfit_regularizedr   r9   r   r!   Úsign)rY   r   r   Újsr   r9   r#   r&   r'   r(   Z	sm_resultr¤   Zllf_rZllf_smr   r¡   r   Útest_fit_regularizedm  s    

zTestPHReg.test_fit_regularizedN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr)   rB   r[   rh   rp   rx   rz   r}   r�   ÚpytestÚmarkZsmoker“   r–   rŸ   r¨   r   r   r   r   r   3   s$   

. %)


r   r   c                 C   s$   g | ]}|  d ¡r| d¡r|‘qS )Zsurvivalz.csv)Ú
startswithÚendswithr€   r   r   r   rƒ   •  s     

ÿrƒ   r{   )FTzfname,ties,entry_f,strata_fc                 C   s   t  | |||¡ d S )N)r   rB   )r#   r   r<   r=   r   r   r   Útest_r�  s    r±   )$Ú	itertoolsr   Únumpyr!   Z&statsmodels.duration.hazard_regressionr   Znumpy.testingr   r   r   Zpandasr_   r­   r   r   r   r8   r   r   r   r   r   r    r$   r"   ZrdirÚlistdirÚfnamesr   r<   r=   r®   ZparametrizeÚlistÚproductr±   r   r   r   r   Ú<module>   s0   
  a
ÿ