a
    \:b$d                     @   s~  d Z ddlZddlZddl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 ddlm  mZ G d	d
 d
ee	ZG dd dee
ZG dd deeZG dd dee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e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$e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.e)Z+G d/d0 d0e)Z,G d1d2 d2e)Z-G d3d4 d4e)Z.G d5d6 d6eZ/G d7d8 d8e/Z0G d9d: d:e/Z1G d;d< d<e/Z2G d=d> d>eZ3G d?d@ d@e3Z4G dAdB dBe3Z5G dCdD dDe3Z6G dEdF dFe3Z7dS )GzL
Created on Sun May 10 12:39:33 2015

Author: Josef Perktold
License: BSD-3
    N)assert_allcloseassert_equal)PoissonLogitProbit)GLMfamily)TheilGLS)PenalizedMixinc                   @   s   e Zd ZdS )PoissonPenalizedN__name__
__module____qualname__ r   r   Dlib/python3.9/site-packages/statsmodels/base/tests/test_penalized.pyr      s   r   c                   @   s   e Zd ZdS )LogitPenalizedNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ProbitPenalizedNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )GLMPenalizedNr   r   r   r   r   r   "   s   r   c                   @   sT   e Zd Zedd Zedd Zdd Zejj	dd Z
ejj	d	d
 Zdd ZdS )CheckPenalizedPoissonc                 C   s   t jd d\}}d}t j||dt j|dd   d d }|d9 }d|d d df< t |}d	t d|d  |d |< ||}| |}|| _|| _	|| _
d
| _d| _td d d | _|| _d| _tjdd
d| _|   d S )Ni )  
            ?      g333333?r   g      ?-C6?ư>F皙?)Zc0)nprandomseedrandZzerosarangedot_generate_endog	k_nonzeroxyrtolatolslice
exog_indexk_paramsskip_hessiansmpenZSCADSmoothedpenalty_initialize)clsZnobsZk_varsr'   r(   Zbetalinpredr)   r   r   r   setup_class(   s4    


z!CheckPenalizedPoisson.setup_classc                 C   s&   t |}t jd t j|}|S )N  )r    expr!   r"   Zpoissonselfr4   mur)   r   r   r   r&   E   s    
z%CheckPenalizedPoisson._generate_endogc                 C   s   | j }| j}t|jdk | j t|j| j |j| j| j	d t|j
| j |j
| j| j	d t : tdt t|j| j |j| j| j	d W d    n1 s0    Y  t| | dd d S )Nr   r*   r+   ignore皙?r*   )res1res2r   paramssumr.   r   r-   r*   r+   bsewarningscatch_warningssimplefilterRuntimeWarningpvaluespredictr9   r?   r@   r   r   r   test_params_tableL   s    
$z'CheckPenalizedPoisson.test_params_tablec                 C   s   | j   d S N)r?   Zsummaryr9   r   r   r   test_summary[   s    z"CheckPenalizedPoisson.test_summaryc                 C   sD   | j  }t| tsJ t| ts.J t| ts@J d S rL   )r?   Zsummary2
isinstanceZas_latexstrZas_htmlZas_text)r9   Zsummr   r   r   test_summary2_   s    
z#CheckPenalizedPoisson.test_summary2c                 C   s   | j }|jd }t|jtr$ddini }t|jj|fi || j |jj|fi || j dd | j	st| jt
r| j }}n| jd d d f }| j}|jj|jfi |||f }|jj|jfi |||f }t||dd d S )N\(\?Zscaler   g?r>   {Gz?)r?   rA   rO   modelr   r   scorer-   Zscore_numdiffr/   r,   ZhessianZhessian_numdiff)r9   r?   pkwdsZidx1Zidx2Zh1Zh2r   r   r   test_numdifff   s    
z"CheckPenalizedPoisson.test_numdiffN)r   r   r   classmethodr5   r&   rK   pytestZmarkZsmokerN   rQ   rX   r   r   r   r   r   &   s   



