
    'YHh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y)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                 J    | j                  |       t        |   ||fi | y N)_check_kwargssuper__init__)selfendogexogkwargs	__class__s       c/var/www/html/planif/env/lib/python3.12/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   c                 x
   |dk  s|dk\  rt        d      g d}||vrt        ddj                  |      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                  | j                        }|| _        t        | j                  | j                  z
        | _        | j                  | j                  z
  | _        d}|
}t        j"                  |
j$                  d         }d}d}t'        g g       }||k  r||kD  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        j0                  |dk  ||z  d|z
  |z        }t        j.                  |      }|
|ddt        j2                  f   z  }t        j4                  t        j.                  ||z
              }|d   j7                  |       |d   j7                  t        j8                  ||z               |dk\  rV|dz  dk(  rNt;        dd      D ]?  }t        j<                  ||d   |    k(        s#d}t?        j@                  dtB                n ||k  r	||kD  r|s||k(  r)t?        j@                  dtE        |      z   dz   tF               |	t        j(                  |
|      z
  }tI        jJ                  |d      tI        jJ                  |d      z
  } |||      }tM        t        jN                  |	      |dz        tQ        jR                  ||z         tQ        jR                  ||z
        z
  z  }d||z  z  t        jT                   |||z              z  }|dk(  rt        j0                  |dkD  ||z  dz  d|z
  |z  dz        }t-        t        j(                  |
j*                  |
            }t        j(                  |
j*                  |t        j2                  ddf   z  |
      }||z  |z  }nL|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cosepagauparzkernel must be one of z, 	hsheatherbofingerchamberlainz;bandwidth must be in 'hsheather', 'bofinger', 'chamberlain'
   F)paramsmseư>   Nr(   r)   i,  d   TzConvergence cycle detectedzMaximum number of iterations (z
) reached.K      gq=
ףp?      ?robust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   rW   vcovkernelrZ   max_iterp_tolr   
kern_namesr   r   r7   	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   s   B 6Q!V@AA8
#4tyy7LLMMV_F#%I*$ I-'#IYZZ

yyyyII))$))4		dii$//9:		DII-wwtzz!}% +xD5LaKFE&&$'C&&%(C66$s)S)DBFF4..E66%=7*D!$K1,1A5@E$KHHUQYE	AaC5=AEFF5ME5BJJ//E66"&&./DH$$T*EN!!"''%+"67#FSLA$52, Bvvdgh&7&<<= $ &BDVW	' xD5L2 XMM:S]J&'(=? BFF4&& &&q"-0G0G20NNdAut $Q$((1q5/ AC dQh"&&A"778Q51!U{Q.>?Atvvt,-D66$&&1RZZ]#33T:D$;%DU]J?Q&!a%04tvvt8L3MMD<==tTF U
'--r   )      ?r0   r!   r$     r*   )__name__
__module____qualname____doc__r   r   ru   __classcell__)r   s   @r   r   r       s#    *X0 @K!%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kD  <   |S )	Nrv   gUUUUUU?g       @r+      r   g      @r   r8   rF   rE   )uzs     r   _parzenr      s|    
b$ad"2R"&&)Q,5F"Fq266!9}q((2-	/AAbffQi!mHr   c                 z    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      s6    8q1a4x!m3bhhrvvayA~qRS6TT r   r   c                     t        j                  t        j                  |       dk  dt        j                  dt         j                  z  | z        z   d      S )Nrv   r   r+   r   )r8   rF   rE   r    pir   s    r   r   r      s:    288BFF1IOQBEE	A9N5NPQR r   r    c                 t    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      s1    6Qq!tV,rxxq	Q1/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       @r/   gUUUUUUտgUUUUUU?gUUUUUU?)r   rT   pdf)nrW   alphar   numdenro   s          r   r6   r6      sm    A
R
C
q"u*r/C	GtxxURZ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   rT   )r   rW   r   r   ro   s        r   r%   r%      sb    
488AO,a/
/Ctxx{A~!A
%C	Gc	V,,AHr   c                 v    t        j                  d|dz  z
        t        j                  |d|z
  z  | z        z  S )Nr   r+   )r   rT   r8   sqrt)r   rW   r   s      r   r&   r&     s3    88A	M"RWWQAY]%;;;r   c                      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y)rV   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,   )
rW   modelr   rj   r8   rF   rE   rP   rQ   rU   )r   rW   r   rm   ereds        r   	prsquaredzQuantRegResults.prsquared  s    FF

  JJHHQUQUaKQ/FF1Iu..ua#g>>xxq1q5D.!d(;vvd|266!9rvvd|+++r   c                      y)Nr/   r   r   s    r   scalezQuantRegResults.scale  s    r   c                 "    t         j                  S r   r8   nanr   s    r   biczQuantRegResults.bic      vv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   Nc                 z   | 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                  | |||||       |
j                  | |||| j                         g }|d   dk  r+d}|dz  }|dz  }|dz  }||d   z  }|j                  |       n,|dkD  r'd}|dz  }|dz  }|dz  }||z  }|j                  |       |r|
j                  |       |
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:N 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.rw   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   rZ   rY   r   r   rx   statsmodels.iolib.summaryr   add_table_2colsadd_table_paramsr   rI   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,(	 =JJ((11C7:NNE 	6yT)#(U 	 	Dd%uE$(JJ 	 	0 2;KD&&DKKD))D'"+%DLLd]FD//DBBDKD&=DLLu%r   )NNN皙?)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   rV   rV   	  s:   1	, 	,                     " " " " " " " "Lr   rV   )r   )r{   numpyr8   rM   scipy.statsrP   numpy.linalgr   r   statsmodels.tools.decoratorsr   #statsmodels.regression.linear_modelr   r   r   statsmodels.tools.sm_exceptionsr	   r
   r   r   r5   r   r6   r%   r&   rV   r   r   r   <module>r      s   "      7K KD. .D TRM<W' Wr   