U
    Kvf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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.Z/G d9d: d:e.Z0G d;d< d<e.Z1G d=d> d>eZ2G d?d@ d@e2Z3G dAdB dBe2Z4G dCdD dDe2Z5G dEdF dFe2Z6d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   I/tmp/pip-unpacked-wheel-2v6byqio/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rand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)   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r4   r6   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 0 tdt t|j| j |j| j| j	d W 5 Q R X 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selfr@   rA   r   r   r   test_params_tableL   s"     
 z'CheckPenalizedPoisson.test_params_tablec                 C   s   | j   d S N)r@   summaryrL   r   r   r   test_summary[   s    z"CheckPenalizedPoisson.test_summaryc                 C   sD   | j  }t| tstt| ts.tt| ts@td S rN   )r@   Zsummary2
isinstanceZas_latexstrAssertionErrorZas_htmlZas_text)rL   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|| j |jj|f|| j dd | j	st| jt
rx| j }}n| jd d d f }| j}|jj|jf|||f }|jj|jf|||f }t||dd d S )N\(\?Zscaler   g?r?   {Gz?)r@   rB   rR   modelr   r   scorer.   Zscore_numdiffr0   r-   ZhessianZhessian_numdiff)rL   r@   pkwdsZidx1Zidx2h1h2r   r   r   test_numdifff   s    
z"CheckPenalizedPoisson.test_numdiffN)r   r   r   classmethodr7   r'   rM   pytestmarkZsmokerQ   rU   r^   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maxiterre   h㈵>	r*   r)   r   fitrA   r   
pen_weightr@   r,   r4   r*   r)   modpmodr   r   r   r3      s    

z)TestPenalizedPoissonNonePenal._initializeNr   r   r   r_   r3   r   r   r   r   rb   ~   s   rb   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 rc   rl   ro   r   r   r   r3      s    

z'TestPenalizedPoissonNoPenal._initializeNrr   r   r   r   r   rs      s   rs   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   rf   rg   rh   rk   )r*   r)   r   r	   r   rm   rA   r   r2   rn   r@   r,   ro   r   r   r   r3      s    
z*TestPenalizedGLMPoissonNoPenal._initializeNrr   r   r   r   r   rt      s   rt   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   rd   rv         ?r>   rf   rg   rh   {Gzt?r*   r)   r   r(   rm   rA   r   r2   rn   rv   taur@   r-   r.   r,   ro   r   r   r   r3      s    z&TestPenalizedPoissonOracle._initializeNrr   r   r   r   r   rw      s   rw   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   ru   ry   r>   rf   rg   )ri   rj   rz   r*   r)   r   r(   r	   r   rm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   ro   r   r   r   r3      s    $
z)TestPenalizedGLMPoissonOracle._initializeNrr   r   r   r   r   r}      s   r}   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HC0rf   rg   r   cov_typeri   rj   re   rx   ry   r>   rz   r{   r4   r*   r)   r   rp   rq   r   r   r   r3      s    

z(TestPenalizedPoissonOracleHC._initializec                 C   s   | j }| j}t| j jd dddd d}t| j j| tddddg}td	d
ddg}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 )Nr   3Standard Errors are heteroscedasticity robust (HC0)FdescriptionZ	adjust_dfuse_tZscaling_factori!+P?S?}.?ȋ?8;͜?XEg.{?!	?ň!y?h㈵>r,   r   r?   rW   )r@   rA   r   r   cov_kwdsr    arrayr   rB   r(   rD   r,   rL   r@   rA   r   rB   rD   r   r   r   test_cov_type   s*        z*TestPenalizedPoissonOracleHC.test_cov_typeNr   r   r   r_   r3   r   r   r   r   r   r      s   
r   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 )Nr   r   rf   rg   r   r   ru   ry   r>   rz   r~   r   r   r   r   r3      s    $

z+TestPenalizedGLMPoissonOracleHC._initializeNrr   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 )Nr   rx   ry   r>   rf   rg   r   r   ru   r   )r*   r)   r   r2   rn   rv   r|   rm   rA   r   r	   r   r@   r-   r.   r,   r   r   r   r   r3     s     

