
    M/Ph@                         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mZ d dlmZmZmZ d dlmZ dZ G d d	          Zd
 Zd Zd ZdS )    )PLATFORM_WIN32N)assert_allcloseassert_equalassert_raises)PCApca)data	princomp1	princomp2)EstimationWarningh㈵>c                   p   e Zd 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                            ed          d             Zd Zej        j        d             Zd Zd ZdS )TestPCAc                     t           j                                        }|                    d           d}d}d}d}|j        } |||f          } |||f          }|                    |||f          |z  }	|                    |	          |z   | _        | j        dz   | _        || _	        d}d}d}d}|j        } |||f          } |||f          }|                    |||f          |z  }	|                    |	          |z   | _
        d S )	Ni     d         )size        ,  )nprandomRandomStateseedstandard_normalstandard_gammadotxx_copyrsx_wide)
clsr!   kntlamnorm_rngefbs
             g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/multivariate/tests/test_pca.pysetup_classzTestPCA.setup_class   s,   Y""$$
%HaVHaVcA//#5a1US[
%HaVHaVcA//#5UU1XX\


    c                    t          | j                  }|                                }|                    d          }|                    d          }|                    d          }|                                }|                    d          }|                                 t          | j        d          }|                                 t          | j        dd	          }|                                 t          | j        d
d          }d|                                v sJ t          | j        |j                   d S )N
   ncompF	log_scaleT)
cumulative   standardizer8   demeanr   r2   glsGLS)r   r   
plot_screeplot_rsquare__repr__r   r	   )selfclose_figurespcfigs       r,   test_smoke_plot_and_reprz TestPCA.test_smoke_plot_and_repr/   s    [[mmoomm"m%%mmem,,mmtm,,ooooAo&&
U+++
U5999
qd+++%%%%TVRW%%%%%r.   c           	         t          | j                  }t          | j        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          }t          | j        dd          }t          t	          j        |j                  t	          j        |j                  t                     t          t	          j        |j                  t	          j        |j                  t                     t          |j        |j        t                     t          t	          j        |j	                  t	          j        |j	                  t                     t          | j        |j                   t          | j        |j                   t          | j        |j                   d S )Nsvdmethodr   )rI   r2   nipalsatol)r   r   r   
projectionr   absfactorscoeff	eigenvals	eigenvecs	DECIMAL_5r   r	   )rA   pc_eigpc_svd	pc_nipalss       r,   test_eig_svd_equivzTestPCA.test_eig_svd_equivD   s   TVTVE***)6+<===v~aaa!e455v~aaa!e455	7 	7 	7v|BQBE233v|BQBE233	5 	5 	5((	* 	* 	*v/2A2677v/2A2677	9 	9 	9 TVE333xq999	y011v~..&	( 	( 	( 	( 	y//v|,,&	( 	( 	( 	( 		+(&	( 	( 	( 	( 	y233v/00&	( 	( 	( 	( 	TVV[)))TVV[)))TVY^,,,,,r.   c                    t          | j                  }t          | j        d          }t          |j                            |j                  |j                            |j                             |j        }t          |j                            |          t          j        d          d           |j        }t          |j                            |          t          j        d          d           t          | j        d          }t          |j        d d d df         |j                   t          |j        d dd d f         |j                   t          |j	        d d         |j	                   t          |j
        d d         |j
                   t          |j        d d d df         |j                   t          | j        dd	          }| j                            d
          }| j        |z
  }|j                            |          }t          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        |                    |
                               t          |j        ||z              t          | j        ddd          }| j        }|j                            |          }t          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        |                    |
                               d S )NF)	normalizer   r   rK   r0   r1      )r8   rY   r   )r8   r:   rY   )r   r   r   rO   r   rP   Tr   eyersquarerQ   rR   meanlinalgeighargsorttransformed_datarN   rM   )rA   rC   
pc_no_normprincompweightspc_10muxdmxpxvalvecindr   s                r,   test_optionszTestPCA.test_optionsh   s   [[5111

rx00"*..z/?@@	B 	B 	B:
x00"&++DIIII"	g..s$GGGGDF"%%%
111crc6*EM:::"aaa(%+666
9V9-u}===SbS)5?;;;QQQV,eo>>>Ue<<<V[[^^frkeiinn9>>#&&Sjoo$$B$i#h!!!S&kR0111R\***sRVBL%9%9:::rz**BF3773<<,@,@AAAsRx000U5EJJJFcggajj9>>#&&Sjoo$$B$i#h!!!S&k2.///R\***sRVBL%9%9:::rz**BF155::,>,>?????r.   c                    t           j        dz  }t          |dd          }t          }t	          t          j        |j                  t          j        |j                             t	          |j                            |j	                  |
                    d          z   |           t	          t          j        |j	                  t          j        |j        j                             t	          |j                            |j	                  |j                            |j        j                             t          |d d         dd          }|d d         
                    d          }t          }t	          t          j        |j                  t          j        |j                             t	          |j                            |j	                  |z   |d d                    t	          t          j        |j	                  t          j        |j        j                             t	          |j                            |j	                  |j                            |j        j                             d S )Ng     @@F)rY   r8   r      )r	   xor   r
   r   r   rN   rO   r   rP   r_   coefr\   r   )rA   r   rC   refrh   s        r,   test_against_referencezTestPCA.test_against_reference   s   Gfe777rz**BF3;,?,?@@@
