a
    \¹:b%  ã                   @   sB  d Z ddlZddlmZm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„ Zedkr>d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
 %¡  d"D ]Z&ee&ƒ qî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)Úassert_almost_equalÚassert_)Ú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.9/site-packages/statsmodels/sandbox/nonparametric/kdecovclass.pyr
      s    z$gaussian_kde_set_covariance.__init__c                 C   s:   t j | j¡| _t  t j dt j | j ¡¡| j | _	d S )Né   ©
ÚnpZlinalgÚinvr   Zinv_covZsqrtZdetZpiÚnZ_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 r   )Úcovfactr   r   r	   r
   )r   r   r   r   r   r   r
      s    zgaussian_kde_covfact.__init__c                 C   s:   t j | j¡| _t  t j dt j | j ¡¡| j | _	dS )znot usedr   Nr   r   r   r   r   Ú_compute_covariance_    s    z)gaussian_kde_covfact._compute_covariance_c                 C   s@   | j dv r|  ¡ S | j dv 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Ú
ValueErrorr   r   r   r   Úcovariance_factor%   s    


z&gaussian_kde_covfact.covariance_factorc                 C   s   || _ |  ¡  |  ¡  d S r   )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é   é   ©ZbinsZnormedÚkdeÚg©ÚlabelÚcolor©ÚlocÚrú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   Úplotkde4   s    

ÿþrA   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 )NéîÀ… iô  r$   ©Zddoféùÿÿÿé   iõ  )r,   ZscaleZMSEr   Z
axabserrorr   g{®Gáz„?g        g      ð?ç      à?)Zdecimal)r   ÚrandomÚseedÚrandnÚmeanÚstdÚprintr   r	   Úlinspacer1   r9   r:   ÚsumÚmaxÚabsr   Zintegrate_gaussianZintegrate_box_1dÚinfr   Zintegrate_boxZintegrate_kde)	Ún_basesampler6   ÚxnmeanÚxnstdr0   Zxsr@   ZnormpdfZ	intervallr   r   r   Útest_kde_1dD   s:    



ÿÿrU   Ú__main__iè  rB   g333333ã?)éýÿÿÿé   r$   çš™™™™™¹?rD   rE   ée   r#   r%   r&   r'   r(   r+   r-   r.   r/   zKernel Density Estimationr   )r   r   gš™™™™™©?rY   rF   rC   )+r   Znumpyr   Znumpy.testingr   r   r   r   Zmatplotlib.pylabZpylabr3   r	   r   r   rA   rU   r   rR   rG   rH   r8   r;   r<   ZconcatenaterI   r6   r0   rM   r2   r1   r@   r4   r5   r7   r9   r:   r=   r?   ZcvrJ   rS   rK   rT   r   r   r   r   Ú<module>   sf   )
ÿ

ÿþ


ÿþ
