pca

itergs

##set_pca

Description

L'action `itergs` de l'ensemble d'actions extrait les composantes principales (ACP/PCATechnique de réduction de dimension transformant des variables corrélées en nouvelles composantes indépendantes. Elle simplifie les données tout en préservant l'essentiel de leur variance initiale.) d'un jeu de données en utilisant la méthode itérative basée sur l'orthogonalisation de Gram-SchmidtAlgorithme transformant une famille de vecteurs en une base orthogonale ou orthonormée. Il élimine les corrélations en projetant chaque vecteur sur l'espace orthogonal aux précédents.. C'est une méthode particulièrement robuste et numériquement stable, idéale pour les grands jeux de données où l'on ne souhaite extraire que les toutes premières composantes principales, ce qui évite de calculer la matrice de covariance complète. Un peu comme si vous cherchiez juste les deux ou trois étoiles les plus brillantes d'une galaxie sans avoir à cartographier tout l'univers !

Syntaxe Officielle
proc cas;
pca.itergs <result=results> <status=rc> /
attributes={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, ...}
code={casOut={caslib="string", name="table-name", ...}, comment=TRUE|FALSE, ...}
display={names={"string-1", ...}, ...}
epsilon=double
groupbyLimit=64-bit-integer
inputs={{"name"="variable-name", ...}, ...}
maxIter=integer
n=integer
noCenter=TRUE|FALSE
noScale=TRUE|FALSE
output={casOut={name="table-name", caslib="string", ...}, copyVars={"var-1", ...}, score="string", ...}
outputTables={names={"string-1", ...}, ...}
prefix="string"
store={name="table-name", caslib="string", ...}
table={name="table-name", caslib="string", ...}
varDef="DF"|"N"|"WDF"|"WEIGHT"|"WGT";
run;
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée contenant les données à analyser.
inputs Liste les variables numériques à analyser. Si omis, toutes les variables numériques non spécifiées par ailleurs sont utilisées.
n Le nombre de composantes principales à calculer. S'il est défini sur 0 (valeur par défaut), toutes les composantes possibles sont extraites.
epsilon Le critère de convergence numérique pour la méthode itérative (par défaut 1E-12).
maxIter Nombre maximum d'itérations autorisées pour l'algorithme (par défaut 500).
noCenter Si défini sur True, désactive le centrage des variables (soustraction de la moyenne) avant l'analyse.
noScale Si défini sur True, désactive la réduction des variables (division par l'écart-type) avant l'analyse.
output Génère une table de sortie contenant les statistiques au niveau de l'observation, incluant typiquement les scores des composantes principales.
store Sauvegarde les informations du modèle ajusté dans une table binaire (analytique store ou astore) pour un scoring ultérieur sur de nouvelles données.
code Génère et sauvegarde le code SAS DATA Step permettant de recalculer les scores prédits.
varDef Spécifie le diviseur (ex: 'DF', 'N') à utiliser dans le calcul des variances et écarts-types.

Préparation des données

Chargement des données de test (Iris de Fisher)

Nous allons utiliser le célèbre jeu de données Iris pour illustrer notre ACP. Ces données sont parfaites pour réduire la dimensionnalité de 4 variables morphologiques vers 2 composantes principales.

1PROC CAS;
2 SESSION casauto;
3 /* Chargement du dataset SAShelp.iris dans CAS */
4 TABLE.loadTable / caslib="casuser" path="iris.sashdat" casOut={name="iris", caslib="casuser", replace=true};
5RUN;
6QUIT;

Exemples d'utilisation

ACP basique avec extraction de 2 composantes

Une analyse en composantes principales simple utilisant l'approche itérative Gram-Schmidt pour extraire uniquement les 2 axes principaux, avec personnalisation du préfixe.

1PROC CAS;
2 pca.itergs /
3 TABLE={name="iris", caslib="casuser"}
4 inputs={"SepalLength", "SepalWidth", "PetalLength", "PetalWidth"}
5 n=2
6 prefix="PrinComp_"
7 outputTables={names={"Eigenvalues", "ModelInfo"}};
8RUN;
9QUIT;
Résultat Attendu :
Affiche les valeurs propres et les informations du modèle pour les deux premières composantes calculées, dont les noms commenceront par 'PrinComp_'.
ACP itérative complète avec table de scores, sauvegarde Astore et code DATA Step

Ceci est le 'plat de résistance'. Il effectue l'ACP en modifiant la tolérance de convergence, produit une table contenant les scores projetés, sauvegarde le modèle sous forme de table binaire (astore) pour un déploiement fluide, et génère même le code DATA step associé. Le tout par groupe d'espèces !

1PROC CAS;
2 pca.itergs /
3 TABLE={name="iris", caslib="casuser", groupBy={"Species"}}
4 inputs={"SepalLength", "SepalWidth", "PetalLength", "PetalWidth"}
5 n=2
6 epsilon=1E-10
7 maxIter=1000
8 varDef="DF"
9 noScale=false
10 noCenter=false
11 OUTPUT={casOut={name="iris_scores", caslib="casuser", replace=true}, copyVars={"Species"}, score="Score_"}
12 store={name="iris_pca_model", caslib="casuser", replace=true}
13 code={casOut={name="iris_pca_code", caslib="casuser", replace=true}}
14 outputTables={names={"Eigenvectors"="Vecteurs_Propres", "Variance"="Var_Expliquee"}, replace=true};
15RUN;
16QUIT;
Résultat Attendu :
Crée la table 'iris_scores' (avec les variables d'origine copiées et les scores ajoutés), enregistre le modèle exécutable dans 'iris_pca_model' et le code source dans 'iris_pca_code'. L'action génère également des tables CAS personnalisées pour les vecteurs propres et la variance expliquée, le tout partitionné par 'Species'.