ó
áp7]c           @   sá   d  d l  Z d  d l m Z d  d l j j Z d e j f d „  ƒ  YZ	 d e	 f d „  ƒ  YZ
 d e	 f d „  ƒ  YZ d	 e	 f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ e j e e ƒ e
 Z e Z e Z d S(   iÿÿÿÿN(   t   modelt   _DimReductionRegressionc           B   s    e  Z d  Z d „  Z d „  Z RS(   sB   
    A base class for dimension reduction regression methods.
    c         K   s    t  t |  ƒ j | | |  d  S(   N(   t   superR   t   __init__(   t   selft   endogt   exogt   kwargs(    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR      s    c         C   s¨   t  j |  j ƒ } |  j | d  d  … f } | | j d ƒ 8} t  j | j ƒ } t  j j | ƒ } t  j j	 | | j ƒ j } | |  _
 | |  _ t  j | | ƒ |  _ d  S(   Ni    (   t   npt   argsortR   R   t   meant   covt   Tt   linalgt   choleskyt   solvet   wexogt   _covxrt   array_splitt   _split_wexog(   R   t   n_slicet   iit   xt   covxt   covxr(    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyt   _prep   s    		(   t   __name__t
   __module__t   __doc__R   R   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR      s   	t   SlicedInverseRegc           B   s   e  Z d  Z d „  Z RS(   s0  
    Sliced Inverse Regression (SIR)

    Parameters
    ----------
    endog : array-like (1d)
        The dependent variable
    exog : array-like (2d)
        The covariates

    References
    ----------
    KC Li (1991).  Sliced inverse regression for dimension reduction.
    JASA 86, 316-342.
    c         K   s3  | j  d d ƒ } |  j j d | } |  j | ƒ g  |  j D] } | j d ƒ ^ q= } g  |  j D] } | j d ^ qb } t j | ƒ } t j | ƒ } t j | j	 d | ƒ} t j
 j | ƒ \ } }	 t j | ƒ }
 | |
 } |	 d d … |
 f }	 t j
 j |  j j	 |	 ƒ } t |  | d | ƒ} t | ƒ S(   s   
        Estimate the EDR space.

        Parameters
        ----------
        slice_n : int, optional
            Number of observations per slice
        t   slice_ni   i    t   fweightsNt   eigs(   t   getR   t   shapeR   R   R
   R   t   asarrayR   R   R   t   eighR	   R   R   t   DimReductionResultst   DimReductionResultsWrapper(   R   R   R   R   t   zt   mnt   nt   mnct   at   bt   jjt   paramst   results(    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyt   fit1   s    %#
(   R   R   R   R0   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR       s   t   PrincipalHessianDirectionsc           B   s   e  Z d  Z d „  Z RS(   so  
    Principal Hessian Directions

    Parameters
    ----------
    endog : array-like (1d)
        The dependent variable
    exog : array-like (2d)
        The covariates

    References
    ----------
    KC Li (1992).  On Principal Hessian Directions for Data
    Visualization and Dimension Reduction: Another application
    of Stein's lemma. JASA 87:420.
    c         K   s7  | j  d t ƒ } |  j |  j j ƒ  } |  j |  j j d ƒ } | rx d d l m } | | | ƒ j ƒ  } | j } n  t	 j
 d | | | ƒ } | t | ƒ :} t	 j | j ƒ } t	 j j | | ƒ }	 t	 j j |	 ƒ \ }
 } t	 j t	 j |
 ƒ ƒ } |
 | }
 | d d … | f } t |  | d |
 ƒ} t | ƒ S(   s%  
        Estimate the EDR space using PHD.

        Parameters
        ----------
        resid : bool, optional
            If True, use least squares regression to remove the
            linear relationship between each covariate and the
            response, before conducting PHD.
        t   residi    iÿÿÿÿ(   t   OLSs   i,ij,ik->jkNR    (   R!   t   FalseR   R
   R   t#   statsmodels.regression.linear_modelR3   R0   R2   R   t   einsumt   lenR   R   R   R   t   eigR	   t   absR%   R&   (   R   R   R2   t   yR   R3   t   rt   cmt   cxt   cbR+   R,   R-   R.   R/   (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR0   e   s"    
(   R   R   R   R0   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR1   S   s   t   SlicedAverageVarianceEstimationc           B   s    e  Z d  Z d „  Z d „  Z RS(   s\  
    Sliced Average Variance Estimation (SAVE)

    Parameters
    ----------
    endog : array-like (1d)
        The dependent variable
    exog : array-like (2d)
        The covariates
    bc : bool, optional
        If True, use the bias-correctedCSAVE method of Li and Zhu.

    References
    ----------
    RD Cook.  SAVE: A method for dimension reduction and graphics
    in regression.
    http://www.stat.umn.edu/RegGraph/RecentDev/save.pdf

    Y Li, L-X Zhu (2007). Asymptotics for sliced average
    variance estimation.  The Annals of Statistics.
    https://arxiv.org/pdf/0708.0462.pdf
    c         K   sQ   t  t |  ƒ j | | |  t |  _ d | k rM | d t k rM t |  _ n  d  S(   Nt   bc(   R   t   SAVER   R4   R@   t   True(   R   R   R   R   (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR   ¢   s    	c         K   sÝ  | j  d d ƒ } |  j j d | } |  j | ƒ g  |  j D] } t j | j ƒ ^ q= } g  |  j D] } | j d ^ qe } |  j j d } |  j	 sý d } xJ t
 | | ƒ D]9 \ }	 }
 t j | ƒ |
 } | |	 t j | | ƒ 7} q­ W| t | ƒ :} n^d } x$ | D] } | t j | | ƒ 7} q
