ó
áp7]c           @  s1  d  Z  d d l m Z d d l Z d d l m Z m Z d e f d „  ƒ  YZ e	 d k r-d d l
 j Z e j d d	 e ƒZ e j e d
 e d
 d e d d d d g j e ƒ j e j d d ƒ f ƒ Z e j e d e ƒZ e e d e d d d d d d d d g ƒZ e j ƒ  Z e e j ƒ n  d S(   s>   Restricted least squares

from pandas
License: Simplified BSD
iÿÿÿÿ(   t   print_functionN(   t   GLSt   RegressionResultst   RLSc           B  s¤   e  Z d  Z d d
 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 RS(   s  
    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.
    g        c   
      C  s›  | j  \ } } t j | ƒ } | j d k rD d | j  d } }	 n | j  \ } }	 | |	 k rn t d ƒ ‚ n  | |  _ | |  _ | |  _ t j | ƒ r½ | d k r½ t j	 | f ƒ | } n  | |  _
 | d  k rÛ d } n  t j | ƒ r t j	 | ƒ | } n  t j | ƒ } | j d k rNt j | ƒ |  _ t j t j | ƒ ƒ |  _ n0 | |  _ t j j t j j |  j ƒ ƒ j |  _ t t |  ƒ j | | ƒ d  S(   Ni   i    s#   Constraints and design do not aligng      ð?(   t   shapet   npt   asarrayt   ndimt	   Exceptiont   ncoeffst   nconstraintt
   constraintt   isscalart   onest   paramt   Nonet   squeezet   diagt   sigmat   sqrtt   cholsigmainvt   linalgt   choleskyt   pinvt   Tt   superR   t   __init__(
   t   selft   endogt   exogt   constrR   R   t   Nt   Qt   Kt   P(    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyR   )   s0    						'c         C  s  |  j  d k rü |  j } |  j } t j | | | | 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 <| |  _  n  |  j  S(   s8   Whitened exogenous variables augmented with restrictionsN(   t   _rwexogR   R	   R
   R   t   zerost   dott   wexogR   t   reshapeR   (   R   R"   R!   t   designR   (    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   rwexogF   s    		1+c         C  s1   |  j  d k r* t j j |  j ƒ |  _  n  |  j  S(   s   Inverse of self.rwexogN(   t   _inv_rwexogR   R   R   t   invR)   (   R   (    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt
   inv_rwexogV   s    c         C  sv   |  j  d k ro |  j } |  j } t j | | f ƒ } t j |  j j |  j	 ƒ | | *|  j
 | | )| |  _  n  |  j  S(   sB   Whitened endogenous variable augmented with restriction parametersN(   t   _rwendogR   R	   R
   R   R$   R%   R&   R   t   wendogR   (   R   R"   R!   t   response(    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   rwendog^   s    		c         C  sD   |  j  d k r= |  j } |  j d | … d | … f |  _  n  |  j  S(   s'   Parameter covariance under restrictionsN(   t   _ncpR   R	   R,   (   R   R"   (    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   rnorm_cov_paramsk   s    	%c         C  sª   |  j  d k r£ |  j } t j |  j |  j ƒ } t j |  j | d ƒ } t j	 | ƒ } t j |  j
 |  j j ƒ } t j t j | | ƒ | j ƒ | | |  _  n  |  j  S(   su   
        Heteroskedasticity-consistent parameter covariance
        Used to calculate White standard errors.
        i   N(   t   _wncpR   t   df_residR   R%   R&   t   coeffsR   R.   t   sumR2   R   (   R   t   dft   predt   epst   sigmaSqt   pinvX(    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   wrnorm_cov_paramst   s    	/c         C  sA   |  j  d k r: t j |  j |  j ƒ } | |  j  |  _  n  |  j  S(   s   Estimated parametersN(   t   _coeffsR   R   R%   R,   R0   R	   (   R   t
   betaLambda(    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyR5   „   s    c         C  s%   |  j  } t |  |  j d | ƒ} | S(   Nt   normalized_cov_params(   R<   R   R5   (   R   t   rncpt   lfit(    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   fitŒ   s    	N(   t   __name__t
   __module__t   __doc__R   R   R#   t   propertyR)   R*   R,   R-   R0   R1   R2   R3   R<   R=   R5   RB   (    (    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyR      s   t   __main__s   ./rlsdata.txtt   namest   Yi   t   NEt   NCt   Wt   Si    t   prependt   GR   i   (   RE   t
   __future__R    t   numpyR   t#   statsmodels.regression.linear_modelR   R   R   RC   t   statsmodels.apit   apit   smt
   genfromtxtt   Truet   dtat   column_stackt   viewt   floatR'   R   R(   t   add_constantt   rls_modRB   t   rls_fitt   printt   params(    (    (    s6   lib/python2.7/site-packages/statsmodels/sandbox/rls.pyt   <module>   s   †P.