Picco di una distribuzione di probabilitàCIAO
Ho un set di dati che si adatta meglio alla distribuzione Johnson Su e mi chiedevo se esiste un modo per stimare il valore del picco di questa distribuzione. Ha solo un picco, che è piuttosto diverso dalla mediana o dalla media. Chiamare questa "modalità" potrebbe essere la migliore soluzione possibile qui, ma come faccio a stimare questo punto?
Ri: Picco di una distribuzione di probabilitàÈ possibile estendere l'opzione del profilo per la distribuzione dei dati raggruppati? Per N gruppi, è necessario ottenere la modalità corrispondente alla distribuzione di ciascuno degli elementi nel gruppo. O dovrei creare sottoinsiemi per gruppo ogni volta e quindi utilizzare l'opzione profiler. Ho usato il col groupby e poi l'ho adattato, ma sembra che stia dando un singolo valore per l'intero set di dati e non per ogni membro del gruppo.
Ri: Picco di una distribuzione di probabilitàHai una soluzione usando il profiler che funzionerà. Per quanto riguarda gli script che non funzionano per te, questo articolo evidenzia alcune delle modifiche apportate alle funzioni Ingrandisci e Riduci a icona. Grazie al team di supporto tecnico di JMP per avermelo segnalato!
https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355
Ri: Picco di una distribuzione di probabilitàIl metodo di Laura è più ordinato! E molto meno soggetto a errori. È sempre meglio lasciare che JMP faccia il lavoro per te se riesci a trovare un modo.
Ri: Picco di una distribuzione di probabilitàUna delle cose che amo di JMP è che spesso offre molti modi per risolvere un problema.Tutti i suggerimenti precedenti per trovare la modalità della densità Johnson SU adattata per i dati sono ottimi, ma ecco un'altra opzione che utilizza il Profiler.
Dopo aver utilizzato Distribution per adattare la distribuzione Johnson Su ai tuoi dati, puoi scegliere Salva la formula della densità dal Montato Johnson Su menù.Ciò salva la formula Johnson Su Density in una colonna nella tabella dei dati.

Successivamente puoi aprire il Profiler scegliendo Grafico>>Profiler .Trasmetti la tua formula di densità come il Y, formula di previsione e fare clic su OK.Quindi accendi il Funzioni di desiderabilità da Profilo di previsione menù.Dopo scegli tu Massimizza la desiderabilità dal Profilo di previsione menù.Questo troverà la modalità (massima) della tua densità Johnson Su per questi dati.

Ri: Picco di una distribuzione di probabilitàGrazie mille! 
Ri: Picco di una distribuzione di probabilitàNon ho alcun problema con i dati in questa colonna. Ecco una nuova versione che evita di dover inserire manualmente le stime dei parametri, prendendo in prestito dalla soluzione di Ian:
Names Default to Here( 1 );
dist = Current Data Table() << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :T10_100 ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Fit Distribution( Johnson Su )
)
);
estimates = Report( dist )["Fitted Johnson Su"][NumberColBox(1)] << Get As Matrix;
dist expr = Substitute(
Expr(
Johnson Su Density(
q, // quantile
ggg, // gamma or first shape parameter
ddd, // delta or second shape parameter
ttt, // theta or location parameter
sss // sigma or scale parameter
)
),
Expr( ggg ), estimates[1],
Expr( ddd ), estimates[2],
Expr( ttt ), estimates[3],
Expr( sss ), estimates[4]
);
peak height = Maximize( dist expr, { q( 0.01, 70 ) } );
difference = Minimize( peak height - dist expr, { q( 0.01, 70 ) } );
Print( "The peak location is " || Char( q ) );
Ottengo questo risultato con i tuoi dati:


