B
    ¥ŠãZÓ  ã            
   @   sÞ   d Z ddlmZ ddlZddlmZ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
é    )Úprint_functionN)ÚWLSÚ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 (0.): 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 |¡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ÚsigmaZsqrtZcholsigmainvÚlinalgZcholeskyZpinvÚTÚsuperr   Ú__init__)
ÚselfZendogZexogÚconstrr   r   ÚNÚQÚKÚP)Ú	__class__© ú6lib/python3.7/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   Z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dfZ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   r1   ƒ   s    
z
RLS.coeffsc             C   s   | j }t| | j|d}|S )N)Znormalized_cov_params)r3   r   r1   )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.   r0   r3   r4   r1   r5   Ú__classcell__r   r   )r   r   r   
   s   r   Ú__main__z./rlsdata.txtT)ÚnamesÚYr/   ZNEZNCÚWÚSéÿÿÿÿ)ZprependÚGr   )r   )r9   Z
__future__r   Znumpyr
   Z#statsmodels.regression.linear_modelr   r   r   r   r6   Zstatsmodels.apiZapiZsmZ
genfromtxtZdtaZcolumn_stackZviewÚfloatr$   r	   r%   Zadd_constantZrls_modr5   Zrls_fitÚprintZparamsr   r   r   r   Ú<module>   s    < 