copula

copulaSimulate

Description

L'action copulaSimulate simule des données à partir d'un modèle de copule spécifié. Les copules sont des outils statistiques qui décrivent la dépendance entre plusieurs variables aléatoires indépendamment de leurs distributions marginales. Cette action permet de générer des jeux de données synthétiques qui respectent une structure de dépendance particulière, ce qui est utile pour des simulations de Monte Carlo, des tests de stress en finance, ou l'analyse de risques.

copula.copulaSimulate <result=results> <status=rc> / define={...}, display={...}, margApproxOpts={...}, ndraws=64-bit-integer, outempirical={...}, outputTables={...}, outuniform={...}, plot={...}, restore={...}, seed=integer, table={...}, timingReport={...}, tolerance=double, var={"string-1" <, "string-2", ...>};
Paramètres
ParamètreDescription
defineSpécifie les informations pertinentes sur la copule utilisée pour la simulation.
copulatypeSpécifie le type de copule (CLAYTON, FRANK, GUMBEL, NORMAL, T). La valeur par défaut est NORMAL.
corrtableSpécifie la table CAS contenant la matrice de corrélation de Pearson à utiliser pour la simulation de copules elliptiques.
dfSpécifie les degrés de liberté. Ce paramètre est uniquement utilisé pour les copules de Student (T).
KendallCorrtableSpécifie la table CAS contenant la matrice de corrélation de Kendall à utiliser pour la simulation de copules elliptiques.
nameSpécifie le nom de la définition de la copule.
SpearmanCorrtableSpécifie la table CAS contenant la matrice de corrélation de Spearman à utiliser pour la simulation de copules Gaussiennes.
thetaSpécifie la valeur du paramètre pour les copules archimédiennes.
displaySpécifie la liste des tables de résultats que vous souhaitez que l'action crée. Si omis, toutes les tables sont créées.
margApproxOptsSpécifie les options utilisées lors de l'approximation de la fonction de distribution marginale empirique par la méthode adaptative.
ndrawsSpécifie le nombre d'observations à générer pour la simulation. La valeur par défaut est 10000.
outempiricalSpécifie la table de sortie pour contenir le résultat de la simulation en utilisant les marges empiriques.
outputTablesSpécifie la liste des tables de résultats à sortir en tant que tables CAS.
outuniformSpécifie la table de sortie pour contenir le résultat de la simulation avec des marges uniformes.
plotSpécifie les options utilisées pour produire des graphiques de diagnostic.
restoreRestaure les propriétés du modèle et les estimations finales à partir d'un item store spécifié pour effectuer la simulation.
seedSpécifie la graine (seed) pour la génération de nombres aléatoires. La valeur par défaut est 0, ce qui correspond à une graine basée sur l'horloge système.
tableSpécifie la table de données d'entrée, nécessaire lorsque les marges empiriques sont utilisées.
timingReportSpécifie le type d'informations de chronométrage que l'action doit fournir.
toleranceSpécifie la tolérance numérique autorisée pour la simulation.
varSpécifie la liste des noms de variables pour la simulation et les tables de sortie.
Préparation des Données Voir la fiche de ce code dataprep
Création des données initiales

Ce bloc de code crée deux tables CAS. La première, 'mycas.corr_data', contient une matrice de corrélation de Pearson qui sera utilisée par les copules elliptiques. La seconde, 'mycas.mydata', contient des données qui serviront de base pour le calcul des marges empiriques.

Copié !
1DATA mycas.corr_data;
2 _TYPE_ = 'CORR'; _NAME_ = 'y1'; y1=1; y2=0.5; y3=0.2; OUTPUT;
3 _TYPE_ = 'CORR'; _NAME_ = 'y2'; y1=0.5; y2=1; y3=0.6; OUTPUT;
4 _TYPE_ = 'CORR'; _NAME_ = 'y3'; y1=0.2; y2=0.6; y3=1; OUTPUT;
5RUN;
6 
7DATA mycas.mydata;
8 call streaminit(456);
9 DO i = 1 to 2000;
10 y1 = rand('NORMAL');
11 y2 = rand('NORMAL');
12 y3 = rand('NORMAL');
13 OUTPUT;
14 END;
15RUN;

Exemples

Cet exemple simule 1000 observations à partir d'une copule Gaussienne tridimensionnelle en utilisant la matrice de corrélation précédemment créée. Les résultats avec des marges uniformes sont stockés dans la table 'unif_out'.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3copula.copulaSimulate / define={copulaType='NORMAL', corrTable={name='corr_data'}}, nDraws=1000, seed=123, outUniform={name='unif_out', replace=true}, var={'y1', 'y2', 'y3'};
4 
5RUN;
6 
7QUIT;
8 
Résultat :
Une table CAS nommée 'unif_out' est créée dans la caslib active. Elle contient 1000 lignes et 3 colonnes (y1, y2, y3) avec des données simulées sur une échelle uniforme [0,1] qui suivent la structure de dépendance spécifiée.

Cet exemple simule 5000 observations à partir d'une copule de Student (t) avec 5 degrés de liberté. Il utilise la table 'mycas.mydata' pour dériver les marges empiriques. Deux tables de sortie sont générées : 'unif_out_t' avec des marges uniformes et 'emp_out_t' avec les marges empiriques. Des graphiques de diagnostic sont également demandés.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3copula.copulaSimulate / define={copulaType='T', df=5, corrTable={name='corr_data'}}, nDraws=5000, seed=456, TABLE={name='mydata'}, outUniform={name='unif_out_t', replace=true}, outEmpirical={name='emp_out_t', replace=true}, var={'y1', 'y2', 'y3'}, plot={scatter=true, marginals=true};
4 
5RUN;
6 
7QUIT;
8 
Résultat :
Deux tables CAS sont créées : 'unif_out_t' avec des marges uniformes et 'emp_out_t' avec des marges transformées basées sur les distributions empiriques des variables de 'mydata'. De plus, des graphiques de dispersion et des graphiques des distributions marginales sont générés dans les résultats ODS.

Cet exemple montre comment simuler des données à partir d'une copule de Clayton, qui est une copule archimédienne. Ce type de copule est défini par un seul paramètre, theta, qui contrôle la force de la dépendance (ici, theta=2 indique une forte dépendance dans la queue inférieure). Pour les copules archimédiennes, une matrice de corrélation n'est pas nécessaire.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3copula.copulaSimulate / define={copulaType='CLAYTON', theta=2}, nDraws=2000, seed=789, outUniform={name='clayton_out', replace=true}, var={'u1', 'u2'};
4 
5RUN;
6 
7QUIT;
8 
Résultat :
Une table CAS nommée 'clayton_out' est créée avec 2000 observations et 2 variables ('u1', 'u2'). Les données simulées présenteront une dépendance plus forte dans les valeurs faibles (queue inférieure), ce qui est caractéristique de la copule de Clayton.

FAQ

À quoi sert l'action `copulaSimulate` ?
Comment spécifier les informations sur la copule pour la simulation ?
Quel paramètre utiliser pour spécifier le type de copule ?
Comment fournir une matrice de corrélation de Pearson pour les copules elliptiques ?
Comment spécifier les degrés de liberté pour une copule t ?
Comment spécifier le nombre d'observations à générer ?
Comment obtenir les résultats de la simulation avec des marges empiriques ?
Comment obtenir les résultats de la simulation dans des marges uniformes ?
Est-il possible de définir une graine pour la génération de nombres aléatoires ?
Comment nommer les variables dans l'ensemble de données de sortie ?
Peut-on restaurer un modèle de copule à partir d'un item store pour une simulation ?