MTX_PCA - Análisis de componentes principales
Este procedimiento realiza un Análisis de Componentes Principales (ACP) utilizando los datos almacenados en una matriz.
Uso
- MTX_PCA modelName,dataMatrixName,forceSufficientStats,centerData,scaleData,saveScores )
- Parámetros
- modelName
- El nombre del modelo creado.
- dataMatrixName
- El nombre de la matriz que contiene los datos.
- forceSufficientStats
- Especifica si el PCA debe basarse en una matriz de covarianza aunque se pueda realizar la SVD.
- centerData
- Especifica si el modelo debe incluir el centrado de datos, es decir, la sustracción del estimador de la media.
- scaleData
- Especifica si el modelo debe incluir el escalado de datos, que es la división por un estimador de desviación estándar distinto de cero. Cuando se realiza el escalado de datos, el modelo PCA resultante es equivalente a un modelo basado en la matriz de correlaciones.
- saveScores
- Especifica si se deben guardar las puntuaciones PCA de una observación individual.
Detalles
Este procedimiento construye un modelo PCA de los datos y proporciona una transformación correspondiente en componentes principales, que puede aplicarse utilizando MTX_PCA_APPLY. Los datos de entrada deben proporcionarse como objetos de matriz de base de datos, con las observaciones en filas y los atributos en columnas.
El PCA puede construirse utilizando dos estrategias: La descomposición SVD, que es más precisa pero a costa de la velocidad y la memoria, o encontrando los vectores propios del estimador insesgado de la matriz de covarianza. Si el parámetro forceSufficientStats no es TRUE, se utiliza la mejor estrategia, es decir, la que proporciona la solución más precisa en función del tamaño de los datos y la disponibilidad de memoria. En función de los parámetros especificados, la matriz de datos puede centrarse y escalarse. En ese caso, se calculan los parámetros correspondientes y los estimadores de la media y la varianza, que pasan a formar parte del modelo. Cuando se incluyen en el modelo, el centrado y el escalado también se realizan durante el paso de aplicación.
El centrado de los datos (asegurar que la media de cada atributo es igual a 0) es un supuesto del método PCA -no cumplirlo suele provocar una grave degradación del modelo. El escalado de datos (asegurando que la varianza de cada atributo es igual a 1) suele proporcionar una mejor aproximación de los datos en caso de presencia de atributos que difieren en órdenes de magnitud. Es equivalente a realizar el ACP utilizando la correlación en lugar de la matriz de covarianza.
- {prefix}_PCA_ATTMEAN: vector de filas que contiene los valores medios de los atributos (cuando centerData es TRUE)
- {prefix}_PCA_ATTSD: vector de filas que contiene las desviaciones estándar de los atributos (cuando scaleData es TRUE)
- {prefix}_PCA_ATTSD_DIV: vector de filas que contiene los recíprocos de las desviaciones estándar distintas de cero de los atributos o valor 1 (cuando scaleData es TRUE)
- prefix}_PCA_SDEV: vector de filas que contiene las desviaciones estándar de los componentes principales
- {prefix}_PCA: la matriz de cargas (una matriz cuyas columnas contienen los vectores propios de la matriz de covarianza)
- {prefix}_PCA_SCORES: la matriz de puntuaciones que contiene las proyecciones de observaciones individuales a componentes principales (cuando saveScores es TRUE)
Ejemplos
call nzm..shape('1,2,3,4,5,6,7,8,9',1,3,'PCA_TEST');
call nzm..shape('9,8,7,6,5,4,3,2,1',10,1,'PCA_TEST_SOURCE_PRE');
---expected value is 0.0
call nzm..SCALAR_OPERATION('PCA_TEST_SOURCE_PRE',
'PCA_TEST_SOURCE', '-', 0.5);
call nzm..gemm('PCA_TEST_SOURCE','PCA_TEST', 'PCA_TEST_VALS');
call nzm..mtx_pca('PCA_TEST_MOD','PCA_TEST_VALS',FALSE,FALSE,
FALSE, TRUE);
call nzm..list_matrices();
std dev in each direction (in this example real value of all
components other than the first one should be 0)
call nzm..print('PCA_TEST_MOD_PCA_SDEV');
call nzm..print('PCA_TEST_MOD_PCA_SCORES');
---projecting on the original value (first column)
call nzm..gemm_large('PCA_TEST_VALS',FALSE,'PCA_TEST_MOD_PCA',
FALSE,'PCA_TEST_PROJ');
resulting value (first column of PCA_TEST_PROJ) is
proportional to original one (PCA_TEST_VALS):
PCA_TEST_PROJ[1,] ~~PCA_TEST_SOURCE*sqrt(nzm..red_ssq('PCA_TEST'))
call nzm..delete_matrix_like('PCA\_TEST%');
SHAPE
-------
t
(1 row)
SHAPE
-------
t
(1 row)
SCALAR_OPERATION
------------------
t
(1 row)
GEMM
------
t
(1 row)
MTX_PCA
---------
t
(1 row)
LIST_MATRICES
----------------------------------------------------
PCA_TEST
PCA_TEST_MOD_PCA
PCA_TEST_MOD_PCA_SCORES
PCA_TEST_MOD_PCA_SDEV
PCA_TEST_SOURCE
PCA_TEST_SOURCE_PRE
PCA_TEST_VALS
(1 row)
PRINT
----------------------------------------------------
-- matrix: PCA_TEST_MOD_PCA_SDEV --
22.118368434905
2.4603199788269e-16
9.9446202776076e-17
(1 row)
PRINT
-----------------------------------------------------------------------------------------
-- matrix: PCA_TEST_MOD_PCA_SCORES --
31.804087787578, -1.4567015001103e-16, 1.2617124776816e-16
-28.062430400805, -4.1645192033268e-17, -2.6226789760277e-16
-24.320773014031, -3.6092499762165e-17, 3.1261282628732e-17
-20.579115627257, -3.0539807491063e-17, 2.6451854532004e-17
-16.837458240483, -2.4987115219961e-17, 2.1642426435276e-17
-13.095800853709, 7.1866157069922e-16, 1.6832998338548e-17
-9.3541434669349, -1.3881730677756e-17, 1.202357024182e-17
-5.6124860801609, -8.3290384066535e-18, 7.2141421450919e-18
-1.870828693387, -2.7763461355512e-18, 2.404714048364e-18
-31.804087787578, -4.719788430437e-17, 4.0880138822188e-17
(1 row)
GEMM_LARGE
------------
t
(1 row)
DELETE_MATRIX_LIKE
--------------------
t
(1 row)