ó
áp7]c           @  s¾   d  d l  m Z m Z d  d l m Z d  d l Z d  d l Z d  d l Z	 d  d l
 Z
 d  d l m Z m Z m Z d  d l m Z d  d l m Z m Z m Z d Z d e f d	 „  ƒ  YZ d S(
   iÿÿÿÿ(   t   print_functiont   division(   t   PLATFORM_WIN32N(   t   assert_allcloset   assert_equalt   assert_raises(   t   PCA(   t   datat	   princomp1t	   princomp2gñhãˆµøä>t   TestPCAc           B  s×   e  Z e d  „  ƒ Z e j j e j j d „  ƒ ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z e j j d „  ƒ Z d „  Z e j j d „  ƒ Z d	 „  Z e j j e d
 d ƒd „  ƒ Z d „  Z e j j d „  ƒ Z RS(   c   
      C  s-  t  j j ƒ  } | j d ƒ d } d } d } d } | j } | | | f ƒ } | | | f ƒ } | j | d | | f ƒ| }	 | j |	 ƒ | |  _ |  j d |  _ | |  _	 d } d } d } d } | j } | | | f ƒ } | | | f ƒ } | j | d | | f ƒ| }	 | j |	 ƒ | |  _
 d  S(	   NiÒ  i   id   iÈ   i   t   sizeg        i,  (   t   npt   randomt   RandomStatet   seedt   standard_normalt   standard_gammat   dott   xt   x_copyt   rst   x_wide(
   t   clsR   t   kt   nt   tt   lamt   norm_rngt   et   ft   b(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   setup_class   s,    			c         C  sÔ   t  |  j ƒ } | j ƒ  } | j d d ƒ } | j d t ƒ } | j d t ƒ } | j ƒ  } | j d d ƒ } | j ƒ  t  |  j d t ƒ} | j ƒ  t  |  j d t d t ƒ} | j ƒ  t |  j | j ƒ d  S(   Nt   ncompi
   t	   log_scalet
   cumulativei   t   standardizet   demean(	   R   R   t
   plot_screet   Falset   Truet   plot_rsquaret   __repr__R   R   (   t   selft   close_figurest   pct   fig(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_smoke_plot_and_repr0   s    


c         C  sJ  t  |  j ƒ } t  |  j d d ƒ} t | j | j ƒ t t j | j d  d  … d  d … f ƒ t j | j d  d  … d  d … f ƒ ƒ t t j | j d  d … d  d  … f ƒ t j | j d  d … d  d  … f ƒ ƒ t | j | j ƒ t t j | j	 d  d  … d  d … f ƒ t j | j	 d  d  … d  d … f ƒ ƒ t  |  j d d d d ƒ} t  |  j d d d d ƒ} t t j | j ƒ t j | j ƒ d t
 ƒt t j | j ƒ t j | j ƒ d t
 ƒt | j | j d t
 ƒt t j | j	 ƒ t j | j	 ƒ d t
 ƒt |  j | j ƒ t |  j | j ƒ t |  j | j ƒ d  S(   Nt   methodt   svdi   R!   t   nipalst   atol(   R   R   R   t
   projectionR   t   abst   factorst   coefft	   eigenvalst	   eigenvecst	   DECIMAL_5R   R   (   R+   t   pc_eigt   pc_svdt	   pc_nipals(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_eig_svd_equivC   s8    ()()	
()		c         C  s  t  |  j ƒ } t  |  j d t ƒ} t | j j | j ƒ | j j | j ƒ ƒ | j } t | j j | ƒ t j	 d ƒ d d ƒ| j } t | j j | ƒ t j	 d ƒ d d ƒt  |  j d d ƒ} t | j d  d  … d  d … f | j ƒ t | j d  d … d  d  … f | j ƒ t | j
 d  | j
 ƒ t | j d  | j ƒ t | j d  d  … d  d … f | j ƒ t  |  j d t d t ƒ} |  j j d	 ƒ } |  j | } | j j | ƒ } t j j | ƒ \ }	 }
 t j |	 ƒ } | d  d  d
 … } |	 | }	 |
 d  d  … | f }
 t | | j ƒ t |	 | j ƒ t t j |
 ƒ t j | j ƒ ƒ t t j | j ƒ t j | j |
 ƒ ƒ ƒ t | j | | ƒ t  |  j d t d t d t ƒ} |  j } | j j | ƒ } t j j | ƒ \ }	 }
 t j |	 ƒ } | d  d  d
 … } |	 | }	 |
 d  d  … | f }
 t | | j ƒ t |	 | j ƒ t t j |
 ƒ t j | j ƒ ƒ t t j | j ƒ t j | j |
 ƒ ƒ ƒ d  S(   Nt	   normalizeid   R3   gñhãˆµøä>R!   i
   i   R$   i    iÿÿÿÿR%   i   (   R   R   R'   R   R6   R   R7   t   TR   t   eyet   rsquareR8   R9   t   meant   linalgt   eight   argsortt   transformed_dataR5   R4   (   R+   R-   t
   pc_no_normt   princompt   weightst   pc_10t   mut   xdmt   xpxt   valt   vect   indR   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_optionsg   sP    	(	()))
"+!	
"c         C  s§  t  j d } t | d t d t ƒ} t } t t j | j ƒ t j | j ƒ ƒ t | j j	 | j
 ƒ | j d ƒ | ƒ t t j | j
 ƒ t j | j j ƒ ƒ t | j j	 | j
 ƒ | j j	 | j j ƒ ƒ t | d  d t d t ƒ} | d  j d ƒ } t } t t j | j ƒ t j | j ƒ ƒ t | j j	 | j
 ƒ | | d  ƒ t t j | j
 ƒ t j | j j ƒ ƒ t | j j	 | j
 ƒ | j j	 | j j ƒ ƒ d  S(   Ng     @@R?   R$   i    i   (   R   t   xoR   R'   R   R   R   R5   R6   R   R7   RC   t   coefR@   R	   (   R+   R   R-   t   refRL   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_against_reference”   s     %)(%$(c      	   C  s  t  j d t ƒ / } t |  j d d ƒ} t t | ƒ d ƒ Wd  QXt  j d t ƒ Q } |  j } | j d ƒ t	 j
 d ƒ } t | d d ƒ} t t | ƒ d ƒ Wd  QXt t t |  j d d ƒt t t |  j d	 d ƒt t t |  j d
 d ƒt t t t	 j t	 j
 d ƒ d
 d ƒd  S(   Nt   recordR!   i,  i   iÈ   R0   t   eigt   unknownt   missingt   tolg       @id   (   iÈ   i   (   iÈ   id   (   t   warningst   catch_warningsR(   R   R   R   t   lenR   R   R   t   onesR   t
   ValueErrort   nan(   R+   t   wR-   R   R   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_warnings_and_errors©   s    	c         C  sâ   t  t j |  j ƒ ƒ } t  |  j ƒ } t | j j | j ƒ | j ƒ  } | j d d ƒ } | j d t ƒ } | j	 ƒ  } | j	 d d ƒ } | j
 d ƒ } t  t j |  j ƒ d d d t ƒt  t j |  j ƒ d d d t ƒd  S(	   NR!   i
   R"   i   i   i   t   glsR$   (   R   t   pdt	   DataFrameR   R   R6   t   valuesR&   R'   R)   t   projectR(   (   R+   R,   R-   t   pc1R.   t   proj(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_pandas¹   s    "c      
   C  s‡  t  t t |  j d t ƒt  t t |  j d t j d d g ƒ ƒ|  j |  j j d ƒ } | | d j d ƒ } t | d d d t d	 t d t ƒ} t | d d d t d	 t ƒ} | | j	 } | d j d ƒ } d | } | t j
 | d j ƒ  ƒ } t | | j ƒ t | | j ƒ t | | j ƒ t | d d d t d	 t d | ƒ} t | | j ƒ t t j | j ƒ t j | j ƒ ƒ d  S(
   NRd   RJ   g      ð?i    g       @R!   i   R$   R%   (   R   R`   R   R   R(   R   t   arrayRC   R'   R4   t   sqrtR   RJ   R   R   R5   R6   (   R+   R   t   pc_glsR-   t   errorst   varRJ   t
   pc_weights(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_gls_and_weightsÇ   s     ($
$c         C  sÅ   t  |  j ƒ } t | j j d |  j j d ƒ t | j j d t t j |  j j ƒ ƒ ƒ t  t	 j
 |  j ƒ ƒ } t | j j d |  j j d ƒ t | j j d t t j |  j j ƒ ƒ ƒ d  S(   Ni   i    (   R   R   R   R6   t   shapeR9   t   minR   Rl   Re   Rf   (   R+   R-   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt	   test_wideÞ   s    !,!c      
   C  sŸ  t  |  j d d ƒ} |  j j d ƒ } |  j | } t j j | j ƒ j | ƒ } | j j | ƒ } t | j	 | | ƒ t  |  j d t
 d d ƒ} t j j | j ƒ j | ƒ } | j j | ƒ } t | j	 | | ƒ t  |  j d t
 d t
 d d ƒ} t j j | j ƒ j |  j ƒ } | j j | ƒ } t | j	 | ƒ t  |  j d d d t ƒ} |  j j d ƒ } |  j | } t j j | j ƒ j | ƒ } | j j | ƒ } t | j	 | | ƒ t  |  j d t
 d d ƒ} t j j | j ƒ j | ƒ } | j j | ƒ } t | j	 | | ƒ t  |  j d t
 d t
 d d d t ƒ} t j j | j ƒ j |  j ƒ } | j j | ƒ } t | j	 | ƒ | j } t t | d ƒ d  S(   NR!   i   i    R$   R%   Rd   i   (   R   R   RC   R   RD   t   pinvR6   R   R   R4   R'   R(   Rh   R   R`   (   R+   R-   RL   t   demean_xRT   t   directRh   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_projectionè   s<    !!'!	t   reasons   Windows 32-bitc         C  sT  |  j  j ƒ  } t j | d  d  d … d  d  d … f <t | d d ƒ} | t j t j t j | ƒ d ƒ ƒ } t | ƒ } t | j	 | j	 ƒ t
 | | j ƒ t | d d ƒ} | d  d  … t j t j t j | ƒ d ƒ ƒ f } t | ƒ } t | j	 | j	 ƒ t
 | | j ƒ t | d d ƒ} | j | j k r?| } n | } t | ƒ } t | j	 | j	 ƒ t
 | | j ƒ t | d	 d
 d d ƒ} t j | ƒ } t j | d d ƒ} | | }	 t j t j |	 d d d ƒƒ }
 |	 |
 } d | | <| | } d } d } x™ | d k r¡t | d	 d
 d t d t ƒ} | j	 | | | <| | } | | } t j t j | d ƒ ƒ t j t j | d ƒ ƒ } | } | d 7} q	W|  j  d } | j	 |
 | } | | | | <t | j | ƒ t
 |  j  |  j ƒ |  j  } t | ƒ } t | d d ƒ} t | j	 | j	 d t ƒt | d d ƒ} t | j	 | j	 d t ƒt | d d ƒ} t | j	 | j	 d t ƒt | d	 d
 ƒ} t | d	 d
 d d ƒ} t | j	 | j	 d t ƒ|  j  j ƒ  } t j | d  d  … d  d  … f <t t t | d d ƒt t t | d d ƒt t t | d d ƒt t t | d d ƒd  S(   Ni   i   RZ   s   drop-rowi   s   drop-coli    s   drop-minR!   i   s   fill-emt   axisi   g        g      ð?gH¯¼šò×j>R$   R%   R3   (   R   t   copyR   Ra   R   t   logical_nott   anyt   isnanR   R4   R   R   R   t   nanmeanRm   R'   t   sumt   _adjusted_dataR   R:   R   R`   (   R+   R   R-   t   x_dropped_rowt
   pc_droppedt   x_dropped_colt   x_dropped_minRZ   RL   Ro   t   sigmat   x_stdt   lastt   deltat   countt   pc_tempt   currentt   diffR4   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_replace_missing  sv    %(4	
"




6	c         C  s  |  j  d } | j d ƒ } | | } t j | d ƒ } | | } t |  j  ƒ } | j d } t j | d ƒ } t j | d ƒ }	 xV t | d ƒ D]D }
 | | j	 |
 d t
 d t
 ƒ} d t j | d ƒ |	 | |
 <q• Wt | | j ƒ t |  j  d t
 ƒ} t j | d ƒ }	 xV t | d ƒ D]D }
 | | j	 |
 d t
 d t
 ƒ} d t j | d ƒ |	 | |
 <q&Wt | | j ƒ t |  j  d t
 d	 t
 ƒ} t j | d ƒ }	 xV t | d ƒ D]D }
 | | j	 |
 d t
 d t
 ƒ} d t j | d ƒ |	 | |
 <q½Wt | | j ƒ d  S(
   Ng        i    i   i   t	   transformt   unweightg      ð?R$   R%   (   R   RC   R   t   stdR   Rs   t   zerosR   t   rangeRh   R'   R   RB   (   R+   R   RL   t   x_demeanR’   Rˆ   R-   t   nvarRB   t   tsst   iRo   (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_rsquareY  s2    

###c         C  sf  |  j  j ƒ  } t j | d  d  d … d  d  d … f <t | d d d d ƒ} t j | ƒ } t | d d d d ƒ} t | j | j ƒ t | j	 | j	 ƒ t t j |  j  j ƒ  ƒ d d ƒ} t
 | j t | j ƒ ƒ sÞ t ‚ t
 | j t | j ƒ ƒ sÿ t ‚ t
 | j t | j ƒ ƒ s t ‚ t
 | j t | j ƒ ƒ sAt ‚ |  j  j ƒ  } t j | d  d  d … d  d  d … f <t j | ƒ } t | d d ƒ} t | d d ƒ} t | j | j ƒ t | j	 | j	 ƒ t | d d ƒ} t | d d ƒ} t | j | j ƒ t | j	 | j	 ƒ t | d d	 ƒ} t | d d	 ƒ} t | j | j ƒ t | j	 | j	 ƒ d  S(
   Ni   i   R!   i   RZ   s   fill-ems   drop-rows   drop-cols   drop-min(   R   R|   R   Ra   R   Re   Rf   R   R7   R6   t
   isinstancet   typet   AssertionErrorR   R8   R9   (   R+   R   R-   t   pc_dft   pc_df_nomissingt   x_df(    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   test_missing_dataframew  s6    %$!!!!%(   t   __name__t
   __module__t   classmethodR    t   pytestt   markt   smoket
   matplotlibR/   R>   RR   RV   Rc   Rk   Rr   t   slowRu   Ry   t   skipifR   R   R™   R    (    (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyR
      s   		$	-			
	'!J	(   t
   __future__R    R   t   statsmodels.compat.platformR   R\   t   numpyR   t   pandasRe   R¤   t   numpy.testingR   R   R   t   statsmodels.multivariate.pcaR   t.   statsmodels.multivariate.tests.results.datamlwR   R   R	   R:   t   objectR
   (    (    (    sF   lib/python2.7/site-packages/statsmodels/multivariate/tests/test_pca.pyt   <module>   s   