rx00166!99<a@@@rx(("&*<*<===
rx00
33	5 	5 	5 3B35e<<<ssV[[^^rz**BF3;,?,?@@@
rx0025q"v>>>rx(("&*<*<===
rx00
33	5 	5 	5 	5 	5r.   c                 "   t          j        d          5 }t          | j        d          }t	          t          |          d           d d d            n# 1 swxY w Y   t          j        d          5 }| j        }|                    d          t          j	        d          z  }t          |d	          }t	          t          |          d           d d d            n# 1 swxY w Y   t          t          t          | j        d
	           t          t          t          | j        d
           t          t          t          | j        d           t          t          t          t          j        t          j	        d          z  d           d S )NT)recordr   r1      )r   rw   r   eigrH   unknownmissing       @)tol)r   r   )warningscatch_warningsr   r   r   lenr!   r   r   onesr   
ValueErrornan)rA   wrC   r!   r   s        r,   test_warnings_and_errorsz TestPCA.test_warnings_and_errors   s   $D111 	$QTV3'''BQ###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ $D111 	$QB""8,,rws||;AQu%%%BQ###		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	j#tvi@@@@j#tvyAAAAj#tv37777j#rv
0C0C'CMMMMMMs$   4AAA6A C""C&)C&c                 Z   t          t          j        | j                            }t          | j                  }t	          |j        j        |j                   |                                }|                    d          }|                    d          }|                                }|                    d          }|	                    d          }t          t          j        | j                  dd	           t          t          j        | j                  dd
           d S )Nr0   r1   Fr3   r6   r      Tr;   )r2   r8   )
r   pd	DataFramer   r   rO   valuesr>   r?   project)rA   rB   rC   pc1rD   projs         r,   test_pandaszTestPCA.test_pandas   s    df%%&&$&kk
)3;777mmoomm"m%%mmem,,ooooAo&&zz!}}BL  t4444BL  u======r.   c           	      p   t          t          t          | j        d           t          t          t          | j        t	          j        ddg                     | j        | j                            d          z
  }||dz                      d          z  }t          |dddd	          }t          |ddd
          }||j        z
  }|dz                      d          }d|z  }|t	          j        |dz                                            z  }t          ||j
                   t          ||j                   t          ||j                   t          |ddd|          }t          ||j
                   t          t	          j        |j                  t	          j        |j                             d S )NT)r<         ?)rf   r   r|   rw   F)r2   r8   r:   r<   r2   r8   r:   )r2   r8   r:   rf   )r   r   r   r   r   arrayr_   rM   sqrtr   rf   r   r	   rN   rO   )rA   r   pc_glsrC   errorsvarrf   
pc_weightss           r,   test_gls_and_weightszTestPCA.test_gls_and_weights   s   j#tv48888j#tvrxc
7K7KLLLL Vdfkk!nn$c"""QaU5dKKK!u===R]"}""1%%)BGW^$9$9$;$;<<<000Q$$$Q   !ugVVV
!3444z122BF6>4J4JKKKKKr.   c                 ^   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 )Nrw   r   )r   r"   r   rO   shaperR   minr   r   r   r   )rA   rC   s     r,   	test_widezTestPCA.test_wide   s    RZ%a($+*;A*>???R\'*C9J0K0K,L,LMMMdk**++RZ%a($+*;A*>???R\'*C9J0K0K,L,LMMMMMr.   c                    t          | j        d          }| j                            d          }| j        |z
  }t          j                            |j                                      |          }|j                            |          }t          |j	        ||z              t          | j        dd          }t          j                            |j                                      |          }|j                            |          }t          |j	        ||z              t          | j        ddd          }t          j                            |j                                      | j                  }|j                            |          }t          |j	        |           t          | j        dd          }| j                            d          }| j        |z
  }t          j                            |j                                      |          }|j                            |          }t          |j	        ||z              t          | j        dd          }t          j                            |j                                      |          }|j                            |          }t          |j	        ||z              t          | j        dddd	          }t          j                            |j                                      | j                  }|j                            |          }t          |j	        |           |j
        }t          t          |d
           d S )Nr6   r1   r   F)r8   r2   )r8   r:   r2   Tr;   )r8   r:   r2   r<      )r   r   r_   r   r`   pinvrO   r   r   rM   r   r   r   )rA   rC   rh   demean_xrr   directr   s          r,   test_projectionzTestPCA.test_projection   s   q!!!V[[^^6B;y~~bj))--h77%%v{333U!444y~~bj))--h77%%v{333U5BBBy~~bj))--df55%%v...qd+++V[[^^6B;y~~bj))--h77%%v{333U!444y~~bj))--h77%%v{333U5tLLLy~~bj))--df55%%v... *j'1-----r.   zWindows 32-bit)reasonc           	      d	   | j                                         }t          j        |d d dd d df<   t	          |d          }|t          j        t          j        t          j        |          d                             }t	          |          }t          |j	        |j	                   t          ||j                   t	          |d          }|d d t          j        t          j        t          j        |          d                    f         }t	          |          }t          |j	        |j	                   t          ||j                   t	          |d          }|j        |j        k    r|}n|}t	          |          }t          |j	        |j	                   t          ||j                   t	          |d	d
          }t          j        |          }t          j        |d          }||z
  }	t          j        t          j        |	dz  d                    }
|	|
z  }d||<   ||         }d}d}|dk    rt	          |d	dd          }|j	        |         ||<   ||         }||z
  }t          j        t          j        |dz                      t          j        t          j        |dz                      z  }|}|dz  }|dk    | j         dz   }|j	        |
z  |z   }||         ||<   t          |j        |           t          | j         | j                   | j         }t	          |          }t	          |d          }t          |j	        |j	        t$                     t	          |d          }t          |j	        |j	        t$                     t	          |d          }t          |j	        |j	        t$                     t	          |d	          }t	          |d	d
          }t          |j	        |j	        t$                     | j                                         }t          j        |d d d d f<   t'          t(          t          |d           t'          t(          t          |d           t'          t(          t          |d           t'          t(          t          |d
           d S )Nr6      drop-rowrz   rw   drop-colr   drop-minr   fill-emr2   r{   )axisr   r   r   gHj>Fr   rK   r1   )r   copyr   r   r   logical_notanyisnanr   rM   r   r	   r   nanmeanr   sum_adjusted_datar    rS   r   r   )rA   r   rC   x_dropped_row
pc_droppedx_dropped_colx_dropped_minr{   rh   r   sigmax_stdlastdeltacountpc_tempcurrentdiffrM   s                      r,   test_replace_missingzTestPCA.test_replace_missing  s?   FKKMMf##A#sss(J'''".Q)?)?@@A''
z'<===Q   J'''!!!R^BF28A;;,B,BCCCD''
z'<===Q   J''' 222)MM)M''
z'<===Q   !Y///(1++Z"""R
6Q;Q77788gW~dll%qeEJJJG$/8E'NGnGT>DGBF419--..19M9M1N1NNEDQJE dll FSL'%/"4
('
)1---TVT[)))FVVJ///
z'<9MMMMJ///
z'<9MMMMJ///
z'<9MMMM!___!Y777
z'<9MMMM FKKMM&!!!QQQ$j#q*====j#q*====j#q*====j#q)<<<<<<r.   c                 4   | j         dz   }|                    d          }||z
  }t          j        |d          }||z  }t	          | j                   }|j        d         }t          j        |dz             }t          j        |dz            }	t          |dz             D ]=}