Quindi non sono i dati o lo script, deve essere JMP (installazione).
Ri: Picco di una distribuzione di probabilitàL'ottimizzazione non funziona anche nella tabella dei dati di esempio. Inoltre, ho usato lo script di Ian che è completamente indipendente dai miei dati. Quindi ci deve essere qualcosa che non va nell'installazione, come hai fatto notare. Devo reinstallare JMP adesso?
Allego comunque la colonna dei dati.
Ri: Picco di una distribuzione di probabilitàNon vedo nulla di sbagliato nello script di Ian o nel mio, quindi lascia la tabella dei dati o l'installazione di JMP. Iniziamo con la tabella dei dati. Puoi condividerlo? In tal caso, identifica la colonna di dati che hai utilizzato. In realtà, abbiamo solo bisogno della colonna di dati che causa il problema. Puoi eliminare il resto se è meglio per te.
Grazie!
Ri: Picco di una distribuzione di probabilitàNon ha funzionato per il tuo script e per il mio set di dati. Lo stesso con la sceneggiatura di Ian, dice
"Ottimizzazione non riuscita: non riuscita: impossibile ridurre la funzione obiettivo".
Quindi sono andato avanti con la soluzione di Bill, ma la considero solo una soluzione temporanea per il mio problema.
Ri: Picco di una distribuzione di probabilitàStai dicendo che il mio script di soluzione non ha funzionato con l'esempio originale che hai pubblicato (come ha fatto per me) o che non ha funzionato con un nuovo set di dati? In quest'ultimo caso, puoi condividere i dati?
Hai provato la sceneggiatura di Ian?
Ri: Picco di una distribuzione di probabilitàIl metodo di Mark è accurato. Ecco un'alternativa che utilizza direttamente la funzione:
NamesDefaultToHere(1);
ClearLog();
// Make some representative data
dt = NewTable("Johnson Su", NewColumn("Data", Numeric, Continuous, Formula(Random Johnson Su( 5, 2, 1, 1 ))));
dt << addRows(50);
// Fit the data
dist = dt << Distribution(Continuous Distribution( Column( :Data ), Fit Distribution( Johnson Su ) ));
// Get the fitted parameters
params = Report(dist)[NumberColBox(3)] << get;
gamma = params[1]; // Shape
delta = params[2]; // Shape
theta = params[3]; // Location
sigma = params[4]; // Scale
// http://www.mathwave.com/articles/johnson_su_distribution.html
// f(x) = delta/(lambda * Sqrt(2*pi()) * Sqrt(z^2 + 1)) * exp( -1/2*(gamma + delta * ln(z + Sqrt(z^2+1)))^2 );
// where:
// z = (x - eta)/lambda;
// and:
// delta > 0 lambda > 0
jsu = Expr(delta/(lambda * Sqrt(2*pi()) * Sqrt(z^2 + 1)) * exp( -1/2*(gamma + delta * ln(z + Sqrt(z^2+1)))^2 ) );
SubstituteInto(jsu, Expr(z), Expr((x - eta)/lambda));
// Use the fitted parameter values
// Note the change in parameter names! 'lambda' -> 'sigma' and 'eta' -> 'theta'
SubstituteInto(jsu,
Expr(gamma), Eval(gamma),
Expr(delta), Eval(delta),
Expr(eta), Eval(theta),
Expr(lambda), Eval(sigma)
);
// Get upper and lower bounds for the optimisation (either side of the (assumed) single peak)
vals = Column(dt, "Data") << getValues;
low = Quantile(0.25, vals);
high = Quantile(0.75, vals);
// Do the maximization
Maximize(jsu, {x(low, high)}, << Tolerance(10^-10), << showDetails(true));
Print(x);
("A occhio" sembra funzionare, ma ovviamente nessun test).
Ri: Picco di una distribuzione di probabilitàGrazie per la risposta. Ma in qualche modo non funziona per me. Dice
"Ottimizzazione non riuscita: non riuscita: numero massimo di iterazioni superato"
Sto usando JMP 12, forse l'ottimizzatore ha una funzionalità limitata.
Ri: Picco di una distribuzione di probabilitàSolo per aggiungere.
Il modo di Mark è davvero il modo migliore per ottenere il valore di picco, ma per un modo rapido per ottenere un valore stimato puoi adattare la curva quindi utilizzare lo strumento JMP Crosshairs che si trova nel menu Strumenti o nella barra dei menu. Fai clic sullo strumento, quindi posiziona il simbolo del mirino nel punto che ritieni rappresenti meglio il picco e verrà visualizzato un valore. Se stai usando JMP 13 otterrai una lente d'ingrandimento con lo strumento Crosshair che ti aiuterà ad avvicinarti.
HTH
Ri: Picco di una distribuzione di probabilitàSfortunatamente, la piattaforma di distribuzione non fornisce la modalità per una funzione analitica. Ho cercato ma non sono riuscito a trovare nemmeno la formula per la modalità di distribuzione di Johnson.
Un altro approccio consiste nell'utilizzare l'ottimizzatore numerico di JMP per cercare la soluzione. Il mio approccio è quello di utilizzare il Massimizza() funzione per trovare la densità massima della distribuzione adattata, che corrisponde al picco, e quindi utilizzare il Minimizzare() funzione per trovare il quantile che produce una probabilità più vicina al massimo. Ecco la soluzione nei passaggi per abbinare ciò che stai cercando di fare.
- Ho aperto l'esempio di stampaggio a iniezione dalla directory dei dati di esempio.
- Ho aperto la piattaforma di distribuzione nella colonna dei dati sul ritiro.
- Ho adattato la distribuzione Johnson SU per ottenere le stime dei parametri Johnson SU.
- Ho scritto una sceneggiatura con due passaggi descritti sopra per trovare la posizione del picco.
Ecco la distribuzione adattata:

.La sceneggiatura è:
peak height = Maximize(
Johnson Su Density(
q, // quantile
-25.83224, // gamma or first shape parameter
1.5352821, // delta or second shape parameter
-3.912839, // theta or location parameter
2.5166e-6 // sigma or scale parameter
),
{ q( 0.01, 70 ) }
);
difference = Minimize(
peak height - Johnson Su Density(
q, // quantile
-25.83224, // gamma or first shape parameter
1.5352821, // delta or second shape parameter
-3.912839, // theta or location parameter
2.5166e-6 // sigma or scale parameter
),
{ q( 0.01, 70 ) }
);
Print( "The peak location is " || Char( q ) );
Si noti che le stime vengono copiate nella chiamata di funzione, che viene utilizzata due volte.
Ecco il risultato nel Log:

Non allarmarti per tutti i messaggi: ha funzionato benissimo! Puoi vedere il risultato in fondo.