U
    Kvf                  
   @   s   d Z ddlZddlmZmZ G dd deZedkrddlm	Z
 ejddd	Zeed
 ed
 d eddddg eejd dfZe
jeddZeed edddddddgdZe Zeej 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r0d|j d  }}	n
|j \}}	||	krJtd|| _|| _|| _t|r~|dkr~t	|f| }|| _
|d krd}t|rt	|| }t|}|jdkrt|| _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sigmasqrtZcholsigmainvlinalgZcholeskyZpinvTsuperr   __init__)
selfZendogZexogconstrr   r   NQKP	__class__ ;/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/sandbox/rls.pyr   (   s0    






zRLS.__init__c                 C   s   | j dkr| 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k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krT| 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   responser   r   r   rwendog]   s    
zRLS.rwendogc                 C   s.   | j dk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krp| 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dfpredZepsZsigmaSqZpinvXr   r   r   wrnorm_cov_paramss   s    

 zRLS.wrnorm_cov_paramsc                 C   s0   | j dkr*t| j| j}|d| j | _ | j S )zEstimated parametersN)_coeffsr   r"   r)   r-   r   )r   Z
betaLambdar   r   r   r2      s    
z
RLS.coeffsc                 C   s   | j }t| | j|d}|S )N)Znormalized_cov_params)r5   r   r2   )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/   r1   r5   r6   r2   r7   __classcell__r   r   r   r   r   
   s*   





r   __main__z./rlsdata.txtT)namesYr0   ZNEZNCWS)prependGr   )r   )r;   Znumpyr   Z#statsmodels.regression.linear_modelr   r   r   r8   Zstatsmodels.apiapismZ
genfromtxtZdtaZcolumn_stackviewfloatr$   r   r%   Zadd_constantZrls_modr7   Zrls_fitprintparamsr   r   r   r   <module>   s    < 