W| t | ƒ :} d } x€ |  j D]u } | | j d ƒ } xY t | j d ƒ D]D } | | d d … f } t j | | ƒ } | t j | | ƒ 7} qwWqJW| |  j j d :} t j | ƒ } | | d | d d d } | d | d d d } | | | | } t j | ƒ d t | ƒ t | ƒ | } t j j | ƒ \ } } t j | ƒ } | | } | d d … | f } t j j |  j j | ƒ } t |  | d | ƒ} t | ƒ S(   s“   
        Estimate the EDR space.

        Parameters
        ----------
        slice_n : int
            Number of observations per slice
        R   i2   i    i   Ni   R    (   R!   R   R"   R   R   R   R   R   R   R@   t   zipt   eyet   dotR7   R
   t   ranget   outert   sumR   R$   R	   R   R   R%   R&   (   R   R   R   R   R'   t   cvt   nst   pt   vmt   wt   cvxt   icvt   avt   ct   vnR   R;   t   it   ut   mt   k1t   k2t   av2R+   R,   R-   R.   R/   (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR0   ©   sH    (#	+
(   R   R   R   R   R0   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR?   Š   s   	R%   c           B   s   e  Z d  Z d „  Z RS(   s=   
    Results class for a dimension reduction regression.
    c         C   s&   t  t |  ƒ j | | ƒ | |  _ d  S(   N(   R   R%   R   R    (   R   R    R.   R    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR   ð   s    
(   R   R   R   R   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR%   ë   s   R&   c           B   s   e  Z i d  d 6Z e Z RS(   t   columnsR.   (   R   R   t   _attrst   _wrap_attrs(    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyR&   ö   s   
(   t   numpyR   t   statsmodels.baseR    t   statsmodels.base.wrappert   baset   wrappert   wrapt   ModelR   R   R1   R?   t   ResultsR%   t   ResultsWrapperR&   t   populate_wrappert   SIRt   PHDRA   (    (    (    s<   lib/python2.7/site-packages/statsmodels/regression/dimred.pyt   <module>   s   37a	