ó
áp7]c           @   sÔ  d  Z  d d l Z d d l m Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d0 d „ Z d1 d d „ Z d2 d d „ Z d e f d „  ƒ  YZ d3 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d  „  Z i e d! 6e d" 6e d# 6e d$ 6e d% 6e d& 6e d' 6e	 d( 6e
 d) 6e
 d* 6e d+ 6Z d, e f d- „  ƒ  YZ d. e f d/ „  ƒ  YZ d S(4   së   

Which Archimedean is Best?
Extreme Value copulas formulas are based on Genest 2009

References
----------

Genest, C., 2009. Rank-based inference for bivariate extreme-value
copulas. The Annals of Statistics, 37(5), pp.2990-3022.



iÿÿÿÿN(   t   expm1c         C   s   |  | S(   s!   independent bivariate copula
    (    (   t   ut   v(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_indep   s    c         C   s   t  j |  | ƒ S(   s!   comonotonic bivariate copula
    (   t   npt   minimum(   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_min   s    c         C   s   t  j |  | d d ƒ S(   s&   countermonotonic bivariate copula
    i   i    (   R   t   maximum(   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_max   s    c         C   sN   | d k s t  d ƒ ‚ n  t j t j |  | ƒ t j | | ƒ d | ƒ S(   s.   Clayton or Cook, Johnson bivariate copula
    i    s#   theta needs to be strictly positivei   (   t
   ValueErrorR   t   power(   R   R   t   theta(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_clayton$   s    c         C   sn   | d k s t  d ƒ ‚ n  t j d t | |  ƒ t | | ƒ t | ƒ ƒ | } t j | d ƒ } | S(   s#   Cook, Johnson bivariate copula
    i    s#   theta needs to be strictly positivei   (   R	   R   t   logR    R   (   R   R   R   t   cdfv(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_frank,   s
    =c         C   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   R   t   rho(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_gauss6   s    c         C   s
   t  ‚ d  S(   N(   R   (   R   R   R   t   df(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_t:   s    t
   Transformsc           B   s   e  Z d  „  Z RS(   c         C   s   d  S(   N(    (   t   self(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   __init__D   s    (   t   __name__t
   __module__R   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   C   s   t   TransfFrankc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s/   t  j t | | ƒ ƒ t  j t | ƒ ƒ S(   N(   R   R   R    (   R   t   tR   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   evaluateJ   s    c         C   s'   t  j t  j | ƒ t | ƒ ƒ | S(   N(   R   t   log1pt   expR    (   R   t   phiR   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   inverseN   s    c         C   s$   t  j | | ƒ } | | d | S(   Ni   (   R   R   (   R   R   R   t   tmp(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   derivQ   s    c         C   sW   | | } d t  j | ƒ } | d t  j | ƒ | t  j d | ƒ | d } | S(   Ng      ð?i   (   R   R   (   R   R   R   t   tmp1t   tmp2t   d2(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   deriv2U   s    5c         C   s   | d | @k o d k  SS(   Ni    i   (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   is_completly_monotonic\   s    (   R   R   R   R    R"   R&   R'   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   H   s
   				t   TransfClaytonc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s
   | d k S(   Ni    (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt
   _checkargsc   s    c         C   s   t  j | | ƒ d S(   Ng      ð?(   R   R
   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   f   s    c         C   s   t  j d | | ƒ S(   Ni   (   R   R
   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR    i   s    c         C   s   | t  j | | d ƒ S(   Ni   (   R   R
   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR"   l   s    c         C   s!   | | d t  j | | d ƒ S(   Ni   i   (   R   R
   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR&   o   s    c         C   s
   | d k S(   Ni    (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR'   r   s    (   R   R   R)   R   R    R"   R&   R'   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR(   a   s   					t   TransfGumbelc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    requires theta >=1
    c         C   s
   | d k S(   Ni   (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR)   {   s    c         C   s   t  j t  j | ƒ | ƒ S(   N(   R   R
   R   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   ~   s    c         C   s   t  j t  j | d | ƒ ƒ S(   Ng      ð?(   R   R   R
   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR       s    c         C   s   | t  j | ƒ | d | S(   Ni   (   R   R   (   R   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR"   „   s    c         C   s]   t  j | ƒ } | d d | | | d d | | d d | | | | d | } | S(   Niÿÿÿÿi   i   (   R   R   (   R   R   R   R#   R%   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR&   ‡   s    #'c         C   s
   | d k S(   Ni   (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR'      s    (	   R   R   t   __doc__R)   R   R    R"   R&   R'   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR*   v   s   						t   TransfIndepc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   t  j | ƒ S(   N(   R   R   (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   •   s    c         C   s   t  j | ƒ S(   N(   R   R   (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR    ˜   s    c         C   s   d | S(   Ng      ð¿(    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR"   ›   s    c         C   s   d | d S(   Ng      ð¿i   (    (   R   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR&   ž   s    (   R   R   R   R    R"   R&   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR,   ”   s   			c         C   s;   | j  } | j } | | |  | Œ | | | Œ | Œ } | S(   s   
    (   R   R    (   R   R   t	   transformt   argsR   t   phi_invR   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_archimedean¢   s    		%c         C   s7   | j  } | j } | | |  | Œ j | ƒ | Œ } | S(   s,   generic multivariate Archimedean copula
    (   R   R    t   sum(   R   R-   R.   t   axisR   R/   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_mv_archimedean«   s    		!c   	         sI   d ‡  f d † } d ‡  f d † } | | |  | Œ j  | ƒ | Œ } | S(   sk   generic multivariate Archimedean copula with additional power transforms

    Nelson p.144, equ. 4.5.2
    c            s(   t  j ˆ  j t  j |  | ƒ | Œ | ƒ S(   N(   R   R
   R   (   R   t   alphat   betaR.   (   R-   (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   º   s    c            s0   t  j ˆ  j t  j |  d | ƒ | Œ d | ƒ S(   Ng      ð?(   R   R
   R   (   R   R4   R5   R.   (   R-   (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR/   ½   s    (    (    (   R1   (	   R   R-   R4   R5   R.   R2   R   R/   R   (    (   R-   sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_power_mv_archimedean´   s    !t   CopulaArchimedeanc           B   s/   e  Z d  „  Z d d d „ Z d d d „ Z RS(   c         C   s   | |  _  d  S(   N(   R-   (   R   R-   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   Æ   s    iÿÿÿÿc         C   s=   |  j  j } |  j  j } | | | | Œ j | ƒ | Œ } | S(   s8   evaluate cdf of multivariate Archimedean copula
        (   R-   R   R    R1   (   R   R   R.   R2   R   R/   R   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   cdfÉ   s    !c   
      C   s•   |  j  j } |  j  j } |  j  j } |  j  j } |  j | d | d | ƒ} t j | | | Œ | ƒ }	 |	 | | | Œ 9}	 |	 | | | Œ d :}	 |	 S(   s8   evaluate cdf of multivariate Archimedean copula
        R.   R2   i   (   R-   R   R    R"   R&   R8   R   t   product(
   R   R   R.   R2   R   R/   t   phi_d1t   phi_d2R   t   pdfv(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   pdfÑ   s    (    (    (   R   R   R   R8   R=   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR7   Ä   s   	c         C   sA   t  j t  j |  | ƒ | t  j | ƒ t  j |  | ƒ | Œ ƒ S(   s+   generic bivariate extreme value copula
    (   R   R   R   (   R   R   R-   R.   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   copula_bv_evè   s    c         C   s‰   d „  } t  j | | | | ƒ ƒ s3 t d ƒ ‚ n  d | d |  } | d | |  7} | | |  d | | d |  d | | 7} | S(   s   asymmetric logistic model of Tawn 1988

    special case: a1=a2=1 : Gumbel

    restrictions:
     - theta in (0,1]
     - a1, a2 in [0,1]
    c         S   sX   | d k o | d k } |  d k o- |  d k } | d k oE | d k } | oW | oW | S(   Ni    i   (    (   t   a1t   a2R   t   condtht   conda1t   conda2(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   _check_argsø   s    s   invalid argsi   g      ð?(   R   t   allR	   (   R   R?   R@   R   RD   t   transf(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_tawnî   s    
	.c         C   sf   d „  } t  j | | | | ƒ ƒ s3 t d ƒ ‚ n  d | d |  d | | |  d | | } | S(   sÀ   asymmetric negative logistic model of Joe 1990

    special case:  a1=a2=1 : symmetric negative logistic of Galambos 1978

    restrictions:
     - theta in (0,inf)
     - a1, a2 in (0,1]
    c         S   sL   | d k } |  d k o! |  d k } | d k o9 | d k } | oK | oK | S(   Ni    i   (    (   R?   R@   R   RA   RB   RC   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRD     s    s   invalid argsi   g      ð¿(   R   RE   R	   (   R   R?   R@   R   RD   RF   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_joe  s
    
	/c         C   s^   d „  } t  j | | | ƒ ƒ s0 t d ƒ ‚ n  d | | |  | |  |  | |  d } | S(   só   asymmetric mixed model of Tawn 1988

    special case:  k=0, theta in [0,1] : symmetric mixed model of
        Tiago de Oliveira 1980

    restrictions:
     - theta > 0
     - theta + 3*k > 0
     - theta + k <= 1
     - theta + 2*k <= 1
    c         S   sN   |  d k } |  d | d k oA |  | d k oA |  d | d k } | oM | S(   Ni    i   i   i   (    (   R   t   kRA   t   cond1(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRD   ,  s    8s   invalid argsi   i   (   R   RE   R	   (   R   R   RI   RD   RF   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_tawn2  s
    	*c            sk   d „  } t  j | ˆ  ˆ ƒ ƒ s0 t d ƒ ‚ n  ‡  ‡ ‡ f d †  } d d l m } | | d d ƒ } | S(   sØ   bilogistic model of Coles and Tawn 1994, Joe, Smith and Weissman 1992

    restrictions:
     - (beta, delta) in (0,1)^2 or
     - (beta, delta) in (-inf,0)^2

    not vectorized because of numerical integration
    c         S   sP   |  d k o- |  d k o- | d k o- | d k } |  d k  oE | d k  } | | BS(   Ni    i   (    (   R5   t   deltaRJ   t   cond2(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRD   B  s    0s   invalid argsc            sZ   d ˆ  t  j |  ˆ  ƒ d ˆ } d ˆ t  j d |  ˆ ƒ ˆ } t  j | | ƒ d  S(   Ni   (   R   R
   R   (   t   wt   term1t   term2(   R5   RL   R   (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt
   _integrantJ  s    ##iÿÿÿÿ(   t   quadi    i   (   R   RE   R	   t   scipy.integrateRR   (   R   R5   RL   RD   RQ   RR   RF   (    (   R5   RL   R   sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_bilogistic8  s    
	c         C   s   d „  } t  j | | ƒ ƒ s- t d ƒ ‚ n  t  j d |  |  ƒ d | } d d l m } d |  | j | | ƒ |  | j | | ƒ } | S(   s—   model of Huesler Reiss 1989

    special case:  a1=a2=1 : symmetric negative logistic of Galambos 1978

    restrictions:
     - lambda in (0,inf)
    c         S   s   |  d k } | S(   Ni    (    (   t   lamdat   cond(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRD   ]  s    s   invalid argsg      ð?g      à?iÿÿÿÿ(   t   normi   (   R   RE   R	   R   t   scipy.statsRW   t   _cdf(   R   RU   RD   t   termRW   RF   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_hrT  s    		0c         C   sÈ   d „  } t  j | | | ƒ ƒ s0 t d ƒ ‚ n  d d l m } t  j d | ƒ t  j |  d |  d | ƒ | } | t  j d | | ƒ :} d |  | j | | d ƒ |  | j | | d ƒ } | S(   s_   t-EV model of Demarta and McNeil 2005

    restrictions:
     - rho in (-1,1)
     - x > 0
    c         S   s.   | d k } |  d k o! |  d k  } | o- | S(   Ni    i   (    (   R   t   xRJ   RM   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRD   s  s    s   invalid argsiÿÿÿÿ(   R   g      ð?i   (   R   RE   R	   RX   R   t   sqrtR
   RY   (   R   R   R\   RD   t   stats_tt   zRF   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   transform_tevk  s    	36t   indept   it   mint   maxt   claytont   cookjohnsont   cjt   frankt   gausst   normalR   t   CopulaDistributionBivariatec           B   s&   e  Z d  Z d d „ Z d d „ Z RS(   sj   bivariate copula class

    Instantiation needs the arguments, cop_args, that are required for copula
    c         C   sg   | t  k r t  | |  _ n5 y | d d | Œ } Wn t d ƒ ‚ n X| |  _ | |  _ | |  _ d  S(   Ng      à?s,   copula needs to be a copula name or callable(   t   copulanamesbvt   copulaR	   t   marginalcdfst   copargs(   R   Rn   Rm   Ro   R!   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   ™  s    		c         C   sQ   | \ } } | d k r$ |  j } n  |  j |  j d | ƒ |  j d | ƒ | Œ S(   sN   xx needs to be iterable, instead of x,y for extension to multivariate
        i    i   N(   t   NoneRo   Rm   Rn   (   R   t   xyR.   R\   t   y(    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR8   ¨  s
    &(    N(   R   R   R+   R   Rp   R8   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRk   ”  s   t   CopulaDistributionc           B   s&   e  Z d  Z d d „ Z d d „ Z RS(   sj   bivariate copula class

    Instantiation needs the arguments, cop_args, that are required for copula
    c         C   sg   | t  k r t  | |  _ n5 y | d d | Œ } Wn t d ƒ ‚ n X| |  _ | |  _ | |  _ d  S(   Ng      à?s,   copula needs to be a copula name or callable(   Rl   Rm   R	   Rn   Ro   (   R   Rn   Rm   Ro   R!   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR   ·  s    		c         C   sQ   | \ } } | d k r$ |  j } n  |  j |  j d | ƒ |  j d | ƒ | Œ S(   sN   xx needs to be iterable, instead of x,y for extension to multivariate
        i    i   N(   Rp   Ro   Rm   Rn   (   R   Rq   R.   R\   Rr   (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyR8   Ç  s
    &(    N(   R   R   R+   R   Rp   R8   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyRs   ²  s   (    (    (    (    (    R+   t   numpyR   t   scipy.specialR    R   R   R   R   R   R   R   t   objectR   R   R(   R*   R,   R0   R3   R6   R7   R>   RG   RH   RK   RT   R[   R`   Rl   Rk   Rs   (    (    (    sG   lib/python2.7/site-packages/statsmodels/sandbox/distributions/copula.pyt   <module>   sL   					
					$						

