ó
áp7]c           @   sM  d  Z  d d l m Z d d l Z d d l Z d d l j Z d d l m	 Z	 d d l m
 Z
 d d l m Z d d l m Z d d l m Z m Z m Z d d	 l m Z m Z d
 e f d „  ƒ  YZ d „  Z i  Z d „  e d <d „  e d <d „  e d <d „  e d <e e d <d d „ Z d „  Z d d „ Z d e f d „  ƒ  YZ d S(   sM  
Quantile regression model

Model parameters are estimated using iterated reweighted least squares. The
asymptotic covariance matrix estimated using kernel density estimation.

Author: Vincent Arel-Bundock
License: BSD-3
Created: 2013-03-19

The original IRLS function was written for Matlab by Shapour Mohammadi,
University of Tehran, 2008 (shmohammadi@gmail.com), with some lines based on
code written by James P. Lesage in Applied Econometrics Using MATLAB(1999).PP.
73-4.  Translated to python with permission from original author by Christian
Prinoth (christian at prinoth dot name).
iÿÿÿÿ(   t   rangeN(   t   pinv(   t   norm(   t	   chain_dot(   t   cache_readonly(   t   RegressionModelt   RegressionResultst   RegressionResultsWrapper(   t   ConvergenceWarningt   IterationLimitWarningt   QuantRegc           B   s;   e  Z d  Z d „  Z d „  Z d d d d d d d	 „ Z RS(
   sË  Quantile Regression

    Estimate a quantile regression model using iterative reweighted least
    squares.

    Parameters
    ----------
    endog : array or dataframe
        endogenous/response variable
    exog : array or dataframe
        exogenous/explanatory variable(s)

    Notes
    -----
    The Least Absolute Deviation (LAD) estimator is a special case where
    quantile is set to 0.5 (q argument of the fit method).

    The asymptotic covariance matrix is estimated following the procedure in
    Greene (2008, p.407-408), using either the logistic or gaussian kernels
    (kernel argument of the fit method).

    References
    ----------
    General:

    * Birkes, D. and Y. Dodge(1993). Alternative Methods of Regression, John Wiley and Sons.
    * Green,W. H. (2008). Econometric Analysis. Sixth Edition. International Student Edition.
    * Koenker, R. (2005). Quantile Regression. New York: Cambridge University Press.
    * LeSage, J. P.(1999). Applied Econometrics Using MATLAB,

    Kernels (used by the fit method):

    * Green (2008) Table 14.2

    Bandwidth selection (used by the fit method):

    * Bofinger, E. (1975). Estimation of a density function using order statistics. Australian Journal of Statistics 17: 1-17.
    * Chamberlain, G. (1994). Quantile regression, censoring, and the structure of wages. In Advances in Econometrics, Vol. 1: Sixth World Congress, ed. C. A. Sims, 171-209. Cambridge: Cambridge University Press.
    * Hall, P., and S. Sheather. (1988). On the distribution of the Studentized quantile. Journal of the Royal Statistical Society, Series B 50: 381-391.

    Keywords: Least Absolute Deviation(LAD) Regression, Quantile Regression,
    Regression, Robust Estimation.
    c         K   s    t  t |  ƒ j | | |  d  S(   N(   t   superR
   t   __init__(   t   selft   endogt   exogt   kwargs(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR   O   s    c         C   s   | S(   sE   
        QuantReg model whitener does nothing: returns data.
        (    (   R   t   data(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   whitenR   s    g      à?t   robustt   epat	   hsheatheriè  gíµ ÷Æ°>c   !      K   s8  | d k  s | d k r' t  d ƒ ‚ n  d d d d d g } | | k rd t  d	 d
 j | ƒ ƒ ‚ n
 t | } | d k rƒ t } n6 | d k r˜ t } n! | d k r­ t } n t  d ƒ ‚ |  j }	 |  j }
 |  j } t	 j
 j |  j ƒ } | |  _ t |  j |  j ƒ |  _ |  j |  j |  _ d } |
 } t	 j | ƒ } d } t } t d g  d g  ƒ } xÏ| | k  r+| | k r+| r+| d 7} | } t	 j | j |
 ƒ } t	 j | j |	 ƒ } t	 j t | ƒ | ƒ } |	 t	 j |
 | ƒ } t	 j | ƒ d k  } | | d k d d d | | <t	 j | d k  | | d | | ƒ } t	 j | ƒ } |
 | d d … t	 j f } t	 j t	 j | | ƒ ƒ } | d j | ƒ | d j t	 j | | ƒ ƒ | d k r]| d d k r]xR t d d ƒ D]> } t	 j | | d | k ƒ rãt } t  j! d t" ƒ PqãqãWq]q]W| | k rYt  j! d t# | ƒ d t$ ƒ n  |	 t	 j |
 | ƒ } t% j& | d ƒ t% j& | d ƒ } | | | ƒ } t' t	 j( |	 ƒ | d ƒ t) j* | | ƒ t) j* | | ƒ } d | | t	 j+ | | | ƒ ƒ } | d k ršt	 j | d k | | d d | | d ƒ } t t	 j |
 j |
 ƒ ƒ } t	 j |
 j | t	 j d d … f |
 ƒ } t, | | | ƒ } nN | d k rÜd | d | d | t t	 j |
 j |
 ƒ ƒ } n t  d  ƒ ‚ t- |  | d! | ƒ}  | |  _. | |  _/ d | |  _0 | |  _1 | |  _2 t3 |  ƒ S("   sì  Solve by Iterative Weighted Least Squares

        Parameters
        ----------
        q : float
            Quantile must be between 0 and 1
        vcov : string, method used to calculate the variance-covariance matrix
            of the parameters. Default is ``robust``:

            - robust : heteroskedasticity robust standard errors (as suggested
              in Greene 6th edition)
            - iid : iid errors (as in Stata 12)

        kernel : string, kernel to use in the kernel density estimation for the
            asymptotic covariance matrix:

            - epa: Epanechnikov
            - cos: Cosine
            - gau: Gaussian
            - par: Parzene

        bandwidth: string, Bandwidth selection method in kernel density
            estimation for asymptotic covariance estimate (full
            references in QuantReg docstring):

            - hsheather: Hall-Sheather (1988)
            - bofinger: Bofinger (1975)
            - chamberlain: Chamberlain (1994)
        i    i   s   p must be between 0 and 1t   biwt   cosR   t   gaut   pars   kernel must be one of s   , R   t   bofingert   chamberlains;   bandwidth must be in 'hsheather', 'bofinger', 'chamberlain'i
   t   paramst   msegíµ ÷Æ°>i   Ni,  id   s   Convergence cycle detecteds   Maximum number of iterations (s
   ) reached.iK   i   gq=
×£põ?g      ð?R   t   iids   vcov must be 'robust' or 'iid't   normalized_cov_params(4   t	   Exceptiont   joint   kernelst   hall_sheatherR   R   R   R   t   nobst   npt   linalgt   matrix_rankt   rankt   floatt
   k_constantt   df_modelt   df_residt   onest   Falset   dictt   dott   TR   t   abst   wheret   newaxist   maxt   appendt   meanR    t   allt   Truet   warningst   warnR   t   strR	   t   statst   scoreatpercentilet   mint   stdR   t   ppft   sumR   t   QuantRegResultst   qt
   iterationst   sparsityt	   bandwidtht   historyR   (!   R   RD   t   vcovt   kernelRG   t   max_itert   p_tolR   t
   kern_namesR   R   R$   t	   exog_rankt   n_itert   xstart   betat   difft   cycleRH   t   beta0t   xtxt   xtyt   residt   maskt   iit   et   iqret   ht   fhat0t   dt   xtxit   xtdxt   lfit(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   fitX   sŽ     
							"
 '"/%/,6				(   t   __name__t
   __module__t   __doc__R   R   Rb   (    (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR
   "   s
   +		c         C   s   t  j t  j |  ƒ d k d d d |  d d t  j |  ƒ d d d t  j |  ƒ d d ƒ } d | t  j |  ƒ d k <| S(	   Ng      à?g      @i   g       @i   i   g      @i    (   R%   R3   R2   (   t   ut   z(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   _parzenâ   s    @"c         C   s:   d d d |  d d t  j t  j |  ƒ d k d d ƒ S(   Ng      .@i   i   i   i    (   R%   R3   R2   (   Rf   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   <lambda>ê   t    R   c         C   s:   t  j t  j |  ƒ d k d t  j d t  j |  ƒ d ƒ S(   Ng      à?i   i   i    (   R%   R3   R2   R   t   pi(   Rf   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyRi   ë   Rj   R   c         C   s6   d d d |  d t  j t  j |  ƒ d k d d ƒ S(   Ng      @i   i   i   i    (   R%   R3   R2   (   Rf   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyRi   ì   Rj   R   c         C   s   t  j |  ƒ S(   N(   R   t   pdf(   Rf   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyRi   í   Rj   R   R   gš™™™™™©?c         C   sw   t  j | ƒ } d t  j | ƒ d } d | d d } |  d d t  j d | d ƒ d d | | d d } | S(   Ng      ø?g       @g      ð?g      ð¿i   (   R   RA   Rl   (   t   nRD   t   alphaRg   t   numt   denR\   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR#   ö   s
    ;c         C   si   d d t  j d t  j | ƒ ƒ d } d t  j | ƒ d d d } |  d d | | d d } | S(   Ng      "@i   i   i   g      ð¿i   g      ð?(   R   Rl   RA   (   Rm   RD   Ro   Rp   R\   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR   þ   s    (c         C   s.   t  j d | d ƒ t j | d | |  ƒ S(   Ni   i   (   R   RA   R%   t   sqrt(   Rm   RD   Rn   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR     s    RC   c           B   s  e  Z d  Z e d „  ƒ Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d d d d d „ Z RS(   s'   Results instance for the QuantReg modelc         C   sÂ   |  j  } |  j j } |  j } t j | d k  d | | | | ƒ } t j | ƒ } | t j | | d ƒ } t j | d k  d | | | | ƒ } t j | ƒ } d t j	 | ƒ t j	 | ƒ S(   Ni    i   id   (
   RD   t   modelR   RW   R%   R3   R2   R=   R>   RB   (   R   RD   R   RZ   t   ered(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt	   prsquared  s    		''c         C   s   d S(   Ng      ð?(    (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   scale  s    c         C   s   t  j S(   N(   R%   t   nan(   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   bic  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   aic   s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   llf$  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   rsquared(  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   rsquared_adj,  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyR   0  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt	   mse_model4  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt	   mse_total8  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   centered_tss<  s    c         C   s   t  j S(   N(   R%   Rv   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   uncentered_tss@  s    c         C   s
   t  ‚ d  S(   N(   t   NotImplementedError(   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   HC0_seD  s    c         C   s
   t  ‚ d  S(   N(   R€   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   HC1_seH  s    c         C   s
   t  ‚ d  S(   N(   R€   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   HC2_seL  s    c         C   s
   t  ‚ d  S(   N(   R€   (   R   (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   HC3_seP  s    gš™™™™™©?c         C   sÆ  |  j  } |  j } d$ d% d d g f d& d' g } d d |  j g f d	 d |  j g f d
 d |  j g f d( d) d* g } | d# k rž |  j j j d d } n  d d l	 m
 }	 |	 ƒ  }
 |
 j |  d | d | d | d | d | ƒ|
 j |  d | d | d | d |  j ƒg  } | d d k  rbd } | d 7} | d 7} | d 7} | | d } | j | ƒ nJ | d k r¬d } | d  7} | d! 7} | d" 7} | | } | j | ƒ n  | rÂ|
 j | ƒ n  |
 S(+   sü  Summarize the Regression Results

        Parameters
        ----------
        yname : string, optional
            Default is `y`
        xname : list of strings, optional
            Default is `var_##` for ## in p the number of regressors
        title : string, optional
            Title for the top table. If not None, then this replaces the
            default title
        alpha : float
            significance level for the confidence intervals

        Returns
        -------
        smry : Summary instance
            this holds the summary tables and text, which can be printed or
            converted to various output formats.

        See Also
        --------
        statsmodels.iolib.summary.Summary : class to hold summary results
        s   Dep. Variable:s   Model:s   Method:s   Least Squaress   Date:s   Time:s   Pseudo R-squared:s   %#8.4gs
   Bandwidth:s	   Sparsity:s   No. Observations:s   Df Residuals:s	   Df Model:t    s   Regression Resultsiÿÿÿÿ(   t   Summaryt   gleftt   grightt   ynamet   xnamet   titleRn   t   use_tg»½×Ùß|Û=s6   The smallest eigenvalue is %6.3g. This might indicate s   that there are
s5   strong multicollinearity problems or that the design s   matrix is singular.iè  s1   The condition number is large, %6.3g. This might s   indicate that there are
s,   strong multicollinearity or other numerical s	   problems.N(   s   Dep. Variable:N(   s   Model:N(   s   Date:N(   s   Time:N(   s   No. Observations:N(   s   Df Residuals:N(   s	   Df Model:N(   t	   eigenvalst   condition_numbert   NoneRt   RG   RF   Rr   t	   __class__Rc   t   statsmodels.iolib.summaryR†   t   add_table_2colst   add_table_paramsRŒ   R6   t   add_extra_txt(   R   R‰   RŠ   R‹   Rn   t   eigvalst   condnot   top_leftt	   top_rightR†   t   smryt   etextt   wstr(    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   summaryT  sN    					







N(   Rc   Rd   Re   R   Rt   Ru   Rw   Rx   Ry   Rz   R{   R   R|   R}   R~   R   R   R‚   Rƒ   R„   R   Rœ   (    (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyRC   	  s$   	(   Re   t   statsmodels.compat.pythonR    t   numpyR%   R:   t   scipy.statsR=   t   scipy.linalgR   R   t   statsmodels.tools.toolsR   t   statsmodels.tools.decoratorsR   t#   statsmodels.regression.linear_modelR   R   R   t   statsmodels.tools.sm_exceptionsR   R	   R
   Rh   R"   R#   R   R   RC   (    (    (    sI   lib/python2.7/site-packages/statsmodels/regression/quantile_regression.pyt   <module>   s,   À	
	