Come si automatizza la generazione di campionamento casuale da diversi tipi di distribuzione?Diciamo che ho una tabella con 5 righe e 2 colonne. La prima colonna è per i tipi di distribuzione (ad esempio Normale, Lognormal, Weibull, ecc.) E la seconda colonna è per i rispettivi parametri. Vorrei creare un ciclo for che creerà una nuova tabella di dati per ciascuna delle 5 righe, dove in quella nuova tabella di dati, verrà aggiunta una nuova colonna con una funzione di campionamento casuale basata sui parametri della riga.
ad esempio riga 1 -> Normale, (0.1,0.02); Crea una nuova tabella dati con una colonna che ha una formula di
randomnormal(0.1,0.02)
La mia sfida attuale è che diversi tipi di distribuzione richiedono un numero variabile di parametri. Apprezzo alcune intuizioni su come dovrei affrontarlo.
ScriptingRi: Come faccio ad automatizzare la generazione di campionamento casuale da diversi tipi di distribuzione?Ciao,
Un paio di pensieri:
1) Se possibile, suddividerei i parametri su colonne per rendere più facile lo scripting della formula
2) Userei la formula MATCH per cercare il nome della distribuzione e chiamare in modo specifico la funzione Random per la distribuzione corrispondente
Match( :Distribution,
"Normal", Random Normal( :Parameter 1, :Parameter 2 ),
"LogNormal", Random Lognormal( :Parameter 1, :Parameter 2 ),
.
)
Ri: Come faccio ad automatizzare la generazione di campionamento casuale da diversi tipi di distribuzione?Ecco un semplice esempio di come eseguire ciò che hai richiesto
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] )
)
)
);
Ti preghiamo di dedicare del tempo per comprendere appieno come funziona lo script e, se non lo capisci, rispondi in modo che la community possa fornirti le informazioni aggiuntive di cui potresti aver bisogno.