B
    Z)                 @   s  d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ G d	d
 d
e
ZeddddddZd\ZZZedZdddddgZxbdefdefdefdefdefgD ]<\ZZeeeeeeee eeejeee ee qW eejeeedd eejje eedd eeeee eeje ee dd  Zd!d" Zd#d$ Zd%d& Z d=d*d+Z!ee dd,d( ee dd-d( ddl"m#Z$ ej%d.dd/d0Z&e!e&d1d2d3Z'ee'd2 d4d  ee'd d4d  d5d6 Z(d7d8 Z)e(d9ed2d( \Z*Z+Z,ee* ee+ ee, ee)ej-dd: ee)ej-ej d,ddgd: ej-j%d;d<Z%e%e%.  Z%ee%. e%e%d,k . e%e%dk . e%e%dk .  dS )>ze
Created on Thu Aug 12 14:59:03 2010

Warning: not tried out or tested yet, Done

Author: josef-pktd
    )print_functionN)stats)comb)rv_continuous)whereinf)absc               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )genpareto2_genc             C   s4   t |}t|dkdt| t| _t|dkddS )Nr   g      ?   )npZasarrayr   np_absr   b)selfc r   Jlib/python3.7/site-packages/statsmodels/sandbox/distributions/genpareto.py	_argcheck   s    
zgenpareto2_gen._argcheckc             C   s    t d||  dd|  }|S )Nr
   g      g      ?)r   power)r   xr   ZPxr   r   r   _pdf   s    zgenpareto2_gen._pdfc             C   s   dd|  t | |  S )Ng      g      ?)r   Zlog1p)r   r   r   r   r   r   _logpdf   s    zgenpareto2_gen._logpdfc             C   s   dt d||  d|  S )Ng      ?r
   )r   r   )r   r   r   r   r   r   _cdf   s    zgenpareto2_gen._cdfc             C   s    d| t d| |d  }|S )Ng      r
   )r   r   )r   qr   Zvalsr   r   r   _ppf   s    zgenpareto2_gen._ppfc             C   sX   t d|d }d| | t jt||d|  d||   dd }t|| dk|tS )Nr   r
   g      ?)Zaxis)r   arangesumr   r   r   )r   nr   kvalr   r   r   _munp"   s    4zgenpareto2_gen._munpc             C   s*   |dk rd| S d| | _ t| |S d S )Nr   r
   g      ?)r   r   _entropy)r   r   r   r   r   r!   &   s    
zgenpareto2_gen._entropyN)
__name__
__module____qualname__r   r   r   r   r   r    r!   r   r   r   r   r	      s   r	   g        	genparetozA generalized Paretor   z

Generalized Pareto distribution

genpareto2.pdf(x,c) = (1+c*x)**(-1-1/c)
for c != 0, and for x >= 0 for all c, and x < 1/abs(c) for c < 0.
)anameZlongnameZshapesZextradoc)g      ?r   r
      g{Gz?g?g      ?g?gGz?ZpdfZcdfZsfZppfZisfZmvsk)Zmomentsc             C   s   ||||   fS )ztransform shape scale for peak over threshold

    y = x-u|x>u ~ GPD(k, sigma-k*u) if x ~ GPD(k, sigma)
    notation of de Zea Bermudez, Kotz
    k, sigma is shape, scale
    r   )threshshapescaler   r   r   paramstopotI   s    r,   c             C   s   ||||   fS )Nr   )r)   r*   Zscalepotr   r   r   paramsfrompotR   s    r-   c             C   s   | st |d d S )Nzdoes not hold)print)Zcondmsgr   r   r   warnifU   s    r0   c             C   sF   t |dkd t | dkd t |||   dkd |||   d|  S )zemean excess function of genpareto

    assert are inequality conditions in de Zea Bermudez, Kotz
    r   z
shape > -1r   zthresh >= 0z(scale - shape*thresh) > 0r
   )r0   )r)   r*   r+   r   r   r   
meanexcessY   s    r1   d   
   empc       
      C   s   |dkr|d krt qn|dkrt| }|d d d  tdt| d  |d d d  }|d d d }|rt|d |  |d |   |d k	r|\}}	t|d |  |	|d |  |  d|   ||fS )NZestr4   r   r
   g      ?)NotImplementedErrorr   sortcumsumr   lenpltplot)
dataparamsZlidxZuidxmethodr:   
datasortedr1   r*   r+   r   r   r   meanexcess_plotd   s    
4 0r?   g      g      i  )r+   size)g      r(   r
   )r<   r:   ic             C   s   t | t}|d d d  t dt| d  |d d d  }|d d d  t dt| d  }|d d d }|||d d d fS )Nr   r
   )r   r6   Zastypefloatr7   r   r8   )r;   r>   r1   Zmeancontr   r   r   meanexcess_emp   s
    4&rC   c                s8   t |dkr j|ddS t  fdd|D S d S )Nr   T)lbconditionalc                s   g | ]} j |d dqS )T)rD   rE   )expect).0Zlbb)r   r   r   
<listcomp>   s   z#meanexcess_dist.<locals>.<listcomp>)r   ndimrF   Zarray)r   rD   argskwdsr   )r   r   meanexcess_dist   s    rL   g      ?)rD   i )rA   )Nr2   r3   r4   r   )/__doc__Z
__future__r   Znumpyr   Zscipyr   Z
scipy.miscr   Zscipy.stats.distributionsr   r   r   r   r   r	   Z
genpareto2r*   Zlocr+   r   rvZquantr=   r   r.   getattrr%   Zentropyr,   r-   r0   r1   r?   Zmatplotlib.pyplotZpyplotr9   Zrvsr;   ZtmprC   rL   ZdsmeZmcZnormZmeanr   r   r   r   <module>   sd   

 	
	6P