||	                    |
dd          z
  }dt          j        |dz            |	z  z
  ||
<   >t          ||j                   t	          | j         d          }t          j        |dz            }	t          |dz             D ]=}
||	                    |
dd          z
  }dt          j        |dz            |	z  z
  ||
<   >t          ||j                   t	          | j         dd	          }t          j        |dz            }	t          |dz             D ]=}
||	                    |
dd          z
  }dt          j        |dz            |	z  z
  ||
<   >t          ||j                   d S )
Nr   r   rw   r   F)	transformunweightr   r7   r9   )r   r_   r   stdr   r   zerosr   ranger   r   r^   )rA   r   rh   x_demeanr   r   rC   nvarr^   tssir   s               r,   test_rsquarezTestPCA.test_rsquareZ  s   FSLVVAYYr6fQll3[[wqz(4!8$$fUaZ  tax 	9 	9ARZZUUZKKKFrvfk22S88GAJJ,,,U+++fX]##tax 	9 	9A

1
 N NNFrvfk22S88GAJJ,,,U5999fQ!Vnntax 	9 	9AAGGGFrvfk22S88GAJJ,,,,,r.   c                    | j                                         }t          j        |d d dd d df<   t	          |dd          }t          j        |          }t	          |dd          }t          |j        |j                   t          |j	        |j	                   t	          t          j        | j                                                   d          }t          |j        t          |j                            sJ t          |j        t          |j                            sJ t          |j        t          |j                            sJ t          |j        t          |j                            sJ | j                                         }t          j        |d d dd d df<   t          j        |          }t	          |d          }t	          |d          }t          |j        |j                   t          |j	        |j	                   t	          |d	          }t	          |d	          }t          |j        |j                   t          |j	        |j	                   t	          |d
          }t	          |d
          }t          |j        |j                   t          |j	        |j	                   d S )Nr6   r   r   r   r   r1   r   rz   r   r   )r   r   r   r   r   r   r   r   rP   rO   
