B
    ¥ŠãZê  ã               @   sJ  d Z ddlZddlZddlmZ ddlmZ G dd„ dejƒZ	G dd„ dejƒZ
dd	„ Zdd
lmZmZmZ dd„ ZedkrFdZej d¡ dZd\ZZe eej ee ¡ eej de e ¡ g¡Ze
edƒZe ddd¡Ze e¡Ze  ¡  ej!eddd ej"eeddd ej"eeej#j$eed de ej#j$eed  ddd e %d ¡ e &¡  e
ed!ƒZe e¡Ze  ¡  ej!eddd ej"eeddd ej"eeej#j$eed de ej#j$eed  ddd e %d ¡ e &¡  xd"D ]Z'ee'ƒ qôW eƒ  ej d¡ dZej e¡Ze (¡ Z)ej*dd#Z+e e¡ZdS )$z$subclassing kde

Author: josef pktd
é    N)Ústatsc               @   s    e Zd ZdZdd„ Zdd„ ZdS )Úgaussian_kde_set_covariancez“
    from Anne Archibald in mailinglist:
    http://www.nabble.com/Width-of-the-gaussian-in-stats.kde.gaussian_kde---td19558924.html#a19558924
    c             C   s   || _ tjj | |¡ d S )N)Ú
covarianceÚscipyr   Úgaussian_kdeÚ__init__)ÚselfÚdatasetr   © r
   úLlib/python3.7/site-packages/statsmodels/sandbox/nonparametric/kdecovclass.pyr      s    z$gaussian_kde_set_covariance.__init__c             C   s8   t j | j¡| _tt j dt j | j ¡ƒ| j | _	d S )Né   )
ÚnpÚlinalgÚinvr   Úinv_covÚsqrtÚdetÚpiÚnÚ_norm_factor)r   r
   r
   r   Ú_compute_covariance   s    z/gaussian_kde_set_covariance._compute_covarianceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r
   r
   r
   r   r      s   r   c               @   s.   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
S )Úgaussian_kde_covfactÚscottsc             C   s   || _ tjj | |¡ d S )N)Úcovfactr   r   r   r   )r   r	   r   r
   r
   r   r      s    zgaussian_kde_covfact.__init__c             C   s8   t j | j¡| _tt j dt j | j ¡ƒ| j | _	dS )znot usedr   N)
r   r   r   r   r   r   r   r   r   r   )r   r
   r
   r   Ú_compute_covariance_   s    z)gaussian_kde_covfact._compute_covariance_c             C   s@   | j dkr|  ¡ S | j dkr$|  ¡ S | j r4t| j ƒS tdƒ‚d S )N)Zscr   )ZsiÚ	silvermanz9covariance factor has to be scotts, silverman or a number)r   Zscotts_factorZsilverman_factorÚfloatÚ
ValueError)r   r
   r
   r   Úcovariance_factor#   s    


z&gaussian_kde_covfact.covariance_factorc             C   s   || _ |  ¡  |  ¡  d S )N)r   r"   r   )r   r   r
   r
   r   Úreset_covfact-   s    z"gaussian_kde_covfact.reset_covfactN)r   )r   r   r   r   r   r"   r#   r
   r
   r
   r   r      s   

r   c             C   s˜   t  | ¡ t  t¡}t ¡  tjtddd tjt|ddd tjtt	t
jjttd dt	 t
jjttd  dd	d
 t dtt jƒ ¡ t ¡  d S )Né   é   )ÚbinsÚnormedÚkdeÚg)ÚlabelÚcolor)ÚlocÚrzDGP: normal mix)r+   r*   zKernel Density Estimation - )Úgkder#   ÚevaluateÚindÚpltÚfigureÚhistÚxnÚplotÚalphar   ÚnormÚpdfÚmlowÚmhighÚtitleÚstrr   Úlegend)r   Úkdepdfr
   r
   r   Úplotkde2   s    


r?   )Úassert_array_almost_equalÚassert_almost_equalÚassert_c        	      C   sØ  t j d¡ d} t j | ¡}| ¡ }|jdd}t||ƒ t |¡}t  	ddd¡}| 
|¡}tjj|||d}td	t  || d
 ¡ƒ tdt  t  || ¡¡ƒ |d |d  }tt  || d
 ¡| dk ƒ t| dd¡ƒ t| t j d¡ƒ t| dt j¡ƒ t| t j |¡ƒ t| |t j¡ƒ t| |t j¡ddd t| t j |¡ddd t| |t j¡ddd t| t j |¡ddd t| |¡|d
  ¡ | d
d t| ||d
 ¡||  ¡ | d
d d S )NiîÀ… iô  r%   )Úddofiùÿÿÿé   iõ  )r,   ZscaleZMSEr   Z
axabserrorr   g{®Gáz„?g        g      ð?g      à?)Zdecimal)r   ÚrandomÚseedÚrandnÚmeanÚstdÚprintr   r   Úlinspacer/   r7   r8   ÚsumÚmaxÚabsrB   Zintegrate_gaussianZintegrate_box_1dÚinfrA   Zintegrate_boxZintegrate_kde)	Ún_basesampler4   ÚxnmeanÚxnstdr.   Zxsr>   ZnormpdfZ	intervallr
   r
   r   Útest_kde_1dC   s6    



rS   Ú__main__iè  iîÀ… g333333ã?)éýÿÿÿé   r%   gš™™™™™¹?iùÿÿÿrD   ée   r$   )r&   r'   r(   r)   )r*   r+   )r,   r-   zDGP: normal mix)r+   r*   zKernel Density Estimationr   )r   r   gš™™™™™©?gš™™™™™¹?g      à?)rC   ),r   Znumpyr   r   r   Zmatplotlib.pylabZpylabr1   r   r   r   r?   Znumpy.testingr@   rA   rB   rS   r   rP   rE   rF   r6   r9   r:   ZconcatenaterG   r4   r.   rK   r0   r/   r>   r2   r3   r5   r7   r8   r;   r=   ZcvrH   rQ   rI   rR   r
   r
   r
   r   Ú<module>   s\   )