r   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonNonePenalc                 C   sR   | j | j }}t||}|jdd| _t||}d|_|jdddd| _d| _d S Nr   dispbfgsd   methodmaxiterr^   h㈵>	r)   r(   r   fitr@   r   
pen_weightr?   r+   r3   r)   r(   modpmodr   r   r   r2      s    

z)TestPenalizedPoissonNonePenal._initializeNr   r   r   rY   r2   r   r   r   r   r[   ~   s   r[   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonNoPenalc                 C   sR   | j | j }}t||}|jdd| _t||}d|_|jdddd| _d| _d S r\   re   rh   r   r   r   r2      s    

z'TestPenalizedPoissonNoPenal._initializeNrk   r   r   r   r   rl      s   rl   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonNoPenalc                 C   sb   | j | j }}t||t d}| | _t||t | jd}d|_	|jdddd| _
d| _d S )Nr   r	   penalr   r_   r`   ra   rd   )r)   r(   r   r	   r   rf   r@   r   r1   rg   r?   r+   rh   r   r   r   r2      s    
z*TestPenalizedGLMPoissonNoPenal._initializeNrk   r   r   r   r   rm      s   rm   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonOraclec                 C   s   | j | j }}t||d d d | jf }|jdd| _t||| jd}| jd9  _d|j	_
|jdddd| _td | jd | _d	| _d S )
Nr   r]   ro         ?r=   r_   r`   ra   {Gzt?r)   r(   r   r'   rf   r@   r   r1   rg   ro   taur?   r,   r-   r+   rh   r   r   r   r2      s    z&TestPenalizedPoissonOracle._initializeNrk   r   r   r   r   rp      s   rp   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonOraclec                 C   s   | j | j }}t||d d d | jf t d}| | _t||t | j	d}| j
d9  _
d|j_|jddd| _td | jd | _d| _d S )	Nr   rn   rr   r=   r_   r`   )rb   rc   rs   r)   r(   r   r'   r	   r   rf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   rh   r   r   r   r2      s    $
z)TestPenalizedGLMPoissonOracle._initializeNrk   r   r   r   r   rv      s   rv   c                   @   s    e Zd Zedd Zdd ZdS )TestPenalizedPoissonOracleHCc                 C   s   | j | j }}d}t||d d d | jf }|j|dddd| _t||| jd}| jd9  _d|j	_
|j|dddd| _td | jd | _d	| _d S )
NHC0r_   r`   r   cov_typerb   rc   r^   rq   rr   r=   rs   rt   r3   r)   r(   r{   ri   rj   r   r   r   r2      s    

z(TestPenalizedPoissonOracleHC._initializec                 C   s   | j }| j}t| j jd dddd d}t| j j| tg d}tg d}t|jd | j	 |dd t|j
d | j	 |d	d
 t|jd | j	 || jd t|j
