pca

nipals

##set_pca

Description

Cette action extrait les composantes principales en utilisant la méthode NIPALS (Nonlinear Iterative Partial Least SquaresMéthode de régression itérative qui réduit la dimensionnalité en créant des variables latentes maximisant la covariance entre les prédicteurs et la réponse, idéale pour les données corrélées.). En gros, elle décompose vos données pour trouver les axes principaux qui expliquent le mieux leur variation. Pensez-y comme une version sophistiquée de la réduction de dimension pour les données qui aiment faire des siennes.

Syntaxe Officielle
pca.nipals <result=results> <status=rc> /
<attributes={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}>,
<code={casOut={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", onDemand=TRUE | FALSE, promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, comment=TRUE | FALSE, fmtWdth=integer, indentSize=integer, intoCutPt=double, iProb=TRUE | FALSE, labelId=integer, lineSize=integer, noTrim=TRUE | FALSE, pCatAll=TRUE | FALSE, tabForm=TRUE | FALSE}>,
<display={caseSensitive=TRUE | FALSE, exclude=TRUE | FALSE, excludeAll=TRUE | FALSE, keyIsPath=TRUE | FALSE, names={"string-1" <, "string-2", ...>}, pathType="LABEL" | "NAME", traceNames=TRUE | FALSE}>,
<epsilon=double>,
<gpu={enable=TRUE | FALSE}>,
<groupbyLimit=64-bit-integer>,
<inputs={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}>,
<maxIter=integer>,
<n=integer>,
<noCenter=TRUE | FALSE>,
<noScale=TRUE | FALSE>,
<output={*casOut={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, copyVars={"variable-name-1" <, "variable-name-2", ...>}, h="string", residual="string", score="string", std="string", stdsse="string", t2="string"}>,
<outputTables={groupByVarsRaw=TRUE | FALSE, includeAll=TRUE | FALSE, names={"string-1" <, "string-2", ...>} | {key-1={casouttable-1} <, key-2={casouttable-2}, ...>}, repeated=TRUE | FALSE, replace=TRUE | FALSE}>,
<prefix="string">,
<store={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}>,
*table={caslib="string", computedOnDemand=TRUE | FALSE, computedVars={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, groupBy={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}, groupByMode="NOSORT" | "REDISTRIBUTE", importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, *name="table-name", orderBy={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}, singlePass=TRUE | FALSE, vars={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, *name="table-name", vars={{format="string", formattedLength=integer, label="string", *name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression"}>,
<varDef="DF" | "N" | "WDF" | "WEIGHT" | "WGT">;

Paramètres Clés

Nom du paramètre Description
attributes Modifie les attributs des variables utilisées dans cette action. Actuellement, les attributs spécifiés pour les paramètres 'inputs' et 'nominals' sont ignorés. Pour plus d'informations sur la spécification du paramètre 'attributes', consultez le paramètre commun 'casinvardesc' .
code Écrit le code SAS DATA step pour calculer les valeurs prédites du modèle ajusté. Pour plus d'informations sur le paramètre 'code', consultez le paramètre commun 'aircodegen' .
display Spécifie une liste de tables de résultats à envoyer au client pour affichage. Pour plus d'informations sur le paramètre 'display', consultez le paramètre commun 'displayTables' .
epsilon Spécifie le critère de convergence pour la méthode itérative. C'est un peu comme fixer la tolérance d'un ami pour les blagues répétées. La valeur par défaut est 1E-12 et doit être comprise entre 0 et 1.
gpu Spécifie les paramètres pour les unités de traitement graphique (GPU). Si vous spécifiez le sous-paramètre 'groupBy' dans le paramètre 'table', le paramètre 'gpu' est ignoré. Si aucun GPU n'est disponible, le CPU est utilisé pour effectuer le calcul du modèle.
- `enable`: Lorsque défini sur 'True', permet à l'action d'utiliser les GPU pour effectuer le calcul du modèle sur les machines équipées de GPU (un GPU est utilisé par machine). La valeur par défaut est 'FALSE'. C'est comme donner un coup de pouce turbo à vos calculs, si vous avez le matériel pour ça.
groupbyLimit Supprime l'analyse si le nombre de groupes BY dépasse la valeur spécifiée. Utile pour ne pas submerger votre système avec trop de groupes. La valeur minimale est 1.
inputs Spécifie les variables à analyser. Pour les méthodes NIPALS, ITERGS et EIG, vous ne pouvez analyser que des variables numériques. Si vous omettez ce paramètre, toutes les variables numériques non spécifiées dans d'autres paramètres sont analysées. Vous devez spécifier 'INPUTS' ou 'MODEL' pour la méthode RANDOMPCA, mais vous pouvez utiliser à la fois des variables numériques et catégorielles. Pour plus d'informations sur le paramètre 'inputs', consultez le paramètre commun 'casinvardesc' . Alias : `input`, `vars`, `var`.
maxIter Spécifie le nombre maximum d'itérations pour la méthode itérative. La valeur par défaut est 500. La plage est de 0 à MACINT. N'oubliez pas, même les ordinateurs ont besoin de limites pour ne pas tourner en rond éternellement.
n Spécifie le nombre de composantes principales à calculer. Si la valeur est 0, toutes les composantes principales sont calculées. La valeur par défaut est 0. La valeur minimale est 0.
noCenter Lorsque défini sur 'True', supprime le centrage des variables numériques à analyser. La valeur par défaut est 'FALSE'. Parfois, on préfère que les données restent décentrées, c'est un choix de style !
noScale Lorsque défini sur 'True', supprime la mise à l'échelle des variables numériques à analyser. La valeur par défaut est 'FALSE'. Pas de mise à l'échelle, pas de problème.
output Spécifie la table de sortie à créer pour contenir les statistiques par observation. Si vous ne spécifiez aucune statistique, seuls les scores des composantes principales sont inclus.
- `casOut`: Spécifie la table de sortie. Pour plus d'informations, consultez 'casouttable (Form 1)' . (Obligatoire)
- `copyVars`: Copie une ou plusieurs variables de la table d'entrée vers la table de sortie. Alias : `copyVar`.
- `h`: Spécifie l'effet de levier approximatif. Si la valeur est une chaîne vide, le préfixe 'H' est utilisé pour nommer les variables de sortie.
- `residual`: Spécifie les résidus pour chaque variable d'analyse. Si la valeur est une chaîne vide, le préfixe 'R' est utilisé pour nommer les variables de sortie. Alias : `r`, `resid`.
- `score`: Spécifie les scores des composantes principales pour chaque composante principale. Si la valeur est une chaîne vide, le préfixe 'Score' est utilisé pour nommer les variables de sortie.
- `std`: Spécifie les valeurs des variables d'analyse standardisées (centrées et mises à l'échelle) pour chaque variable d'analyse. Si la valeur est une chaîne vide, le préfixe 'Std' est utilisé pour nommer les variables de sortie.
- `stdsse`: Spécifie la somme des carrés des résidus pour les variables d'analyse standardisées. Si la valeur est une chaîne vide, le préfixe 'StdSSE' est utilisé pour nommer les variables de sortie.
- `t2`: Spécifie une somme des carrés des scores mise à l'échelle. Si la valeur est une chaîne vide, le préfixe 'TSquare' est utilisé pour nommer les variables de sortie. Alias : `tSquare`.
outputTables Liste les noms des tables de résultats à enregistrer en tant que tables CAS sur le serveur. Pour plus d'informations, consultez 'outputTables' . Alias : `displayOut`.
prefix Spécifie un préfixe pour nommer les composantes principales. La valeur par défaut est 'Prin'. Soyez créatif, mais pas trop !
store Spécifie la table de sortie à créer pour enregistrer les informations d'ajustement du modèle que vous pouvez utiliser pour le scoring. Pour plus d'informations, consultez 'casouttable (Form 1)' . Alias : `saveState`.
table Spécifie les paramètres de la table d'entrée. C'est la matière première de votre analyse, alors choisissez-la bien ! Pour plus d'informations, consultez 'castable (Form 1)' . (Obligatoire)
varDef Spécifie le diviseur à utiliser pour le calcul des variances et des écarts-types. Les options sont 'DF', 'N', 'WDF', 'WEIGHT' ou 'WGT'. La valeur par défaut est 'DF'. Le choix du diviseur, c'est un peu le secret de chaque chef en statistique.

Préparation des données

Création de données pour l'action nipals

La documentation fournie ne contient pas d'exemples directs de création de données pour l'action nipals. Habituellement, les données sont déjà chargées dans une table CAS ou importées depuis une source externe avant d'appeler l'action. Voici un exemple générique de création d'une table CAS à partir de données locales pour illustrer le processus, sans spécificité pour l'action nipals.

1/* Exemple de création de données (non spécifique à nipals) */
2DATA casuser.mydata;
3 INPUT Var1 Var2 Var3;
4 DATALINES;
5 10 20 30
6 12 22 35
7 8 18 28
8 15 25 40
9 ;
10RUN;
11PROC CAS;
12 upload casdata=casuser.mydata outcaslib="casuser" outcasname="mycasdata" replace;
13RUN;
14QUIT;

Exemples d'utilisation

Extraction des composantes principales avec nipals (exemple simple)

Cet exemple montre comment utiliser l'action `nipals` pour extraire les deux premières composantes principales d'une table CAS nommée `mycasdata`, sans centrage ni mise à l'échelle, et en enregistrant les scores dans une nouvelle table.

1PROC CAS;
2 pca.nipals /
3 TABLE={name='mycasdata'},
4 inputs={{name='Var1'}, {name='Var2'}, {name='Var3'}},
5 n=2,
6 noCenter=TRUE,
7 noScale=TRUE,
8 OUTPUT={casOut={name='mycasdata_scores', replace=TRUE}, score='NIPALS_Score'};
9 RUN;
10QUIT;
Résultat Attendu :
Une table CAS nommée 'mycasdata_scores' sera créée, contenant les deux premières composantes principales (précédées de 'NIPALS_Score') pour chaque observation de 'mycasdata'. Les statistiques des composantes principales seront affichées dans les résultats.
Extraction détaillée des composantes principales avec gestion de la convergence et sortie multiple

Cet exemple illustre une utilisation plus complète de l'action `nipals`, en spécifiant un critère de convergence (`epsilon`), un nombre maximal d'itérations (`maxIter`), et en demandant la sortie des résidus et des statistiques standardisées, en plus des scores des composantes principales. Il utilise la table `mycasdata` avec des variables d'entrée spécifiques.

1PROC CAS;
2 /* Créer la table si elle n'existe pas déjà (peut être adaptée) */
3 DATA casuser.mycasdata;
4 INPUT Var1 Var2 Var3 Var4;
5 DATALINES;
6 10 20 30 5
7 12 22 35 6
8 8 18 28 4
9 15 25 40 7
10 11 21 32 5
11 ;
12 RUN;
13 pca.nipals /
14 TABLE={name='mycasdata'},
15 inputs={{name='Var1'}, {name='Var2'}, {name='Var3'}}, /* Variables à analyser */
16 n=2, /* Calculer les 2 premières composantes principales */
17 epsilon=1E-8, /* Critère de convergence plus strict */
18 maxIter=1000, /* Augmenter le nombre max d'itérations */
19 noCenter=FALSE, /* Centrage des variables (par défaut) */
20 noScale=FALSE, /* Mise à l'échelle des variables (par défaut) */
21 prefix='Comp',
22 OUTPUT={ /* Spécifier la table de sortie pour les statistiques par observation */
23 casOut={name='mycasdata_detailed_output', replace=TRUE, promote=TRUE},
24 score='Score_PCA',
25 residual='Residual_PCA',
26 std='Std_Var'
27 },
28 store={ /* Enregistrer le modèle pour un scoring futur */
29 name='nipals_model_store', replace=TRUE
30 };
31 RUN;
32 /* Charger le modèle et appliquer le scoring */
33 pca.score /
34 TABLE={name='mycasdata'},
35 modelTable={name='nipals_model_store'},
36 OUTPUT={casOut={name='mycasdata_scored', replace=TRUE}, copyVars={'Var4'}}; /* Copie la variable Var4 */
37 RUN;
38 /* Afficher la table de scores */
39 cas.fetch / TABLE={name='mycasdata_scored'}; RUN;
40QUIT;
Résultat Attendu :
Deux tables CAS seront générées :
1. `mycasdata_detailed_output`: Contient les scores des composantes principales (préfixées par 'Score_PCA'), les résidus (préfixés par 'Residual_PCA') et les variables standardisées (préfixées par 'Std_Var') pour chaque observation, ainsi que d'autres statistiques.
2. `nipals_model_store`: Contient les informations du modèle ajusté, permettant de réutiliser ce modèle pour scorer de nouvelles données.
De plus, l'action `pca.score` sera utilisée pour appliquer le modèle stocké à la table d'entrée, créant `mycasdata_scored` avec les composantes principales calculées et la variable `Var4` copiée. Les résultats de `mycasdata_scored` seront ensuite affichés.