
    M/Ph7                        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	e          Zd
 Zi Zd ed<   d ed<   d ed<   ej        ed<   eed<   ddZd ZddZ G 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                   4     e Zd ZdZ fdZd Z	 	 dd
Z x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                 h    |                      |            t                      j        ||fi | d S N)_check_kwargssuper__init__)selfendogexogkwargs	__class__s       j/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/regression/quantile_regression.pyr   zQuantReg.__init__M   s>    6"""///////    c                     |S )zE
        QuantReg model whitener does nothing: returns data.
         )r   datas     r   whitenzQuantReg.whitenQ   s	     r         ?robustepa	hsheather  ư>c                 
   |dk    s|dk    rt          d          g d}||vr%t          dd                    |          z             t          |         }|dk    rt          }n+|dk    rt          }n|d	k    rt
          }nt          d
          | j        }	| j        }
| j        }t          j
                            | j                  }|| _        t          | j        | j        z
            | _        | j        | j        z
  | _        d}|
}t          j        |
j        d                   }d}d}t'          g g           }||k     r||k    r|s|dz  }|}t          j        |j        |
          }t          j        |j        |	          }t          j        t-          |          |          }|	t          j        |
|          z
  }t          j        |          dk     }||         dk    dz  dz
  dz  ||<   t          j        |dk     ||z  d|z
  |z            }t          j        |          }|
|ddt          j        f         z  }t          j        t          j        ||z
                      }|d                             |           |d                             t          j        ||z                       |dk    r_|dz  dk    rVt;          dd          D ]E}t          j        ||d         |          k              rd}t?          j         dtB                      nF||k     r	||k    r|||k    r-t?          j         dtE          |          z   dz   tF                     |	t          j        |
|          z
  }tI          j%        |d          tI          j%        |d          z
  } |||          }tM          t          j'        |	          |dz            tQ          j)        ||z             tQ          j)        ||z
            z
  z  }d||z  z  t          j*         |||z                      z  }|dk    rt          j        |dk    ||z  dz  d|z
  |z  dz            }t-          t          j        |
j        |
                    }t          j        |
j        |t          j        ddf         z  |
          }||z  |z  }nO|dk    r:d|z  dz  |z  d|z
  z  t-          t          j        |
j        |
                    z  }nt          d          tW          | ||           } || _,        || _-        d|z  | _.        || _/        || _0        tc          |           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   iidzvcov must be 'robust' or 'iid')normalized_cov_params)2	Exceptionjoinkernelshall_sheatherr)   r*   r   r   nobsnplinalgmatrix_rankrankfloat
k_constantdf_modeldf_residonesshapedictdotTr   abswherenewaxismaxappendmeanrangeallwarningswarnr	   strr
   statsscoreatpercentileminstdr   ppfsumQuantRegResultsq
iterationssparsity	bandwidthhistoryr   )!r   rY   vcovkernelr\   max_iterp_tolr   
kern_namesr   r   r9   	exog_rankn_iterxstarbetadiffcycler]   beta0xtxxtyresidmaskiieiqrehfhat0dxtxixtdxlfits!                                    r   fitzQuantReg.fitW   s9   B 66Q!VV@AAA888
##4tyy7L7LLMMMV_F##%II*$$ II-''#IIYZZZ
yyI))$)44		di$/9::	DI-wtz!}%% +++xD5LLLaKFE&$''C&%((C6$s))S))DBF4...E6%==7*D!$K1,1A5@E$KHUQYE	AaC5=AAEF5MME5BJ//E6"&..//DH$$T***EN!!"'%+"6"6777#FSLA$5$52,,  Bvdgh&7&<<==  $ &BDVWWW) xD5LLL2 XM:S]]J&'(=? ? ? BF4&&& &q"--0G20N0NNIdAut  $Q$(1q5// AC dQh"&A"7"778Q51!U{Q.>??Atvt,,--D6$&1RZ]#33T::D$;%DDU]]J?Q&!a%04tvt8L8L3M3MMDD<===tTFFF U
'---r   )r   r   r   r    r!   r"   )__name__
__module____qualname____doc__r   r   rw   __classcell__)r   s   @r   r   r       sx        * *X0 0 0 0 0   @K!%H. H. H. H. H. H. H. H.r   r   c           	         t          j        t          j        |           dk    dd| dz  z  z
  dt          j        |           dz  z  z   ddt          j        |           z
  dz  z  dz            }d|t          j        |           dk    <   |S )	Nr   gUUUUUU?g       @r.      r$   g      @r   r:   rH   rG   )uzs     r   _parzenr      s    
b$ad"2R"&))Q,5F"Fq26!99}q((2-	/ 	/AAbfQii!mHr   c                 x    dd| dz  z
  dz  z  t          j        t          j        |           dk    dd          z  S )Ng      ?r$   r.   r   r   r   s    r   <lambda>r      s7    8q1a4x!m3bhrvayyA~qRS6T6TT r   r%   c                     t          j        t          j        |           dk    dt          j        dt           j        z  | z            z   d          S )Nr   r$   r.   r   )r:   rH   rG   r&   pir   s    r   r   r      s:    28BF1IIOQBE	A9N9N5NPQRR r   r&   c                 r    dd| dz  z
  z  t          j        t          j        |           dk    dd          z  S )Ng      ?r$   r.   r   r   r   s    r   r   r      s2    6Qq!tV,rxq		Q1/M/MM r   r   r'   r(   皙?c                     t          j        |          }dt          j        |          dz  z  }d|dz  z  dz   }| dz  t          j        d|dz  z
            dz  z  ||z  dz  z  }|S )Ng      ?g       @r2   gUUUUUUտgUUUUUU?gUUUUUU?)r   rV   pdf)nrY   alphar   numdenrq   s          r   r8   r8      sn    A
R
C
q"u*r/C	GtxURZ00488C#I;NNAHr   c                     dt          j        dt          j        |          z            dz  z  }dt          j        |          dz  z  dz   dz  }| dz  ||z  dz  z  }|S )Ng      @r.      r$   gɿg?)r   r   rV   )r   rY   r   r   rq   s        r   r)   r)      sc    
48AO,,a/
/Ctx{{A~!A
%C	Gc	V,,AHr   c                 r    t          j        d|dz  z
            t          j        |d|z
  z  | z            z  S )Nr$   r.   )r   rV   r:   sqrt)r   rY   r   s      r   r*   r*     s5    8A	M""RWQAY]%;%;;;r   c                   j   e Zd 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ZdS )rX   z'Results instance for the QuantReg modelc                    | j         }| j        j        }| j        }t	          j        |dk     d|z
  |z  ||z            }t	          j        |          }|t          j        ||dz            z
  }t	          j        |dk     d|z
  |z  ||z            }t	          j        |          }dt	          j	        |          t	          j	        |          z  z
  S )Nr   r$   r/   )
rY   modelr   rl   r:   rH   rG   rR   rS   rW   )r   rY   r   ro   ereds        r   	prsquaredzQuantRegResults.prsquared  s    F
 JHQUQUaKQ//F1IIu.ua#g>>>xq1q5D.!d(;;vd||26!99rvd||+++r   c                     dS )Nr2   r   r   s    r   scalezQuantRegResults.scale  s    rr   c                     t           j        S r   r:   nanr   s    r   biczQuantRegResults.bic  	    vr   c                     t           j        S r   r   r   s    r   aiczQuantRegResults.aic   r   r   c                     t           j        S r   r   r   s    r   llfzQuantRegResults.llf$  r   r   c                     t           j        S r   r   r   s    r   rsquaredzQuantRegResults.rsquared(  r   r   c                     t           j        S r   r   r   s    r   rsquared_adjzQuantRegResults.rsquared_adj,  r   r   c                     t           j        S r   r   r   s    r   r-   zQuantRegResults.mse0  r   r   c                     t           j        S r   r   r   s    r   	mse_modelzQuantRegResults.mse_model4  r   r   c                     t           j        S r   r   r   s    r   	mse_totalzQuantRegResults.mse_total8  r   r   c                     t           j        S r   r   r   s    r   centered_tsszQuantRegResults.centered_tss<  r   r   c                     t           j        S r   r   r   s    r   uncentered_tsszQuantRegResults.uncentered_tss@  r   r   c                     t           r   NotImplementedErrorr   s    r   HC0_sezQuantRegResults.HC0_seD      !!r   c                     t           r   r   r   s    r   HC1_sezQuantRegResults.HC1_seH  r   r   c                     t           r   r   r   s    r   HC2_sezQuantRegResults.HC2_seL  r   r   c                     t           r   r   r   s    r   HC3_sezQuantRegResults.HC3_seP  r   r   Nr   c                 ^   | j         }| j        }ddddgfddg}dd| j        z  gfd	d| j        z  gfd
d| j        z  gfdddg}|| j        j        j        dz   dz   }ddlm	}	  |	            }
|

                    | |||||           |
                    | |||| j                   g }|d         dk     r2d}|dz  }|dz  }|dz  }||d         z  }|                    |           n1|dk    r+d}|dz  }|dz  }|dz  }||z  }|                    |           |r|
                    |           |
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)gleftgrightynamexnametitle)r   r   r   use_tg|=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.)	eigenvalscondition_numberr   r\   r[   r   r   rx   statsmodels.iolib.summaryr   add_table_2colsadd_table_paramsr   rK   add_extra_txt)r   r   r   r   r   eigvalscondnotop_left	top_rightr   smryetextwstrs                r   summaryzQuantRegResults.summaryT  s   6 .&,$ 12##	 *Ht~,E+FG"X%>$?@!Ht}$<#=>0,(	 =J(1C7:NNE 	655555wyyT)#(U 	 	D 	D 	Dd%uE$(J 	 	0 	0 	0 2;KD&&DKKD))D'"+%DLLd]]FD//DBBDKD&=DLL 	&u%%%r   )NNNr   )rx   ry   rz   r{   r   r   r   r   r   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   rX   rX   	  s       11	, 	, ^	,     ^   ^   ^   ^   ^   ^   ^   ^   ^   ^ " " ^" " " ^" " " ^" " " ^"L L L L L Lr   rX   )r   )r{   numpyr:   rO   scipy.statsrR   numpy.linalgr   r   statsmodels.tools.decoratorsr   #statsmodels.regression.linear_modelr   r   r   statsmodels.tools.sm_exceptionsr	   r
   r   r   r7   r   r8   r)   r*   rX   r   r   r   <module>r      s   "                        7 7 7 7 7 7K K K K K K K K K KD D D D D D D D. . . . . . . .D   TTRRMM     < < < <W W W W W' W W W W Wr   