U
    Kvf%  ã                   @   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   úQ/tmp/pip-unpacked-wheel-2v6byqio/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_covÚsqrtZdetÚ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kr|  ¡ S | j dkr$|  ¡ S | j r4t| j ƒS tdƒ‚d S )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binsÚ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    

ÿ þrE   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õ  )r0   ZscaleZMSEr   Z
axabserrorr   g{®Gáz„?g        g      ð?ç      à?)Údecimal)r   ÚrandomÚseedÚrandnÚmeanÚstdÚprintr   r	   Úlinspacer5   r=   r>   ÚsumÚmaxÚabsr   Zintegrate_gaussianZintegrate_box_1dÚinfr   Zintegrate_boxZintegrate_kde)	Ún_basesampler:   ÚxnmeanÚxnstdr4   ÚxsrD   ZnormpdfZ	intervallr   r   r   Útest_kde_1dD   s>    



 ÿ ÿr[   Ú__main__iè  rF   g333333ã?)éýÿÿÿé   r'   çš™™™™™¹?rH   rI   ée   r&   r(   r*   r+   r,   r/   r1   r2   r3   zKernel Density Estimationr   )r   r!   gš™™™™™©?r_   rJ   rG   )+r   Znumpyr   Znumpy.testingr   r   r   r   Zmatplotlib.pylabZpylabr7   r	   r   r   rE   r[   r   rW   rL   rM   r<   r?   r@   ZconcatenaterN   r:   r4   rR   r6   r5   rD   r8   r9   r;   r=   r>   rA   rC   ZcvrO   rX   rP   rY   r   r   r   r   Ú<module>   sj   )
ÿ

ÿ þ


ÿ þ
