U
    Ãmœd7  ã                   @   sê   d Z ddl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
 ddlmZmZmZ ddlmZmZ G dd	„ d	eƒZd
d„ Zi Zdd„ ed< dd„ ed< dd„ ed< ejed< eed< ddd„Zdd„ Zddd„ZG dd„ deƒZdS ) aM  
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).
é    N)Úpinv)Únorm)Úcache_readonly)ÚRegressionModelÚRegressionResultsÚRegressionResultsWrapper)ÚConvergenceWarningÚIterationLimitWarningc                       s2   e Zd ZdZ‡ fdd„Zdd„ Zddd„Z‡  ZS )ÚQuantRegaË  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                    s$   |   |¡ tt| ƒj||f|Ž d S ©N)Z_check_kwargsÚsuperr
   Ú__init__)ÚselfÚendogÚexogÚkwargs©Ú	__class__© úc/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/regression/quantile_regression.pyr   M   s    
zQuantReg.__init__c                 C   s   |S )zE
        QuantReg model whitener does nothing: returns data.
        r   )r   Údatar   r   r   ÚwhitenQ   s    zQuantReg.whitenç      à?ÚrobustÚepaÚ	hsheatheréè  ç�íµ ÷Æ°>c           !      K   sÐ  |dks|dkrt dƒ‚dddddg}||krBt d	d
 |¡ ƒ‚nt| }|dkrXt}n$|dkrft}n|dkrtt}nt dƒ‚| j}	| j}
| j}t	j
 | j¡}|| _t| j| j ƒ| _| j| j | _d}|
}t	 |
jd ¡}d}d}tg g d�}||k �rH||k�rH|�sH|d7 }|}t	 |j|
¡}t	 |j|	¡}t	 t|ƒ|¡}|	t	 |
|¡ }t	 |¡dk }|| dkd d d ||< t	 |dk || d| | ¡}t	 |¡}|
|dd…t	jf  }t	 t	 || ¡¡}|d  |¡ |d  t	 || ¡¡ |dkrî|d dkrîtddƒD ]4}t	 ||d |  k¡�rd}t  dt!¡  qî�qqî||k�rjt  dt"|ƒ d t#¡ |	t	 |
|¡ }t$ %|d¡t$ %|d¡ }|||ƒ}t&t	 '|	¡|d ƒt( )|| ¡t( )|| ¡  }d ||  t	 *||| ƒ¡ }|d!k�rZt	 |dk|| d d| | d ¡}tt	 |
j|
¡ƒ}t	 |
j|t	jdd…f  |
¡}|| | }n>|d"k�r�d | d | d|  tt	 |
j|
¡ƒ }nt d#ƒ‚t+| ||d$�} || _,|| _-d | | _.|| _/|| _0t1| ƒS )%aö  
        Solve by Iterative Weighted Least Squares

        Parameters
        ----------
        q : float
            Quantile must be strictly between 0 and 1
        vcov : str, 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 : str, kernel to use in the kernel density estimation for the
            asymptotic covariance matrix:

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

        bandwidth : str, 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)
        r   é   z"q must be strictly between 0 and 1ÚbiwÚcosr   ÚgauÚparzkernel must be one of z, r   ÚbofingerÚchamberlainz;bandwidth must be in 'hsheather', 'bofinger', 'chamberlain'é
   F)ÚparamsÚmser   é   Nr&   r'   i,  éd   TzConvergence cycle detectedzMaximum number of iterations (z
) reached.éK   é   gq=
×£põ?ç      ð?r   Ziidzvcov must be 'robust' or 'iid')Znormalized_cov_params)2Ú	ExceptionÚjoinÚkernelsÚhall_sheatherr#   r$   r   r   ÚnobsÚnpZlinalgZmatrix_rankZrankÚfloatZ
k_constantZdf_modelZdf_residZonesÚshapeÚdictÚdotÚTr   ÚabsÚwhereZnewaxisÚmaxÚappendZmeanÚrangeÚallÚwarningsÚwarnr   Ústrr	   ÚstatsÚscoreatpercentileÚminZstdr   ÚppfÚsumÚQuantRegResultsÚqZ
iterationsÚsparsityÚ	bandwidthÚhistoryr   )!r   rG   ZvcovZkernelrI   Zmax_iterZp_tolr   Z
kern_namesr   r   r1   Z	exog_rankZn_iterZxstarÚbetaÚdiffÚcyclerJ   Zbeta0ZxtxZxtyÚresidÚmaskÚiiÚeZiqreÚhZfhat0ÚdZxtxiZxtdxZlfitr   r   r   ÚfitW   sš    !


ÿÿ

