U
    Ãmœd²%  ã                   @   s˜   d dl Zd dlmZmZmZ d dlmZ d dlm	Z	 d dl
Zdd„ Zdd„ Zd	d
„ Zd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 )é    N)ÚConditionalLogitÚConditionalPoissonÚConditionalMNLogit)Úapprox_fprime)Úassert_allclosec            	         sü   t jd } t jd }t jd }|d d …d f }t| ||d�‰ dD ]@}t j|f }ˆ  d|¡\}}t|‡ fdd„ƒ ¡ }t||ƒ q@dD ]<}tt j|f ˆ jƒ ¡ }ˆ  t j|f ¡}t||d	d
� q†ˆ  	¡ }t|j
t jd dd
� t|jt jd dd
� d S )N©
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   ©Úgroups©éÿÿÿÿr   r   r
   r   c                    s   ˆ   d| ¡S ©Nr   ©Z_denom©Úx©Úmodel© úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/discrete/tests/test_conditional.pyÚ<lambda>   ó    ztest_logit_1d.<locals>.<lambda>ç-Cëâ6?©Úrtolg¥@°ô«í?çñhãˆµøä>g›sô¸ô?)ÚnpÚr_r   Ú_denom_gradr   Úsqueezer   ÚloglikeÚscoreÚfitÚparamsÚbse)	ÚyÚgr   r%   Ú_ÚgradÚngradr#   Úresultr   r   r   Útest_logit_1d	   s"    


r-   c                     s0  t jd } t jd }t jd }t jd }t  d¡}||d d …df< ||d d …df< t| ||d�‰ d	D ]F}t j|d
| f }ˆ  d|¡\}}t|‡ fdd„ƒ}t||dd� qdd	D ]>}t jd| d| f }t|ˆ jƒ}ˆ  |¡}	t||	dd� q°ˆ  	¡ }
t|
j
t jd dd� t|
jt jd dd� |
 ¡  d S )Nr   r	   r   )
r   r   r   r   r   r   r   r   r   r   ©é
   r
   r   r   r   r   g      ø¿c                    s   ˆ   d| ¡S r   r   r   r   r   r   r   8   r   ztest_logit_2d.<locals>.<lambda>r   r   ç      à¿ç      à?r   )gÝ_=î[-ð?gØ±ÁÂÉó?çü©ñÒMbP?)g‹áê ˆ»ö?gô†ûÈ­Éõ?)r   r   Úemptyr   r    r   r   r"   r#   r$   r%   r&   Úsummary)r'   r(   Úx1Úx2r   r%   r)   r*   r+   r#   r,   r   r   r   Útest_logit_2d'   s,    





r7   c                  C   sF  dD �]:} t j d¡ d}t jjdd|d�}t jj|d�}t jj|d�}t jjdd|d�}t  |d d …d f |d d …d f f¡}| dkr˜t|||d�}nt|||d�}| ¡ }t	 
||||d	œ¡}	| dkrÜtjd
d|	d�}
ntjd
d|	d�}
|
 ¡ }t|j|jdd� t|j|jdd� t| ¡ | ¡ dd� t|j|jdd� qd S )N)r   r   iº…  éÈ   r   r
   ©Úsizeé   r   ©r'   r5   r6   r(   úy ~ 0 + x1 + x2r(   ©r   Údatar   r   )r   ÚrandomÚseedÚrandintÚnormalZhstackr   r   r$   ÚpdÚ	DataFrameÚfrom_formular   r%   r&   Z
cov_paramsZtvalues)ÚjÚnr'   r5   r6   r(   r   Úmodel1Úresult1ÚdfÚmodel2Úresult2r   r   r   Útest_formulaK   s:    
&  ÿ  ÿrN   c                  C   s¶   t jd } t jd }t jd }|d d …d f }t| ||d�}dD ]<}tt j|f |jƒ ¡ }| t j|f ¡}t||dd� q@| ¡ }t|j	t jd dd� t|j
t jd	 d
d� d S )N)
é   r   r   é   é   r
   r   r   é   r
   )
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   g–‡–†+±ä?gf�Î¡±Ú?r   )r   r   r   r   r"   r!   r#   r   r$   r%   r&   )r'   r(   r   r   r*   r#   r,   r   r   r   Útest_poisson_1dl   s    


rS   c            
      C   sä   t jd } t jd }t jd }t jd }t  d¡}||d d …df< ||d d …df< t| ||d�}d	D ]>}t jd
| d| f }t||jƒ}| |¡}t||dd� qd| ¡ }	t|	j	t jd dd� t|	j
t jd dd� |	 ¡  d S )N)
rO   r   rP   é   r
   rQ   rP   é   r
   rR   r	   r   )
r
   r   r   r   r   r
   rO   r
   r   r   r.   r   r   r   r   r0   r1   r   r   )gß›ð\)Uî¿g$èÔ:€‹¿r2   )g’ðy´ÌØ?g3wã“—Å?r   )r   r   r3   r   r   r"   r#   r   r$   r%   r&   r4   )
r'   r(   r5   r6   r   r   r%   r*   r#   r,   r   r   r   Útest_poisson_2dƒ   s"    