d | j	 |dd
 d S )Nry   3Standard Errors are heteroscedasticity robust (HC0)FZdescriptionZ	adjust_dfuse_tZscaling_factorgi!+P?gS?g}.?gȋ?g8;͜?gXEg.{?g!	?gň!y?h㈵>r+   r   r>   rS   )r?   r@   r   r{   cov_kwdsr    arrayr   rA   r'   rC   r+   r9   r?   r@   r   rA   rC   r   r   r   test_cov_type   s    z*TestPenalizedPoissonOracleHC.test_cov_typeNr   r   r   rY   r2   r   r   r   r   r   rx      s   
rx   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonOracleHCc                 C   s   | j | j }}d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d9  _
d	|j_|j|dddd| _td | jd | _d
| _d S )Nry   r   r_   r`   r   rz   rn   rr   r=   rs   rw   r|   r   r   r   r2      s    $

z+TestPenalizedGLMPoissonOracleHC._initializeNrk   r   r   r   r   r      s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonGLMOracleHCc                 C   s   | j | j }}d}t||| jd}| jd9  _d|j_|j|dddd| _t	||t
 | jd	}| jd9  _d|j_|j|dddd| _td d d | _d
| _d S )Nry   rq   rr   r=   r_   r`   r   rz   rn   r   )r)   r(   r   r1   rg   ro   ru   rf   r@   r   r	   r   r?   r,   r-   r+   r|   r   r   r   r2     s     

z+TestPenalizedPoissonGLMOracleHC._initializeNrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )#TestPenalizedPoissonOraclePenalizedc                 C   s   | j | j }}t||d d d | jf | jd}|jdddd| _t||| jd}|jddddd| _td | jd | _	d| _
d S 	Nrq   r_   r`   r   ra   Frb   rc   trimr^   MbP?)r)   r(   r   r'   r1   rf   r@   r?   r,   r-   r+   rh   r   r   r   r2   +  s    "z/TestPenalizedPoissonOraclePenalized._initializeNrk   r   r   r   r   r   )  s   r   c                   @   s    e Zd Zedd Zdd ZdS )$TestPenalizedPoissonOraclePenalized2c                 C   s   | j | j }}t||d d d | jf | jd}| jd9  _d|j_t	g d}|j
|d dddd	| _t	g d
}t||| jd}| jd9  _d|j_|j
|d ddddd| _td | jd | _d| _| j| _d S )Nrq   r   r=   gjsR?gy?g.Ps.?g>#?r   r_   r`   r   )start_paramsrb   rc   r^   
geBCR?g8?g.?gRHދ?g:$žg`zܴg?Lh>gqsľg釘_}g;
cclҾT)r   rb   rc   r   r^   :0yE>r)   r(   r   r'   r1   rg   ro   ru   r    r   rf   r@   r?   r,   r-   r+   r.   )r3   r)   r(   ri   sp2params_notrimrj   r   r   r   r2   =  s$    "
z0TestPenalizedPoissonOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S Nr   r   r?   rA   r'   rC   rM   r   r   r   
test_zerosW  s    z/TestPenalizedPoissonOraclePenalized2.test_zerosNr   r   r   rY   r2   r   r   r   r   r   r   ;  s   
r   c                   @   s    e Zd Zedd Zdd ZdS )&TestPenalizedPoissonOraclePenalized2HCc                 C   s   | j | j }}d}t||d d d | jf | jd}| jd9  _d|j_t	g d}|j
|d |ddd	d
| _t	g d}t||| jd}| jd9  _d|j_|j
|d |dddd	d| _td | jd | _d| _| j| _d S )Nry   rq   r   r=   r   r   r_   r`   r   )r   r{   rb   rc   r^   r   T)r   r{   rb   rc   r   r^   g-q=r   )r3   r)   r(   r{   ri   r   r   rj   r   r   r   r2   a  s&    "z2TestPenalizedPoissonOraclePenalized2HC._initializec                 C   s   | j }| j}t| j jd t| j jjd dddd d}t| j j| t| j j| j jj tg d}tg d}t|j	d | j
 |dd t|jd | j
 |d	d
 t|j	d | j
 |dd t|jd | j
 |d	d
 d S )Nry   r}   Fr~   r   r   r   r   rd   r>   )r?   r@   r   r{   Zresults_constrainedr   r    r   r   rA   r'   rC   r   r   r   r   r   {  s    z4TestPenalizedPoissonOraclePenalized2HC.test_cov_typeNr   r   r   r   r   r   _  s   
r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedLogitc                 C   sD   ddt | |  d   }t jd t jt||k }|S )Nr   r   r6   )r    r7   meanr!   r"   r#   lenr8   r   r   r   r&     s     z#CheckPenalizedLogit._generate_endogNr   r   r   rY   r&   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedLogitNoPenalc                 C   sT   | j | j }}t||}|jdd| _t||| jd}d|_|jdd| _d| _	d S )Nr   r]   rq   r   )
r)   r(   r   rf   r@   r   r1   rg   r?   r+   rh   r   r   r   r2     s    
z%TestPenalizedLogitNoPenal._initializeNrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedLogitOraclec                 C   s   | j | j }}t||d d d | jf }|jdd| _t||| jd}| jd9  _d|j	_
|jdddd| _td | jd | _d	| _d S )
Nr   r]   rq   r   r=   r_   r`   ra   rs   )r)   r(   r   r'   rf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   rh   r   r   r   r2     s    z$TestPenalizedLogitOracle._initializeNrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMLogitOraclec                 C   s   | j | j }}t||d d d | jf t d}|jdd| _t||t | j	d}| j
d9  _
d|j_|jdddd	| _td | jd | _d
| _d S )Nr   r   r]   rn   r   r=   r_   r`   ra   rs   )r)   r(   r   r'   r	   Binomialrf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   rh   r   r   r   r2     s    $z'TestPenalizedGLMLogitOracle._initializeNrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )!TestPenalizedLogitOraclePenalizedc                 C   s   | j | j }}t||d d d | jf | jd}|jdddd| _t||| jd}|jddddd| _td | jd | _	d| _
d S r   )r)   r(   r   r'   r1   rf   r@   r?   r,   r-   r+   rh   r   r   r   r2     s    "z-TestPenalizedLogitOraclePenalized._initializeNrk   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )"TestPenalizedLogitOraclePenalized2c                 C   s   | j | j }}t||d d d | jf | jd}| jd9  _d|j_|jdddd| _	t||| jd}| jd9  _d|j_|jddddd	| _
td | jd | _d
| _| j| _d S )Nrq   r   r=   r_   r`   r   ra   Tr   r   )r)   r(   r   r'   r1   rg   ro   ru   rf   r@   r?   r,   r-   r+   r.   rh   r   r   r   r2     s    "z.TestPenalizedLogitOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S r   r   rM   r   r   r   r     s    z-TestPenalizedLogitOraclePenalized2.test_zerosNr   r   r   r   r   r     s   
r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedBinomCountc                 C   s|   ddt | |  d   }t jd dt t|t }|d t|d   d7  < t j||}t 	||| fS )Nr   r   r6      r   )
r    r7   r   r!   r"   onesr   intZbinomialZcolumn_stack)r9   r4   r:   Zn_trialsr)   r   r   r   r&     s     z(CheckPenalizedBinomCount._generate_endogNr   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )!TestPenalizedGLMBinomCountNoPenalc                 C   s   | j | j }}|d d d df }dtt| }t||t |d}|jddd| _	t
||t || jd}d|_|jdd	dd| j	jd
 d| _d| _d| _d S )Nr         пr	   offsetr_   r`   )rb   max_start_irlsr	   r   ro   r      g?)rb   r   rc   r^   r   绽|=)r)   r(   r    r   r   r   r	   r   rf   r@   r   r1   rg   rA   r?   r+   r.   )r3   r)   r(   r   ri   rj   r   r   r   r2     s    
z-TestPenalizedGLMBinomCountNoPenal._initializec                 C   sd   | j }| j}t|j|jd |j|jd dd t|j|jd |j|jd dd d S )NrR   r   r>   )r?   r@   r   rT   rU   rA   Z	score_obsrJ   r   r   r   
test_deriv%  s    z,TestPenalizedGLMBinomCountNoPenal.test_derivN)r   r   r   rY   r2   r   r   r   r   r   r     s   
r   c                   @   s   e Zd Zedd ZdS )"TestPenalizedGLMBinomCountOracleHCc                 C   s   | j | j }}dtt| }d}t||d d d | jf t |d}|j	|dddd| _
t||t || jd}| jd	9  _d
|j_|j	|ddddd| _td | jd | _d| _d S )Nr   ry   r   newton  r   rz   r   r   r=   r_   r`   )r{   rb   r   rc   r^   r   )r)   r(   r    r   r   r   r'   r	   r   rf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   r3   r)   r(   r   r{   ri   rj   r   r   r   r2   4  s&    

z.TestPenalizedGLMBinomCountOracleHC._initializeNrk   r   r   r   r   r   .  s   r   c                   @   s   e Zd Zedd ZdS )#TestPenalizedGLMBinomCountOracleHC2c                 C   s   | j | j }}dtt| }d}t||d d d | jf t |d}|j	|dddd| _
t||t || jd}| jd	9  _d
|j_|j	|dddddd| _td | jd | _d| _| j| _d S )Nr   ry   r   r   r   r   rz   r   r   r=   r_   r`   r   )r{   rb   r   rc   r^   r   )r)   r(   r    r   r   r   r'   r	   r   rf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   r.   r   r   r   r   r2   N  s(    

z/TestPenalizedGLMBinomCountOracleHC2._initializeNrk   r   r   r   r   r   J  s   r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedGaussianc                 C   s2   t d}t jd ||t jt|  }|S )Nr   r6   )r    Zsqrtr!   r"   r#   r   )r9   r4   Zsig_er)   r   r   r   r&   h  s    
z&CheckPenalizedGaussian._generate_endogNr   r   r   r   r   r   f  s   r   c                   @   s   e Zd Zedd ZdS ) TestPenalizedGLMGaussianOracleHCc                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d	9  _
d
|j_|j|dddd| _td | jd | _d| _d| _d S )Nr   ry   r   r_   r`   r   rz   rn   rr   r=   rd   r   )r)   r(   r   r'   r	   Gaussianrf   r@   r   r1   rg   ro   ru   r?   r,   r-   r+   r*   r|   r   r   r   r2   r  s     $

z,TestPenalizedGLMGaussianOracleHC._initializeNrk   r   r   r   r   r   p  s   r   c                   @   s   e Zd Zedd ZdS )!TestPenalizedGLMGaussianOracleHC2c                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d	9  _
d
|j_|j|ddddd| _td | jd | _| j| _d| _d| _d S )Nr   ry   r   r_   r`   r   rz   rn   rr   r=   Tr{   rb   rc   r^   r   r   )r)   r(   r   r'   r	   r   rf   r@   r   r1   rg   ro   ru   r?   r,   r-   r.   r+   r*   r|   r   r   r   r2     s"    $

z-TestPenalizedGLMGaussianOracleHC2._initializeNrk   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMGaussianL2c                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t	|j
d d	kt}t||t tj|d
d}| jd9  _|j|ddddd| _td | jd | _|j
d | _d| _d| _d S )Nr   ry   r   r_   r`   r   rz   r   r   )weightsrn   r   Fr   r   )r)   r(   r   r'   r	   r   rf   r@   r    r$   shapeZastypefloatr   r0   L2ConstraintsPenaltyrg   r?   r,   r-   r.   r+   r*   )r3   r)   r(   r{   ri   r   rj   r   r   r   r2     s&    $


z&TestPenalizedGLMGaussianL2._initializeNrk   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestPenalizedGLMGaussianL2Theilc           	      C   s   | j | j }}|d }|jd }d}t|dd  }t|||d}|jddd| _tj	|d	}t
||t |d
}| jd9  _|j|ddddd| _|| _td | jd | _|jd | _d| _d| _d S )Nr   r   ry   r   )Zr_matrixg]Nz@F)rg   r   )restrictionrn   r_   r`   r   r   r   )r)   r(   r   r    Zeyer
   rf   r@   r0   r   r   r	   r   rg   r?   r'   r,   r-   r.   r+   r*   )	r3   r)   r(   kr{   r   ri   Zpenrj   r   r   r   r2     s(    

z+TestPenalizedGLMGaussianL2Theil._initializec                 C   s   | j }| j}t|jdk | j t|j|j| j| jd t	d d d }t|j
| |j
| d| jd t|j| |j| ddd t|j| |j| ddd t| | dd d S )Nr   r;   r   g{Gz?rs   r   r>   )r?   r@   r   rA   rB   r.   r   r*   r+   r,   rC   ZtvaluesrH   rI   )r9   r?   r@   r-   r   r   r   rK     s"    z1TestPenalizedGLMGaussianL2Theil.test_params_tableN)r   r   r   rY   r2   rK   r   r   r   r   r     s   
r   )8__doc__rD   rZ   Znumpyr    Znumpy.testingr   r   Z#statsmodels.discrete.discrete_modelr   r   r   Z+statsmodels.genmod.generalized_linear_modelr   Zstatsmodels.genmod.familiesr	   Z(statsmodels.sandbox.regression.penalizedr
   Zstatsmodels.base._penalizedr   Zstatsmodels.base._penaltiesbaseZ
_penaltiesr0   r   r   r   r   objectr   r[   rl   rm   rp   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sR   X($5