isinstancetyper	   rQ   rR   )rA   r   rC   pc_dfpc_df_nomissingx_dfs         r,   test_missing_dataframezTestPCA.test_missing_dataframex  s\   FKKMMf##A#sss(!Y///LOOAQ	222%+...
EM222bl46;;==99CCC%+tO,A'B'BCCCCC%*d?+?&@&@AAAAA%/40I+J+JKKKKK%/40I+J+JKKKKKFKKMMf##A#sss(|AJ'''D*---%+...
EM222J'''D*---%+...
EM222J'''D*---%+...
EM22222r.   c                     | j                                         }t          t          |          j        t          |          d                    d S )Nr   )r   r   r   r   rO   r   )rA   r   s     r,   test_equivalencezTestPCA.test_equivalence  s9    FKKMMAAq	22222r.   c                     | j                                         }t          |d          j        }t          |          j        }t	          ||           d S )NT)svd_full_matrices)r   r   r   rO   r   )rA   r   svd_full_matrices_truesvd_full_matrices_falses       r,   test_equivalence_full_matricesz&TestPCA.test_equivalence_full_matrices  sM    FKKMM!$Q$!?!?!?!G"%a&&..0GHHHHHr.   N)__name__
__module____qualname__classmethodr-   pytestmarksmoke
matplotlibrE   rW   rn   rt   r   r   r   slowr   r   skipifr   r   r   r   r   r    r.   r,   r   r      s       " " ["6 [[& &  &&"- "- "-H+@ +@ +@Z5 5 5*N N N  [> > >L L L. [N N N%. %. %.N [/?@@G= G= A@G=R- - -< [ 3  3  3D3 3 3I I I I Ir.   r   c                      t          j        d          } t           j        | d<   t          j        t
          d          5  t          |            d d d            d S # 1 swxY w Y   d S )Nr   2   )r   r   zdata contains non-finite valuesmatch)r   emptyr   r   raisesr   r   )r	   s    r,   test_missingr     s    8IDDJ	z)J	K	K	K  D			                 s   AA #A c                 z   t           j                            d          }t           j        |dd df<   t	          j        t                    5  t          |dd           d d d            n# 1 swxY w Y   t          |d          }t          |j	        j
                  t          |j
                  d	z
  k    sJ d S )
Nr   r   r6   r   r   r   rz   rw   )r   r   r   r   r   r   r   r   maxrO   r   )reset_randomstater	   ps      r,   test_too_many_missingr     s    9$$Y//D6DCRCL	z	"	" / /D:..../ / / / / / / / / / / / / / /D*%%%Aqy3tz??Q#6666666s   A++A/2A/c                 ^   t           j                            d          }|d d d df         d|d d dd f         z  z   |d d dd f<   t          j        t
          d          5  t          |dd          j        }d d d            n# 1 swxY w Y   |j        |j        d	         dfk    sJ d S )
N)i  r   rw   g{Gz?z#Many series are being down weightedr   r   Tr;   r   )	r   r   r   r   warnsr   r   rO   r   )r   r	   rO   s      r,   test_gls_warningr     s    9$$Z00Dqqq"1"u+d111abb5k 11DABBK	'/T	U	U	U 7 7d!...67 7 7 7 7 7 7 7 7 7 7 7 7 7 7=TZ]A.......s   $BBB)statsmodels.compat.platformr   r~   numpyr   pandasr   r   numpy.testingr   r   r   statsmodels.multivariate.pcar   r   .statsmodels.multivariate.tests.results.datamlwr	   r
   r   statsmodels.tools.sm_exceptionsr   rS   r   r   r   r   r   r.   r,   <module>r      s:   6 6 6 6 6 6           F F F F F F F F F F 1 1 1 1 1 1 1 1G G G G G G G G G G = = = = = =	QI QI QI QI QI QI QI QIh  7 7 7/ / / / /r.   