U
    Kvf  ã                   @   sx   d dl Zd dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZ d dlmZ dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )é    N)ÚSlicedInverseRegÚSAVEÚPHDÚCORE)Úassert_equalÚassert_allclose)Úapprox_fprimec                  C   s~  t j d¡ t jjdd} d| d d …df  t  d¡| d d …df   | d d …df< d| d d …df  t  d¡| d d …d	f   | d d …d	f< t jd
 }t  | |¡}t  |¡}t j |¡}t	dƒD ]´}|dkrät
|| ƒ}| ¡ }nü|dkrt|| ƒ}|jdd}nÚ|dkr,t|| dd}|jdd}n´|d	kr¢t || d d …df | d d …df | d d …df | d d …d	f | d d …df dœ¡}t
jd|d}| ¡ }n>|dkrÀt|| ƒ}| ¡ }n |dkràt|| ƒ}|jdd}tt  |jd |jd  ¡dkdƒ t  |j¡}	t  |	d d …df |¡}
|
t  t  |	d d …df d ¡¡ }
|
t  t  |d ¡¡ }
tt  |
¡dkdƒ qÂd S )Niê¨  )iô  é   ©Úsizeç      à?r   g      è?é   é   é   )r   r   éÿÿÿÿr   r   é   éd   )Zslice_nT)Zbcé   )ÚyZx0Úx1Zx2Zx3Zx4zy ~ 0 + x0 + x1 + x2 + x3 + x4)Údatar	   )Zresidgffffffî?)ÚnpÚrandomÚseedÚnormalÚsqrtÚr_ÚdotÚexpZpoissonÚranger   Úfitr   ÚpdZ	DataFrameZfrom_formular   r   ÚabsZeigsZasarrayÚparamsÚsum)ÚxmatÚbÚlprZevr   ÚmethodÚmodelÚrsltZdfr#   Úq© r,   úL/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/regression/tests/test_dimred.pyÚtest_poisson   sV    ::







û ÿ





$$r.   c               	   C   sF  t j d¡ d} d}t jj| |fd}t  |t  dd|¡¡}| d¡}|d|d   t jj| d }t||ƒ}| ¡ }t  	|d |f¡}t
|d ƒD ]}	dddg||	|	|	d	 …f< q”tjtd
d | dd	| ¡}W 5 Q R X t
dƒD ]Z}t jj|dfd}
t j |
d¡\}
}}t|
 ¡ |jdƒ}| |
 ¡ ¡}t||ddd qæd S )Né*m éè  é
   r
   r   r   r   éþÿÿÿr   zSIR.fit_regularized did not©Úmatchr	   r   çH¯¼šò×z>çñhãˆµøä>g-Cëâ6?©ÚatolÚrtol)r   r   r   r   r   Zlinspacer$   r   r    Úzerosr   ÚpytestÚwarnsÚUserWarningÚfit_regularizedÚlinalgÚsvdr   ÚravelZ_regularized_objectiveZ_regularized_gradr   )ÚnÚpr%   Úy1Úy2r   r)   Ú_ÚfmatÚiÚpaÚgnZgrr,   r,   r-   Útest_sir_regularized_numdiffB   s(    

rK   c                  C   s`  t j d¡ d} d}t jj| |fd}t  |d d …dd…f t jd ¡t jj| d }t||ƒ}| ¡ }t  d|f¡}d	d
g|ddd…f< d	d
g|d	dd…f< | 	d	d| ¡}t  |¡}d	d	d
d
g|dd…< |j
d d …df }	|j
d d …dd…f }
dd„ }t|||	ƒ|||
ƒkdƒ t|||
ƒdk dƒ tt  t  ||	¡d ¡t  t  ||
¡d ¡kdƒ d S )Nr/   r0   r1   r
   r   r   ©r   r   r   r   r   r   r   r   c                 S   sF   | t  t  | |  ¡¡ } |t  t  || ¡¡ }dt  t  | |¡¡ S )Nr   )r   r   r$   r"   r   )Úxr   r,   r,   r-   Úsim}   s    z$test_sir_regularized_1d.<locals>.simTçü©ñÒMbP?)r   r   r   r   r   r   r   r    r:   r>   r#   r   r$   )rB   rC   r%   r   r)   r*   rG   Úrslt2Zpa0Úpa1Úpa2rN   r,   r,   r-   Útest_sir_regularized_1db   s*    0

,ÿrS   c               
   C   sR  t j d¡ d} d}t jj| |fd}t  |d d …dd…f t jd ¡}t  |d d …dd…f t jd ¡}|t  |¡ t jj| d }t||ƒ}| ¡ }t  	d	|f¡}d
D ]¢}	|	dk rÄ| 
|	|¡}
n&tjtdd | 
|	|¡}
W 5 Q R X |jd d …d|	…f }t j |d¡\}}}|
j}t j t  |j|¡¡\}}}tt  |¡|	ddd qªd S )Nr/   r0   r1   r
   r   r   rL   é   r   )r   r   r   r   r   zSIR.fit_regularized didr3   gš™™™™™¹?r7   )r   r   r   r   r   r   Zarctanr   r    r:   r>   r;   r<   r=   r#   r?   r@   ÚTr   r$   )rB   rC   r%   rD   rE   r   r)   Zrslt1rG   ÚdrP   rQ   rF   rR   Úsr,   r,   r-   Útest_sir_regularized_2d   s(    ""
rX   c                  C   sÚ  t j d¡ d} g }g }tdƒD ]”}t  | ¡}t jjdd}t  |j|¡|dd…dd…f< t j 	|¡}d| d	|  }t jj|| fd}t  ||j¡}| 
|¡ | 
|t  |¡ ¡ q t  |¡}t j|dd
}dD ] }t|||ƒ}t jj| |fd}	t j |	d¡\}	}
}
t|	 ¡ |jdƒ}| |	 ¡ ¡}t||ddƒ | ¡ }|j}t|jd | ƒ t|jd |ƒ tt  |j|¡t  |¡ddƒ |dkrÒt  | df¡}t  d¡|dd…dd…f< tt  t  |j|¡¡dddd qÒd S )Ni†  r   r   )r   r   r
   r   r   r0   é2   )Zaxis)r   r   r   r5   r6   r   g:Œ0âŽyE>rO   )r9   r8   )r   r   r   r   Zeyer   r   rU   r?   ZcholeskyÚappendZonesZconcatenater   r@   r   rA   ZloglikeZscorer   r    r#   r   Úshaper:   Útrace)rC   ZendogZexogÚkÚcrM   ZcrÚmZdimÚptrF   rJ   Úgr*   ZprojZprojtr,   r,   r-   Útest_covreduce«   sF    



 ÿrb   )Znumpyr   Zpandasr!   r;   Zstatsmodels.regression.dimredr   r   r   r   Znumpy.testingr   r   Zstatsmodels.tools.numdiffr   r.   rK   rS   rX   rb   r,   r,   r,   r-   Ú<module>   s   7 +