U
    Kvf%                     @   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 O/tmp/pip-unpacked-wheel-2v6byqio/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rt|||d}nt|||d}| }t	
||||d	}	| dkrt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ߛ\)Ug$: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   gwIݬ?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 )NZ   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veD?gRH7r   rq   gʸ-?g%r?gc?gh@?)	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?g8L#g :v?gFaE<gN:7g"T2 r   )rr   r   g&jj?g}Y?g:%Ȉ?gPS"?gl?g6X?)ro   r   r@   rC   shaper   rF   r$   r   r%   ru   r&   r4   rv   r   r   r   test_conditional_mnlogit_3d,  s6      
 
 ry   )Z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   $!))