Comment automatiser la génération d'échantillons aléatoires à partir de différents types de distribution?Disons que j'ai une table avec 5 lignes et 2 colonnes. La première colonne est pour les types de distribution (par exemple Normal, Lognormal, Weibull, etc.) et la deuxième colonne est pour les paramètres respectifs. Je voudrais faire une boucle for qui créera une nouvelle table de données pour chacune des 5 lignes, où dans cette nouvelle table de données, une nouvelle colonne sera ajoutée avec une fonction d'échantillonnage aléatoire basée sur les paramètres de la ligne.
par exemple, ligne 1 -> Normal, (0,1,0,02); Créez une nouvelle table de données avec une colonne qui a une formule de
randomnormal(0.1,0.02)
Mon défi actuel est que différents types de distribution nécessitent un nombre variable de paramètres. J'apprécie quelques idées sur la façon dont je devrais aborder cela.
ScriptingRe: Comment automatiser la génération d'échantillons aléatoires à partir de différents types de distribution?Salut,
Quelques réflexions:
1) Si possible, je diviserais les paramètres en colonnes pour faciliter le script de la formule
2) J'utiliserais la formule MATCH pour rechercher le nom de la distribution et appeler spécifiquement la fonction Random pour la distribution correspondante
Match( :Distribution,
"Normal", Random Normal( :Parameter 1, :Parameter 2 ),
"LogNormal", Random Lognormal( :Parameter 1, :Parameter 2 ),
.
)
Re: Comment automatiser la génération d'échantillons aléatoires à partir de différents types de distribution?Voici un exemple simple de comment faire ce que vous avez demandé
Names Default To Here( 1 );
dt = New Table( "Sample",
Add Rows( 5 ),
New Column( "Types",
Character,
Set Values(
{"Normal", "Lognormal", "Weibull", "Uniform", "Johnson Su"}
),
Set Display Width( 79 )
),
New Column( "Parameters",
Character,
Set Values(
{"(0.1,0.02)", "(0.2,.005)", "(0.3,0.005)", "(0.1,0.5)",
"(0.5, 1, 1, 1)"}
),
Set Display Width( 101 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Eval(
Substitute(
Expr(
New Table( dt:Types[i],
add rows( 20 ),
New Column( "Random " || dt:Types[i],
set each value( __formula__ )
)
)
),
Expr( __formula__ ),
Parse( "Random " || dt:Types[i] || dt:Parameters[i] )
)
)
);
Veuillez prendre le temps de bien comprendre le fonctionnement du script, et si vous ne le comprenez pas, veuillez répondre afin que la Communauté puisse vous fournir les informations supplémentaires dont vous pourriez avoir besoin.
Re: Comment automatiser la génération d'échantillons aléatoires à partir de différents types de distribution?Merci Thierry, des suggestions si je veux limiter le nombre de colonnes pour les paramètres?
Une autre préoccupation que j'ai est, je crois que la formule Match () est sensible à la casse. Je peux essayer de contrôler cela en mettant un contrôle de liste sur la colonne. Existe-t-il d'autres moyens de contrôler / gérer cela?