U
    Kvf                     @   s   d Z ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 G dd deZG dd	 d	ZG d
d deZG dd deZG dd deZG dd dZdS )z>

Created on Fri Jun 28 14:19:26 2013

Author: Josef Perktold
    N)stats)GenericLikelihoodModel)assert_array_lessassert_almost_equalassert_allclosec                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
MyParetozmMaximum Likelihood Estimation pareto distribution

    first version: iid case, with constant parameters
    c                    sB   t t|   dddg}| | td| j d dg| _d S )Nshapelocscale      ?      ?)	superr   
initializeZ_set_extra_params_namesnparrayendogminstart_params)selfextra_params_names	__class__ Q/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/miscmodels/tests/test_generic_mle.pyr      s    

zMyPareto.initializec                 C   s   ||| d   S )N   r   )r   xbr   r   r   pdf!   s    zMyPareto.pdfc                 C   s   |  |d S )Nr   )nloglikeobssumr   paramsr   r   r   loglike$   s    zMyPareto.loglikec                 C   sz   | j d k	r| |}|d }|d }|d }| j}|| | }t||d t|  }|t|8 }d||dk < | S )Nr   r      r   i)fixed_paramsZexpandparamsr   r   log)r   r!   r   r	   r
   r   r   Zlogpdfr   r   r   r   -   s    

zMyPareto.nloglikeobs)	__name__
__module____qualname____doc__r   r   r"   r   __classcell__r   r   r   r   r      s
   
	r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )CheckGenericMixinc                 C   s.   | j  }| j jrdnd}|t|ks*td S )NP>|t|zP>|z|)res1summaryuse_tstrAssertionError)r   summZ	check_strr   r   r   test_summaryD   s    
zCheckGenericMixin.test_summaryc                 C   s6   | j j}d| j _| j  }dt|ks*t|| j _d S )NTr,   )r-   r/   r.   r0   r1   )r   Zorig_valr2   r   r   r   test_use_t_summaryI   s
    
z$CheckGenericMixin.test_use_t_summaryc                 C   s   | j tt| j j d S N)r-   Zt_testr   Zeyelenr!   )r   r   r   r   
test_ttestP   s    zCheckGenericMixin.test_ttestc                 C   s   | j j}tdddg}| j jjd k	r4|| j jj }t||dd t|tt|dd t| j j	tt|dd | j
st| j j	| j jddd	 t| j j| j jddd	 d S )
Nr#   r   r   )atol   g      ?g?g333333?)rtolr8   )r-   r!   r   r   modelfixed_paramsmaskr   zerosr6   Zbseskip_bsejacZbsejacZbsejhj)r   r!   Zparams_truer   r   r   test_paramsS   s     zCheckGenericMixin.test_paramsc                 C   s   | j }t| dd}|jjd k	r2|jjj\}}d}n|jjjd d }}d}|j|| | ks`t|j|| ksrtt	|j
|| kstd S )Nk_extrar   r   )r-   getattrr;   exogr   r   df_residr1   df_modelr6   r!   )r   resr@   nobsZk_varsZ
k_constantr   r   r   test_dfe   s    zCheckGenericMixin.test_dfN)r&   r'   r(   r3   r4   r7   r?   rG   r   r   r   r   r+   A   s
   r+   c                   @   s    e Zd Zedd Zdd ZdS )TestMyPareto1c                 C   s   dddg}d}t jd tjj|t|d}t|}d |_d |_	d|_
d |_}|jjd |j
 | |_ddd	g|j_|| _|jd d
| _|| _d| _d S )Nr#   r   d     size   r   r	   r
   ZdispT)r   randomseedr   paretorvsdictr   r$   r<   rD   r@   r   r   rC   dataxnamesmodfitr-   r>   )clsr!   rF   rR   mod_parr@   r   r   r   setup_classu   s    

