o
    0Gf                     @   s   d Z ddlZddlmZmZ G dd deZedkr`ddlm	Z
 ejddd	Zeed
 ed
 d eg d eejd dfZe
jeddZeed eg ddZe Zeej dS dS )z>Restricted least squares

from pandas
License: Simplified BSD
    N)GLSRegressionResultsc                       s   e Zd ZdZd fdd	ZdZedd ZdZedd	 Z	dZ
ed
d ZdZedd ZdZedd ZdZedd Zdd Z  ZS )RLSa  
    Restricted general least squares model that handles linear constraints

    Parameters
    ----------
    endog : array_like
        n length array containing the dependent variable
    exog : array_like
        n-by-p array of independent variables
    constr : array_like
        k-by-p array of linear constraints
    param : array_like or scalar
        p-by-1 array (or scalar) of constraint parameters
    sigma (None): scalar or array_like
        The weighting matrix of the covariance. No scaling by default (OLS).
        If sigma is a scalar, then it is converted into an n-by-n diagonal
        matrix with sigma as each diagonal element.
        If sigma is an n-length array, then it is assumed to be a diagonal
        matrix with the given sigma on the diagonal (WLS).

    Notes
    -----
    endog = exog * beta + epsilon
    weights' * constr * beta = param

    See Greene and Seaks, "The Restricted Least Squares Estimator:
    A Pedagogical Note", The Review of Economics and Statistics, 1991.
            Nc           
         s  |j \}}t|}|jdkrd|j d }}	n|j \}}	||	kr%td|| _|| _|| _t|r?|dkr?t	|f| }|| _
|d u rHd}t|rTt	|| }t|}|jdkrnt|| _tt|| _n|| _tjtj| jj| _tt| || d S )N   r   z#Constraints and design do not aligng      ?)shapenpZasarrayndim	Exceptionncoeffsnconstraint
constraintZisscalarZonesparamZsqueezediagsigmaZsqrtZcholsigmainvlinalgZcholeskyZpinvTsuperr   __init__)
selfZendogZexogconstrr   r   NQKP	__class__ 7lib/python3.10/site-packages/statsmodels/sandbox/rls.pyr   (   s0   






zRLS.__init__c                 C   s   | j du rW| j}| j}t|| || f}t| jj| j|d|d|f< t| j	||f}|j|d||df< |||dd|f< t||f||d|df< || _ | j S )z8Whitened exogenous variables augmented with restrictionsN)
_rwexogr   r   r   zerosdotwexogr   reshaper   )r   r   r   designr   r   r   r   rwexogE   s   
"z
RLS.rwexogc                 C   s    | j du rtj| j| _ | j S )zInverse of self.rwexogN)_inv_rwexogr   r   invr%   )r   r   r   r   
inv_rwexogU   s   
zRLS.inv_rwexogc                 C   sZ   | j du r*| j}| j}t|| f}t| jj| j|d|< | j	||d< || _ | j S )zBWhitened endogenous variable augmented with restriction parametersN)
_rwendogr   r   r   r    r!   r"   r   wendogr   )r   r   r   Zresponser   r   r   rwendog]   s   
zRLS.rwendogc                 C   s.   | j du r| j}| jd|d|f | _ | j S )z'Parameter covariance under restrictionsN)_ncpr   r(   )r   r   r   r   r   rnorm_cov_paramsj   s   
zRLS.rnorm_cov_paramsc                 C   sv   | j du r8| j}t| j| j}t| j| d }t|}t| j	| jj
}tt|||j
| | | _ | j S )zu
        Heteroskedasticity-consistent parameter covariance
        Used to calculate White standard errors.
        N   )_wncpZdf_residr   r!   r"   coeffsr   r*   sumr-   r   )r   ZdfZpredZepsZsigmaSqZpinvXr   r   r   wrnorm_cov_paramss   s   

 zRLS.wrnorm_cov_paramsc                 C   s0   | j du rt| j| j}|d| j | _ | j S )zEstimated parametersN)_coeffsr   r!   r(   r+   r   )r   Z
betaLambdar   r   r   r0      s   
z
RLS.coeffsc                 C   s   | j }t| | j|d}|S )N)Znormalized_cov_params)r2   r   r0   )r   ZrncpZlfitr   r   r   fit   s   zRLS.fit)r   N)__name__
__module____qualname____doc__r   r   propertyr%   r&   r(   r)   r+   r,   r-   r/   r2   r3   r0   r4   __classcell__r   r   r   r   r   
   s,    





r   __main__z./rlsdata.txtT)namesYr.   )ZNEZNCWS)ZprependG)r   r   r   r   r   r   r   )r   )r8   Znumpyr   Z#statsmodels.regression.linear_modelr   r   r   r5   Zstatsmodels.apiZapiZsmZ
genfromtxtZdtaZcolumn_stackviewfloatr#   r   r$   Zadd_constantZrls_modr4   Zrls_fitprintparamsr   r   r   r   <module>   s     8