dagsimulate
Description
L'action `dagsimulate` permet de simuler un graphe orienté acyclique (DAG - Directed Acyclic Graph) ainsi que les données associées. C'est l'outil parfait pour générer des données synthétiques afin de tester vos algorithmes de découverte causale sans risquer de casser des données réelles (pas de panique, c'est juste de la simulation !). Vous pouvez contrôler précisément le nombre d'observations, le nombre d'arêtes, les distributions de bruit , et la génération des paramètres .
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| vars | (Obligatoire) Liste des variables d'entrée simulées (ex: {"x1", "x2"}). (Alias: inputs) |
| nEdges | Spécifie le nombre d'arêtes (liens) du graphe. Par défaut 0. (Alias: e) |
| nObs | Spécifie la taille de l'échantillon, soit le nombre d'observations à simuler. Par défaut 10000. (Alias: n, sampleSize) |
| seed | Graine pour le générateur de nombres aléatoires. Par défaut 1. Très utile pour la reproductibilité ! |
| noise | Définit la distribution du bruit. Comprend un sous-paramètre `dist` où l'on précise `type` (ex: GAUSSIAN), `mean`, `std` ou `var`. |
| parm | Détermine comment les valeurs des paramètres des arêtes sont générées (ex: distribution UNIFORM avec bornes `lb` et `ub`, et une zone d'exclusion entre `excllb` et `exclub`). |
| out, outData, outOrder, outParm | Noms des tables CAS de sortie contenant respectivement la matrice d'adjacence du DAG, les données brutes simulées, l'ordre topologique et les valeurs des paramètres générés. |
Préparation des données
Préparation de la session (Rien à charger en entrée !)
Puisque cette action génère elle-même les données, vous n'avez pas besoin de charger une table source. Nous allons juste initialiser la session CAS.
| 1 | cas mysess; |
| 2 | caslib _all_ assign; |
Exemples d'utilisation
Génération basique d'un DAG
Créons un simple graphe acyclique dirigé avec 4 variables, 3 arêtes et 5000 observations. Les tables de sortie contiendront la matrice d'adjacence et les données générées.
| 1 | PROC CAS; |
| 2 | causalDiscovery.dagsimulate / |
| 3 | vars={"x1", "x2", "x3", "x4"} |
| 4 | nEdges=3 |
| 5 | nObs=5000 |
| 6 | seed=12345 |
| 7 | out={name="sim_dag", replace=true} |
| 8 | outData={name="sim_data", replace=true}; |
| 9 | RUN; |
| 10 | QUIT; |
Résultat Attendu :
Simulation avancée avec contrôle complet
Poussons la simulation plus loin en ajustant la distribution du bruit gaussien (moyenne et écart-type) et la distribution uniforme des paramètres pour générer un jeu de données robuste, parfait pour tester un modèle complexe.
| 1 | PROC CAS; |
| 2 | causalDiscovery.dagsimulate / |
| 3 | vars={"v1", "v2", "v3", "v4", "v5"} |
| 4 | nEdges=6 |
| 5 | nObs=20000 |
| 6 | seed=42 |
| 7 | noise={dist={type="GAUSSIAN", mean=0, std=1.5}} |
| 8 | parm={dist={type="UNIFORM", lb=-2.0, ub=2.0, excllb=-0.1, exclub=0.1}} |
| 9 | out={name="adv_dag", replace=true} |
| 10 | outData={name="adv_data", replace=true} |
| 11 | outOrder={name="adv_order", replace=true} |
| 12 | outParm={name="adv_parm", replace=true}; |
| 13 | RUN; |
| 14 | QUIT; |