z+TestPenalizedPoissonGLMOracleHC._initializeNrr   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 	Nrx   rf   rg   r   rh   Fri   rj   trimre   MbP?)r*   r)   r   r(   r2   rm   rA   r@   r-   r.   r,   ro   r   r   r   r3   +  s    "z/TestPenalizedPoissonOraclePenalized._initializeNrr   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	ddddg}|j
|d d	d
dd| _t	ddddddddddg
}t||| jd}| jd9  _d|j_|j
|d d	d
ddd| _td | jd | _d| _| j| _d S )Nrx   r   r>   jsR?y?.Ps.?>#?r   rf   rg   r   )start_paramsri   rj   re   eBCR?繓8?.?RHދ?:$ž`zܴ?Lh>qsľ釘_};
cclҾT)r   ri   rj   r   re   :0yE>r*   r)   r   r(   r2   rn   rv   r|   r    r   rm   rA   r@   r-   r.   r,   r/   )r4   r*   r)   rp   sp2params_notrimrq   r   r   r   r3   =  sB    "        
   z0TestPenalizedPoissonOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S Nr   r   r@   rB   r(   rD   rP   r   r   r   
test_zerosW  s    z/TestPenalizedPoissonOraclePenalized2.test_zerosNr   r   r   r_   r3   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	ddddg}|j
|d	 |d
ddd| _t	ddddddddddg
}t||| jd}| jd9  _d|j_|j
|d	 |d
dddd| _td | jd | _d| _| j| _d S )Nr   rx   r   r>   r   r   r   r   r   rf   rg   r   )r   r   ri   rj   re   r   r   r   r   r   r   r   r   r   r   T)r   r   ri   rj   r   re   g-q=r   )r4   r*   r)   r   rp   r   r   rq   r   r   r   r3   a  sF    "            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ddddg}td	d
ddg}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 )Nr   r   Fr   r   r   r   r   r   r   r   r   r   r   rk   r?   )r@   rA   r   r   Zresults_constrainedr   r    r   r   rB   r(   rD   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   r8   )r    r9   meanr!   r"   r#   lenr:   r   r   r   r'     s     z#CheckPenalizedLogit._generate_endogNr   r   r   r_   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   rd   rx   r   )
r*   r)   r   rm   rA   r   r2   rn   r@   r,   ro   r   r   r   r3     s    
z%TestPenalizedLogitNoPenal._initializeNrr   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   rd   rx   r   r>   rf   rg   rh   rz   )r*   r)   r   r(   rm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   ro   r   r   r   r3     s    z$TestPenalizedLogitOracle._initializeNrr   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   rd   ru   r   r>   rf   rg   rh   rz   )r*   r)   r   r(   r	   Binomialrm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   ro   r   r   r   r3     s    $z'TestPenalizedGLMLogitOracle._initializeNrr   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(   r2   rm   rA   r@   r-   r.   r,   ro   r   r   r   r3     s    "z-TestPenalizedLogitOraclePenalized._initializeNrr   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 )Nrx   r   r>   rf   rg   r   rh   Tr   r   )r*   r)   r   r(   r2   rn   rv   r|   rm   rA   r@   r-   r.   r,   r/   ro   r   r   r   r3     s    "z.TestPenalizedLogitOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S r   r   rP   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   r8      r   )
r    r9   r   r!   r"   onesr   intZbinomialZcolumn_stack)r4   r6   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	   offsetrf   rg   )ri   max_start_irlsr	   r   rv   r      g?)ri   r   rj   re   r   绽|=)r*   r)   r    r   r   r   r	   r   rm   rA   r   r2   rn   rB   r@   r,   r/   )r4   r*   r)   r   rp   rq   r   r   r   r3     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 )NrV   r   r?   )r@   rA   r   rX   rY   rB   Z	score_obsrK   r   r   r   
test_deriv%  s      z,TestPenalizedGLMBinomCountNoPenal.test_derivN)r   r   r   r_   r3   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   r   r   newton  r   r   r   r   r>   rf   rg   )r   ri   r   rj   re   r   )r*   r)   r    r   r   r   r(   r	   r   rm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   r4   r*   r)   r   r   rp   rq   r   r   r   r3   4  s(    

 z.TestPenalizedGLMBinomCountOracleHC._initializeNrr   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   r   r   r   r   r   r   r   r   r>   rf   rg   r   )r   ri   r   rj   re   r   )r*   r)   r    r   r   r   r(   r	   r   rm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   r/   r   r   r   r   r3   N  s,    

  z/TestPenalizedGLMBinomCountOracleHC2._initializeNrr   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   r8   )r    sqrtr!   r"   r#   r   )r4   r6   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   r   r   rf   rg   r   r   ru   ry   r>   rk   r   )r*   r)   r   r(   r	   Gaussianrm   rA   r   r2   rn   rv   r|   r@   r-   r.   r,   r+   r   r   r   r   r3   r  s     $

z,TestPenalizedGLMGaussianOracleHC._initializeNrr   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   r   r   rf   rg   r   r   ru   ry   r>   Tr   ri   rj   re   r   r   )r*   r)   r   r(   r	   r   rm   rA   r   r2   rn   rv   r|   r@   r-   r.   r/   r,   r+   r   r   r   r   r3     s$    $

 z-TestPenalizedGLMGaussianOracleHC2._initializeNrr   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   r   r   rf   rg   r   r   r   r   )weightsru   r   Fr   r   )r*   r)   r   r(   r	   r   rm   rA   r    r%   shapeZastypefloatr   r1   L2ConstraintsPenaltyrn   r@   r-   r.   r/   r,   r+   )r4   r*   r)   r   rp   r   rq   r   r   r   r3     s(    $


 z&TestPenalizedGLMGaussianL2._initializeNrr   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   r   r   )Zr_matrixg]Nz@F)rn   r   )restrictionru   rf   rg   r   r   r   )r*   r)   r   r    Zeyer
   rm   rA   r1   r   r   r	   r   rn   r@   r(   r-   r.   r/   r,   r+   )	r4   r*   r)   kr   r   rp   Zpenrq   r   r   r   r3     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?rz   r   r?   )r@   rA   r   rB   rC   r/   r   r+   r,   r-   rD   ZtvaluesrI   rJ   )rL   r@   rA   r.   r   r   r   rM     s(       z1TestPenalizedGLMGaussianL2Theil.test_params_tableN)r   r   r   r_   r3   rM   r   r   r   r   r     s   
r   )7__doc__rE   r`   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
_penaltiesr1   r   r   r   r   r   rb   rs   rt   rw   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   <module>   sR   X($5

