La acción fastIca implementa el algoritmo FastICA para realizar análisis de componentes independientes (ICA). Este método es fundamental para la separación ciega de fuentes (Blind Source Separation), permitiendo descomponer señales multivariantes en componentes aditivos que son estadísticamente independientes y no gaussianos. Es ampliamente utilizado en procesamiento de señales, eliminación de artefactos en datos biomédicos y extracción de características. La acción permite elegir entre algoritmos de deflación o simétricos, especificar funciones de no linealidad para aproximar la negentropía, y opciones de pre-blanqueo (whitening) de datos.
| Parámetro | Descripción |
|---|---|
| table | Especifica la tabla de entrada que contiene las variables numéricas mezcladas. Admite subcláusulas como 'caslib', 'name' y 'where'. |
| inputs | Lista de variables numéricas de la tabla de entrada que se utilizarán para el análisis ICA. Si no se especifica, se usan todas las numéricas. |
| n | Número de componentes independientes a extraer. Si se establece en 0 (predeterminado), se calcula un número de componentes igual al número de variables de entrada. |
| method | Define el algoritmo de extracción. La subopción 'name' acepta 'DEFLATION' (extracción uno a uno) o 'SYMMETRIC' (extracción paralela). También configura 'maxIter' y 'tolerance' para la convergencia. |
| gFunction | Función no cuadrática utilizada en la aproximación de la negentropía. Las opciones son 'LOGCOSH' (predeterminado, más robusto) o 'EXP' (exponencial). |
| seed | Valor entero para la semilla de generación de números aleatorios, utilizado para inicializar la matriz de pesos. Garantiza reproducibilidad. |
| noCenter | Si es True, suprime el paso de centrado (restar la media) de las variables antes del análisis. Por defecto es False (se centran). |
| noScale | Si es True, suprime el escalado de las variables a varianza unitaria. Por defecto es False. |
| eigenThreshold | Valor entre 0 y 1. Especifica el umbral de proporción de varianza explicada por los valores propios durante el paso de blanqueo. Los valores menores se descartan. |
| output | Configura la tabla de salida con los resultados a nivel de observación (puntuaciones de componentes). Incluye opciones para nombrar componentes ('component') y variables blanqueadas ('white'). |
Genera una tabla con tres señales mezcladas linealmente: una onda sinusoidal, una onda de diente de sierra y ruido aleatorio.
| 1 | |
| 2 | DATA casuser.mixed_signals; |
| 3 | keep t x1 x2 x3; |
| 4 | DO t = 0 to 200 BY 0.1; |
| 5 | s1 = sin(t); |
| 6 | s2 = mod(t, 5) - 2.5; |
| 7 | S3 = rannor(12345); |
| 8 | x1 = 0.5*s1 + 0.3*s2 + 0.2*S3; |
| 9 | x2 = 0.2*s1 + 0.7*s2 + 0.1*S3; |
| 10 | x3 = 0.3*s1 + 0.1*s2 + 0.6*S3; |
| 11 | OUTPUT; |
| 12 | END; |
| 13 | |
| 14 | RUN; |
| 15 |
Ejecuta fastIca con la configuración predeterminada para extraer 3 componentes independientes.
| 1 | |
| 2 | PROC CAS; |
| 3 | ica.fastIca TABLE={name="mixed_signals", caslib="casuser"} inputs={"x1", "x2", "x3"} n=3; |
| 4 | |
| 5 | RUN; |
| 6 |
Configuración avanzada utilizando el método simétrico, función LogCosh, semilla fija y guardando los componentes calculados en una nueva tabla.
| 1 | |
| 2 | PROC CAS; |
| 3 | ica.fastIca TABLE={name="mixed_signals", caslib="casuser"} inputs={"x1", "x2", "x3"} n=3 method={name="SYMMETRIC", maxIter=1000, tolerance=1e-6} gFunction="LOGCOSH" seed=9876 OUTPUT={casOut={name="ica_scores", replace=true}, component="IndComp", white="WhitenedVar"} display={names={"Eigenvalues", "DemixingMatrix"}}; |
| 4 | |
| 5 | RUN; |
| 6 |