ÿÿ
& 
,
zQuantReg.fit)r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rT   Ú__classcell__r   r   r   r   r
       s   ,    ÿr
   c              	   C   sb   t  t  | ¡dkdd| d   dt  | ¡d   ddt  | ¡ d  d ¡}d|t  | ¡dk< |S )	Nr   gUUUUUUõ?g       @r(   é   r   g      @r   ©r2   r9   r8   )ÚuÚzr   r   r   Ú_parzenâ   s
    0ÿr^   c                 C   s,   dd| d  d  t  t  | ¡dkdd¡ S )Ng      î?r   r(   r   r[   ©r\   r   r   r   Ú<lambda>ê   ó    r`   r   c                 C   s,   t  t  | ¡dkdt  dt j |  ¡ d¡S )Nr   r   r(   r   )r2   r9   r8   r    Úpir_   r   r   r   r`   ë   ra   r    c                 C   s(   dd| d   t  t  | ¡dkdd¡ S )Ng      è?r   r(   r   r[   r_   r   r   r   r`   ì   ra   r   r!   r"   çš™™™™™©?c                 C   sZ   t  |¡}dt  |¡d  }d|d  d }| d t  d|d  ¡d  || d  }|S )Ng      ø?g       @r,   gUUUUUUÕ¿gUUUUUUå?gUUUUUUÕ?)r   rD   Úpdf)ÚnrG   Úalphar]   ÚnumÚdenrR   r   r   r   r0   ö   s
    
*r0   c                 C   sN   dt  dt  |¡ ¡d  }dt  |¡d  d d }| d || d  }|S )Ng      @r(   é   r   gš™™™™™É¿gš™™™™™É?)r   rd   rD   )re   rG   rg   rh   rR   r   r   r   r#   þ   s    r#   c                 C   s(   t  d|d  ¡t |d|  |  ¡ S )Nr   r(   )r   rD   r2   Úsqrt)re   rG   rf   r   r   r   r$     s    r$   c                   @   sÖ   e Zd ZdZedd„ ƒZdd„ Zedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed d!„ ƒZd&d$d%„Zd"S )'rF   z'Results instance for the QuantReg modelc                 C   s�   | j }| jj}| j}t |dk d| | || ¡}t |¡}|t ||d ¡ }t |dk d| | || ¡}t |¡}dt 	|¡t 	|¡  S )Nr   r   r)   )
rG   Úmodelr   rN   r2   r9   r8   rA   rB   rE   )r   rG   r   rQ   Zeredr   r   r   Ú	prsquared  s    

zQuantRegResults.prsquaredc                 C   s   dS )Nr,   r   ©r   r   r   r   Úscale  s    zQuantRegResults.scalec                 C   s   t jS r   ©r2   Únanrm   r   r   r   Úbic  s    zQuantRegResults.bicc                 C   s   t jS r   ro   rm   r   r   r   Úaic   s    zQuantRegResults.aicc                 C   s   t jS r   ro   rm   r   r   r   Úllf$  s    zQuantRegResults.llfc                 C   s   t jS r   ro   rm   r   r   r   Úrsquared(  s    zQuantRegResults.rsquaredc                 C   s   t jS r   ro   rm   r   r   r   Úrsquared_adj,  s    zQuantRegResults.rsquared_adjc                 C   s   t jS r   ro   rm   r   r   r   r'   0  s    zQuantRegResults.msec                 C   s   t jS r   ro   rm   r   r   r   Ú	mse_model4  s    zQuantRegResults.mse_modelc                 C   s   t jS r   ro   rm   r   r   r   Ú	mse_total8  s    zQuantRegResults.mse_totalc                 C   s   t jS r   ro   rm   r   r   r   Úcentered_tss<  s    zQuantRegResults.centered_tssc                 C   s   t jS r   ro   rm   r   r   r   Úuncentered_tss@  s    zQuantRegResults.uncentered_tssc                 C   s   t ‚d S r   ©ÚNotImplementedErrorrm   r   r   r   ÚHC0_seD  s    zQuantRegResults.HC0_sec                 C   s   t ‚d S r   rz   rm   r   r   r   ÚHC1_seH  s    zQuantRegResults.HC1_sec                 C   s   t ‚d S r   rz   rm   r   r   r   ÚHC2_seL  s    zQuantRegResults.HC2_sec                 C   s   t ‚d S r   rz   rm   r   r   r   ÚHC3_seP  s    zQuantRegResults.HC3_seNrc   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rn| jjjd d }ddlm	}	 |	ƒ }
|
j
| |||||d� |
j| |||| jd� g }|d dk rðd}|d7 }|d7 }|d7 }||d  }| |¡ n8|dk�r(d}|d7 }|d7 }|d7 }|| }| |¡ |�r8|
 |¡ |
S ) a[  Summarize the Regression Results

        Parameters
        ----------
        yname : str, optional
            Default is `y`
        xname : list[str], optional
            Names for the exogenous variables. Default is `var_##` for ## in
            the number of regressors. Must match the number of parameters
            in the model
        title : str, 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
        )zDep. Variable:N)zModel:NzMethod:zLeast Squares)zDate:N)zTime:NzPseudo R-squared:z%#8.4gz
Bandwidth:z	Sparsity:)zNo. Observations:N)zDf Residuals:N)z	Df Model:NNú zRegression Resultsr   )ÚSummary)ZgleftZgrightÚynameÚxnameÚtitle)r‚   rƒ   rf   Úuse_téÿÿÿÿg»½×Ùß|Û=z6The smallest eigenvalue is %6.3g. This might indicate zthat there are
z5strong multicollinearity problems or that the design zmatrix is singular.r   z1The condition number is large, %6.3g. This might zindicate that there are
z,strong multicollinearity or other numerical z	problems.)Z	eigenvalsZcondition_numberrl   rI   rH   rk   r   rU   Zstatsmodels.iolib.summaryr�   Zadd_table_2colsZadd_table_paramsr…   r;   Zadd_extra_txt)r   r‚   rƒ   r„   rf   ZeigvalsZcondnoÚtop_leftÚ	top_rightr�   ZsmryZetextZwstrr   r   r   ÚsummaryT  sZ    üû
  ÿÿ


zQuantRegResults.summary)NNNrc   )rU   rV   rW   rX   r   rl   rn   rq   rr   rs   rt   ru   r'   rv   rw   rx   ry   r|   r}   r~   r   r‰   r   r   r   r   rF   	  sB   














rF   )rc   )rc   )rX   Únumpyr2   r>   Zscipy.statsrA   Znumpy.linalgr   r   Zstatsmodels.tools.decoratorsr   Z#statsmodels.regression.linear_modelr   r   r   Zstatsmodels.tools.sm_exceptionsr   r	   r
   r^   r/   rd   r0   r#   r$   rF   r   r   r   r   Ú<module>   s*    C


