
    !g                        d Z ddlZddlmZmZ  G d de      Zedk(  rddlm	Z
  ej                  dd	      Z ej                  ed
   ed
   dz  eg d   j                  e      j!                  ej"                  d   d      f      Z e
j&                  ed      Z eed   eg d      Zej+                         Z eej0                         yy)z>Restricted least squares

from pandas
License: Simplified BSD
    N)GLSRegressionResultsc                        e Zd ZdZd fd	ZdZed        ZdZed        Z	dZ
ed        ZdZed        ZdZed        ZdZed	        Zd
 Z x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                    |j                   \  }}t        j                  |      }|j                  dk(  rd|j                   d   }	}n|j                   \  }}	||	k7  rt	        d      || _        || _        || _        t        j                  |      r|dkD  rt        j                  |f      |z  }|| _
        |d}t        j                  |      rt        j                  |      |z  }t        j                  |      }|j                  dk(  rHt        j                  |      | _        t        j                  t        j                  |            | _        n\|| _        t        j                   j#                  t        j                   j%                  | j                              j&                  | _        t(        t*        | [  ||       y )N   r   z#Constraints and design do not aligng      ?)shapenpasarrayndim	Exceptionncoeffsnconstraint
constraintisscalaronesparamsqueezediagsigmasqrtcholsigmainvlinalgcholeskypinvTsuperr   __init__)selfendogexogconstrr   r   NQKP	__class__s             T/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/statsmodels/sandbox/rls.pyr   zRLS.__init__(   sM   zz1F#;;!fll1oqA<<DAq6ABB ;;u!a%GGQDME)E
=E;;uGGAJ&E

5!::?DJ " 7DDJ "		 2 2299>>$**3M N P PDc4!%.    c                    | j                   | j                  }| j                  }t        j                  ||z   ||z   f      }t        j
                  | j                  j                  | j                        |d|d|f<   t        j                  | j                  ||f      }|j                  |d||df<   |||dd|f<   t        j                  ||f      ||d|df<   || _         | j                   S )z8Whitened exogenous variables augmented with restrictionsN)
_rwexogr   r   r
   zerosdotwexogr   reshaper   )r   r&   r%   designr"   s        r(   rwexogz
RLS.rwexogE   s     <<A  AXXq1ua!en-FVVDJJLL$**=F2A2rr6NZZ!Q8F#XXF2A2qr6N#F12rr6NXXq!f-F12qr6N!DL||r)   c                     | j                   .t        j                  j                  | j                        | _         | j                   S )zInverse of self.rwexog)_inv_rwexogr
   r   invr1   )r   s    r(   
inv_rwexogzRLS.inv_rwexogU   s5     #!yy}}T[[9Dr)   c                 .   | j                   ~| j                  }| j                  }t        j                  ||z   f      }t        j
                  | 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%   responses       r(   rwendogzRLS.rwendog]   sx     == A  AxxQ)H66$**,,<HRaL::HQRL$DM}}r)   c                 ~    | j                   &| j                  }| j                  d|d|f   | _         | j                   S )z'Parameter covariance under restrictionsN)_ncpr   r5   )r   r&   s     r(   rnorm_cov_paramszRLS.rnorm_cov_paramsj   s=     99ABQB/DIyyr)   c                    | j                   | j                  }t        j                  | j                  | j
                        }t        j                  | j                  |z
  dz        }t        j                  |      }t        j                  | j                  | j                  j                        }t        j                  t        j                  ||      |j                        |z  |z  | _         | j                   S )zu
        Heteroskedasticity-consistent parameter covariance
        Used to calculate White standard errors.
           )_wncpdf_residr
   r-   r.   coeffsr   r8   sumr=   r   )r   dfpredepssigmaSqpinvXs         r(   wrnorm_cov_paramszRLS.wrnorm_cov_paramss   s     ::B66$**dkk2D''4;;-!34CffSkGFF400$**,,?Euc 2EGG<rAGKDJzzr)   c                     | j                   >t        j                  | j                  | j                        }|d| j
                   | _         | j                   S )zEstimated parametersN)_coeffsr
   r-   r5   r:   r   )r   
betaLambdas     r(   rB   z
RLS.coeffs   sB     <<>J%mt||4DL||r)   c                 N    | j                   }t        | | j                  |      }|S )N)normalized_cov_params)rI   r   rB   )r   rncplfits      r(   fitzRLS.fit   s$    %% t{{$Or)   )g        N)__name__
__module____qualname____doc__r   r+   propertyr1   r3   r5   r7   r:   r<   r=   r@   rI   rK   rB   rQ   __classcell__)r'   s   @r(   r   r   
   s    :/8 G  K    H	 	 D  E  G r)   r   __main__z./rlsdata.txtT)namesYr?   )NENCWS)prependG)r   r   r   r   r   r   r   )r"   )rU   numpyr
   #statsmodels.regression.linear_modelr   r   r   rR   statsmodels.apiapism
genfromtxtdtacolumn_stackviewfloatr/   r	   r0   add_constantrls_modrQ   rls_fitprintparams r)   r(   <module>rr      s   
  FD# DL Z 
"--t
4CR__c#hs3x{37J3K3P3PQV3W3_3_`c`i`ijk`lmo3pqrFR__VT2F#c(6/:GkkmG	'.. r)   