rV   c               	   C   sž  t j d¡ d} t  d¡}t  |t  | d ¡¡}t jjdd�}t  |t  | d ¡¡}t jj| dfd�}t jd }t  ||¡| }ddt  	| ¡  }t jj
| d�|k  t¡}t|||d�}| ¡ }	t|||d�}
|
jd	d	d
�}t|	j|jdd� t|||d�}|jddd
�}t|jt jd dd� t ||d d …d	f |d d …df |d d …df |d d …df |dœ¡}d}tj|d|d�}|jddd
�}t|j|jƒ d S )NiÌ>4 r8   r/   r9   rP   ©r   r   r   r   r   r   r   ©ZL1_wtÚalphar2   r   gš™™™™™©?)r   r   gîwIÝ¬á?r   r   r
   rO   ©r'   r5   r6   Úx3Zx4r   úy ~ 0 + x1 + x2 + x3 + x4r   r>   )r   r@   rA   ÚarangeÚkronÚonesrC   r   ÚdotÚexpÚuniformZastypeÚintr   r$   Úfit_regularizedr   r%   rD   rE   rF   ©rH   r   Zgroup_effectsr   r%   Zlin_predZmeanr'   Zmodel0Zresult0rI   rJ   rL   rM   rK   ZfmlZmodel3Zresult3r   r   r   Útest_lasso_logistic    s6    

0 ÿrf   c               	   C   sˆ  t j d¡ d} t  d¡}t  |t  | d ¡¡}t jjdd�}t  |t  | d ¡¡}t jj| dfd�}t jd }t  ||¡| }t  	|¡}t j 
|¡}t|||d�}| ¡ }	t|||d�}
|
jddd	�}t|	j|jd
d� t|||d�}|jddd	�}t|jt jd dd� t ||d d …df |d d …df |d d …df |d d …df |dœ¡}d}tj|d|d�}|jddd	�}t|j|jƒ d S )Niz9 r8   r/   r9   rP   rW   r   r   rX   r2   r   r   gš™™™™™É?)r   r   g~{ÜWí?r   r   r
   rO   rZ   r\   r   r>   )r   r@   rA   r]   r^   r_   rC   r   r`   ra   Zpoissonr   r$   rd   r   r%   rD   rE   rF   re   r   r   r   Útest_lasso_poissonÉ   s6    


0 ÿrg   c                 C   s>  t j d¡ t  t  d¡t  | d ¡¡}t jj| d�}t jj| d�}t j|d d …d f |d d …d f fdd�}t  dddgdddgg¡}t  	||¡}t  
|¡}|| d¡d d …d f  }| d¡}dt  | ¡ }	t jj| d�}
d|	|
|d d …df k < d|	|
|d d …df k < d|	|
|d d …df k < t |	|||d	œ¡}|S )
Néë   rQ   r9   r   )Zaxisr   r   r
   r<   )r   r@   rA   r^   r_   r]   rC   ZconcatenateÚarrayr`   ra   ÚsumZcumsumrb   rD   rE   )rH   r(   r5   r6   ZxmÚpaÚlprÚprZcprr'   ÚurK   r   r   r   Úgen_mnlogitò   s(    *

 ÿro   c                  C   s^   t dƒ} tjdd| d�}tdƒD ]8}tjjdd�}| |¡}t||j	ƒ}t
||dd	d
� q d S )NéZ   r=   r(   r>   rQ   rP   r9   r   r2   ©r   Úatol)ro   r   rF   Úranger   r@   rC   r#   r   r"   r   )rK   r   r)   Zzar*   r+   r   r   r   Útest_conditional_mnlogit_grad
  s      ÿ
rt   c                  C   sl   t dƒ} tjdd| d�}| ¡ }t|jt ddgddgg¡d	d	d
� t|jt ddgddgg¡d	d	d
� d S )Nrp   r=   r(   r>   g0´ß0è?gJ§à¶×^ù¿gúvØeDý?g·R�H7õ¿r   rq   gâÊ¸-ºÊå?g¡…%šræ?g©­þcÜä?gÂûh@Öã?)	ro   r   rF   r$   r   r%   r   Úasarrayr&   ©rK   r   r,   r   r   r   Útest_conditional_mnlogit_2d  s.      ÿ
ÿ ü
ÿ ürw   c                  C   s˜   t dƒ} tjj| jd d�| d< tjdd| d�}| ¡ }t|j	t 
dd	gd
dgddgg¡ddd� t|jt 
ddgddgddgg¡ddd� | ¡  d S )Nrp   r   r9   r[   zy ~ 0 + x1 + x2 + x3r(   r>   ggÒ¦êYç?g8»µL†#ú¿g‚ :vþ?gFaE<õ¿gèN°ÿ:7½¿g"âæT2 ¼¿r   )rr   r   g&jjÙÚå?g}–çÁÝYã?g:ž%Èˆå?gPSËÖú"Û?gÂlËç?g�6ŽX‹Õ?)ro   r   r@   rC   Úshaper   rF   r$   r   r%   ru   r&   r4   rv   r   r   r   Útest_conditional_mnlogit_3d,  s6      ÿ
þ û
þ ûry   )Únumpyr   Z'statsmodels.discrete.conditional_modelsr   r   r   Zstatsmodels.tools.numdiffr   Znumpy.testingr   ZpandasrD   r-   r7   rN   rS   rV   rf   rg   ro   rt   rw   ry   r   r   r   r   Ú<module>   s   $!))