U
    Ãmœd  ã                
   @   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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r�d}t |¡r¨t 	|¡| }t |¡}|jdkrÜt |¡| _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__© úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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;   Ú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    < 