zTestMyPareto1.setup_classc                 C   s@   | j j}| j j }|d |d  }t|| t||dd d S )Nr   r#   )decimal)r-   r!   r   r   r   r   )r   r!   Zx_minZp_minr   r   r   test_minsupport   s
    
zTestMyPareto1.test_minsupportN)r&   r'   r(   classmethodrZ   r\   r   r   r   r   rH   s   s   
rH   c                   @   s   e Zd Zedd ZdS )TestMyParetoRestrictionc                 C   s   dddg}d}t jd tjj|t|d}t|}t jt 	d }d|d< ||_
t ||_|j|j |_d|_d |_}|jjd |j | |_d	d
g|j_|| _|jd d| _|| _d| _d S )Nr#   r   2   rJ   rK   rM   gr   r   r
   rN   F)r   rO   rP   r   rQ   rR   rS   r   nanZonesr$   isnanr<   r   rD   r@   r   r   rC   rT   rU   rV   rW   r-   r>   )rX   r!   rF   rR   rY   Zfixdfr@   r   r   r   rZ      s$    

z#TestMyParetoRestriction.setup_classN)r&   r'   r(   r]   rZ   r   r   r   r   r^      s   r^   c                       sZ   e Zd ZdZddgZdddgZddgZd	gZd fdd	Zdd Z	dd Z
dd Z  ZS )TwoPeakLLHNoExogz*Fit height of signal peak over background.
   i  r   signal
backgroundZn_signalZn_backgroundalphaNc                    s0   || _ || _tt| j|||| jd| d S )N)r   rB   r   )rd   re   r   rb   __init__
exog_names)r   r   rB   rd   re   argskwargsr   r   r   rg      s    
zTwoPeakLLHNoExog.__init__c                 C   s   |  | S r5   )nlogliker    r   r   r   r"      s    zTwoPeakLLHNoExog.loglikec                 C   s   | j }| ||S r5   )r   nlnlike)r   r!   r   r   r   r   rk      s    zTwoPeakLLHNoExog.nloglikec           
      C   st   |d }|d }|dk s |dk r&t jS || }|}| j|}| j|}t t || ||  }	|	|8 }	|	 S )Nr   r   )r   infrd   r   re   r   r%   )
r   r!   r   Zn_sigZn_bkgZn_totrf   sigZbkgZsumloglr   r   r   rl      s    zTwoPeakLLHNoExog.nlnlike)NNN)r&   r'   r(   r)   r   Z	cloneattrrh   Zendog_namesrg   r"   rk   rl   r*   r   r   r   r   rb      s   
rb   c                   @   s    e Zd Zedd Zdd ZdS )TestTwoPeakLLHNoExogc                 C   s   t jd tjddd}tjddd}d}d}||g}t |j|d|j|dgd d t jf }|| _	|| _
|| _|| _d S )	N*   r   r   )r	   r
   rI   r_      rK   )r   rO   rP   r   Z
halfcauchyuniformZconcatenaterR   ZnewaxisXr!   pdf_apdf_b)rX   rt   ru   Zn_aZn_br!   rs   r   r   r   rZ      s    

z TestTwoPeakLLHNoExog.setup_classc                 C   s   t jd t| j| j| jd}| }t|j	| j	dd |j
dksHt|jdksVt|jdd}t|d	 d| j	dd |  d S )
Nrp   )rd   re   g?)r:      r   r_   )Znrepr#   )r   rO   rP   rb   rs   rt   ru   rW   r   r!   rC   r1   rD   Z	bootstrapZmeanr.   )r   Z
llh_noexogrE   Zres_bsr   r   r   test_fit   s    zTestTwoPeakLLHNoExog.test_fitN)r&   r'   r(   r]   rZ   rw   r   r   r   r   ro      s   
ro   )r)   Znumpyr   Zscipyr   Zstatsmodels.base.modelr   Znumpy.testingr   r   r   r   r+   rH   r^   rb   ro   r   r   r   r   <module>   s   02!*