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

El procedimiento almacenado MTX_PCA tiene la siguiente sintaxis:
MTX_PCA modelName,dataMatrixName,forceSufficientStats,centerData,scaleData,saveScores )
Parámetros
modelName
El nombre del modelo creado.
Tipo NVARCHAR(ANY)
dataMatrixName
El nombre de la matriz que contiene los datos.
Tipo NVARCHAR(ANY)
forceSufficientStats
Especifica si el PCA debe basarse en una matriz de covarianza aunque se pueda realizar la SVD.
Tipo: BOOLEAN
Valor predeterminado: FALSE
centerData
Especifica si el modelo debe incluir el centrado de datos, es decir, la sustracción del estimador de la media.
Tipo: BOOLEAN
Valor predeterminado: true
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.
Tipo: BOOLEAN
Valor predeterminado: TRUE
saveScores
Especifica si se deben guardar las puntuaciones PCA de una observación individual.
Tipo: BOOLEAN
Valor predeterminado: FALSE
Devuelve
BOOLEAN TRUE siempre.

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.

Para expresar el modelo que se está creando, el procedimiento crea un conjunto de matrices, utilizando el parámetro modelName como prefijo para el nombre de la matriz dada. El conjunto está formado por las siguientes matrices:
  • {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)