o
    þ0Gf%  ã                   @   sD  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 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   ó   || _ tjj | |¡ d S ©N)Ú
covarianceÚscipyr   Úgaussian_kdeÚ__init__)ÚselfÚdatasetr   © r   úMlib/python3.10/site-packages/statsmodels/sandbox/nonparametric/kdecovclass.pyr      ó   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   r   r   )Úcovfactr	   r   r
   r   )r   r   r   r   r   r   r      r   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 rt| j ƒS tdƒ‚)N)Zscr   )Ú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   

ÿþrD   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
   Úlinspacer4   r<   r=   ÚsumÚmaxÚabsr   Zintegrate_gaussianZintegrate_box_1dÚinfr   Zintegrate_boxZintegrate_kde)	Ún_basesampler9   ÚxnmeanÚxnstdr3   ZxsrC   ZnormpdfZ	intervallr   r   r   Útest_kde_1dD   s:   



ÿ
ÿrX   Ú__main__iè  rE   g333333ã?)éýÿÿÿé   r'   çš™™™™™¹?rG   rH   ée   r&   r(   r)   r*   r+   r.   r0   r1   r2   zKernel Density Estimationr   )r   r!   gš™™™™™©?r\   rI   rF   )+r   Znumpyr   Znumpy.testingr   r   r	   r   Zmatplotlib.pylabZpylabr6   r
   r   r   rD   rX   r   rU   rJ   rK   r;   r>   r?   ZconcatenaterL   r9   r3   rP   r5   r4   rC   r7   r8   r:   r<   r=   r@   rB   ZcvrM   rV   rN   rW   r   r   r   r   Ú<module>   sj    
)ÿ

ÿþ


ÿþ

É