Come posso calcolare la media geometrica di alcune righe?La media geometrica può essere facilmente ottenuta in Riepilogo.
Ma come calcolare la media in base alla colonna della formula, giusto?
Ho cercato nella documentazione della guida e nella community e ancora non sono riuscito a trovare un modo.


Voglio calcolarlo in questo modo:
dt=Current Data Table();
dt<<NEW column=""></NEW>
Grazie!
Re: Come posso calcolare la media geometrica di alcune righe?Inoltre, sto ricollegando un post sul blog qui sulla media geometrica dalla documentazione SAS che è molto istruttiva:
https://blogs.sas.com/content/iml/2019/10/02/geometric-mean-deviation-cv-sas.html
Re: Come posso calcolare la media geometrica di alcune righe?Una strategia utile qui penso sia usare la funzione "NRows()" in JMP per richiamare l'indicizzazione sul numero di riga se sei interessato al calcolo della media geometrica generale che è tipicamente riportato nelle statistiche di riepilogo (ed è quello che JMP riporta in Personalizza statistiche di riepilogo).


Sono stato in grado di riassumere (riprodurre) due degli approcci utilizzati in questo thread e includo la tabella dei dati su un set di dati generico per riferimento futuro di chiunque. Saluti, @PatrickGiuliano
Re: Come posso calcolare la media geometrica di alcune righe?grazie @giuliano
stavo tentando di fare tutto in una volta ma non sono riuscito a farlo funzionare come in questa immagine:

Re: Come posso calcolare la media geometrica di alcune righe?Ciao @ron_horne ,
Alla tua domanda: "c'è un modo per incorporare la prima trasformazione ln nella seconda formula e quindi salvare la procedura a 2 colonne".
All'inizio, ho pensato che avremmo potuto fare qualcosa con Transform Column(), come faremmo nello scripting per il lancio di una piattaforma, ad esempio:
Transform Column( "Log[height]", Formula( Log( :height ) ) )
Ma incorporarlo in una formula di colonna non mi ha portato da nessuna parte. Tuttavia, :altezza[ Indice ( Riga () - 10 , Riga () )] restituirà una matrice e avvolgendola in Ln() valuterà ogni elemento, quindi quanto segue dovrebbe fornire una versione a colonna singola della tua soluzione:
New Column("Geometric mean height (single column)", Numeric, "Continuous", Format("Best", 12), Formula(If(Row() < 10, Empty(), Exp(Mean(Ln(:height[Index(Row() - 10, Row())]))))) );

@giuliano
Re: Come posso calcolare la media geometrica di alcune righe?Ciao @lwx228 ,
la tua domanda è buona e deve avere alcuni modi per ottenere la risposta. cercherò di attenermi all'uso della formula della colonna.
creare due nuove colonne.
1 basta trasformare l'altezza nel suo registro naturale.
2 ottieni l'esponente della media mobile della prima colonna.
Questa seconda colonna dovrebbe darti una media geometrica mobile che stai cercando.
puoi prendere le formule da questo pezzo di script:
New Column( "log height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Ln( :height ) )
);
New Column( "Geometric mean height",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() < 10,
Empty(),
Exp( Mean( :log height[Index( Row() - 10, Row() )] ) )
)
)
);
per favore facci sapere se funziona per te.
Vorrei anche chiedere ad altri membri del forum se esiste un modo per incorporare la prima trasformazione ln nella seconda formula e quindi salvare la procedura a 2 colonne.
Re: Come posso calcolare la media geometrica di alcune righe?Ho usato il metodo originale e i risultati sono stati coerenti.

Grazie Jim!
Re: Come posso calcolare la media geometrica di alcune righe?Non sono a conoscenza di una funzione media geometrica in JMP.Uno dovrebbe essere aggiunto e ti suggerisco di aggiungerlo alla lista dei desideri di JMP.Tuttavia, ciò non significa che non si possa fare ciò che si vuole.Ho trovato 2 diverse soluzioni.Il primo è solo la codifica grezza della media geometrica in JSL.Nella tabella dati allegata, la colonna denominata GeoMean utilizza tale formula.Utilizza la tua richiesta per calcolare la media geometrica per la riga corrente - 10 righe, attraverso la riga corrente.
If( Row() == 1,
Product = 1;
Range = 11;
);
If( Row() <= 11,
Product = Product * :height;
If( Row() == Range,
Returned = Product ^ (1 / Range),
Returned = .
);
,
Product = Product / :height[Row() - Range];
Product = Product * :height[Row()];
Returned = Product ^ (1 / Range);
);
Returned;
La seconda forma, la colonna denominata Geomean from Dist Platform, estrae la media geometrica dall'output della piattaforma di distribuzione, eseguita su un sottoinsieme di dati, sottoinsieme di 11 righe alla volta
If( Row() < 11,
returned = .,
theValues = :height[Index( Row(), Row() - 10 )];
_d = New Table( "sub", invisible, New Column( "height", values( theValues ) ) );
dis = _d << Distribution(
invisible,
Continuous Distribution(
Column( :height ),
Quantiles( 0 ),
Histogram( 0 ),
Vertical( 0 ),
Outlier Box Plot( 0 ),
Customize Summary Statistics(
Mean( 0 ),
Std Dev( 0 ),
Std Err Mean( 0 ),
Upper Mean Confidence Interval( 0 ),
Lower Mean Confidence Interval( 0 ),
N( 0 ),
Geometric Mean( 1 )
)
)
);
Returned = (Report( dis )[Number Col Box( 1 )] << get)[1];
Close( _d, nosave );
);
Returned;
La prima formula dovrebbe essere la più veloce, poiché non calcola da zero la Geomeana per ogni riga.