Ottenere una media di un sottoinsieme di datiCIAO,
Ho intensità di 4 campioni trattati e 5 campioni non trattati prelevati tra una gamma di lunghezze d'onda (400 - 600 nm) in tre diversi punti temporali (0, 1, 3 ore).
A lungo termine, sto cercando di normalizzare i miei dati in modo che l'intestino medio a 400 nm dei campioni non trattati sia 1 in ogni momento. Per fare ciò, devo capire come ottenere l'intensità media non trattata di 400 nm a 0, 1, 3 ore.
Questo è il mio codice attuale:
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
Dai grafici che ho realizzato (e da un foglio pivot di Excel), so che il valore dovrebbe essere di circa 0,72 per 1 ora, ma ottengo 1,3 per la maggior parte delle righe. Ottengo anche 0,68 per le righe che soddisfano le mie 3 affermazioni "e", ma so che i fogli pivot di Excel a volte fanno cose divertenti di normalizzazione, quindi non sono sicuro di essere preoccupato per le differenze lì.
Qualsiasi suggerimento per rendere coerente il mio codice sarebbe molto apprezzato.
Ri: Ottenere una media di un sottoinsieme di datiNon importa 
Col Media ( :altezza, :età)
Grazie
Ri: Ottenere una media di un sottoinsieme di datiJim,
Come posso ottenere che la colonna Esempio contenga la media delle altezze della colonna solo per l'età della persona nella riga?
Ad esempio, nei dati di esempio, Katie ha 12 anni, vorrei che la sua colonna Esempio contenesse l'altezza media della colonna solo per i bambini di 12 anni e per Alice, che ha 13 anni, vorrei che la sua colonna Esempio contenesse la colonna media altezza solo per i ragazzi di 13 anni.
Spero che ci sia un modo più semplice rispetto all'utilizzo di if nidificati per ogni età.
Grazie,
Segno
Ri: Ottenere una media di un sottoinsieme di datiHo finito per utilizzare la tua seconda opzione, ma devo ancora inserire manualmente quel fattore di normalizzazione per il mio calcolo ... Il mio codice finale è simile a questo:
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
Ri: Ottenere una media di un sottoinsieme di datiQuel tipo ha funzionato, ma non è facile applicare un valore particolare (un po 'come usare $$ in Excel) a tutte le righe che ritengo essere dello stesso tipo.
Penso che sia solo una differenza nel software e dovrò abituarmi alle differenze.
Ri: Ottenere una media di un sottoinsieme di datiForse questo è ovvio, ma sembra più semplice di quello che hai appena delineato.Usando il tuo esempio, ho creato una nuova colonna con la formula Col Mean( :Intensity, :Time Period, :Treatment, :Wavelength ).Non uso script se posso evitarli e possono essere evitati qui.La funzione Col Media (nel gruppo Statistico) consente di calcolare la media come funzione di un numero di variabili di raggruppamento e questo produce esattamente la tabella che mostri.
Ri: Ottenere una media di un sottoinsieme di datiCIAO,
Se capisco correttamente la tua domanda, stai chiedendo di calcolare la statistica media per una particolare colonna da una o più colonne di raggruppamento.
Nella tabella dei dati di esempio allegata, ho salvato due script per illustrare come è possibile eseguire questa operazione utilizzando due approcci diversi. Quello intitolato "Mean by Trt and Time Period and Wavelength" crea una tabella pivot con un filtro dati locale in modo da poter esaminare le intensità medie per vari periodi di tempo, trattamenti e lunghezze d'onda. Il filtro dei dati locali può essere applicato in modo condizionale (usando "Condizionale" sotto l'opzione del triangolo rosso) in modo che quando si seleziona una categoria limiterà le categorie del filtro della colonna successiva solo a quelle che si trovano nella categoria selezionata.
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filterTabula (tabella pivot) con filtro dati locale
Il secondo script intitolato "Riepilogo tabelle" è un esempio dell'utilizzo di Tabelle-->Riepilogo con il trattamento, il periodo di tempo e la lunghezza d'onda come colonne di raggruppamento.
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group ColumnsFinestra di dialogo Riepilogo tabelle con colonne di gruppo
E per gli altri che vogliono vedere come eseguire la tabella pivot con uno script.
Tabulate(
Show Control Panel( 0 ),
Set Format( Mean( :Intensity( 12, 1 ) ) ),
Add Table(
Row Table(
Grouping Columns( :Time Period, :Treatment, :Wavelength ),
Analysis Columns( :Intensity ),
Statistics( Mean )
)
),
Local Data Filter(
Add Filter(
columns( :Wavelength, :Time Period, :Treatment ),
Where( :Time Period == "0" ),
Display( :Treatment, Size( 309, 232 ), List Display )
)
)
)
E infine, le Tabelle-->Riepilogo con il corrispondente JSL:
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
È più verso quello che ti aspetti?
migliore,
Stan
Ri: Ottenere una media di un sottoinsieme di datiSono sicuro di non seguire in dettaglio, le diverse condizioni che devi mettere in atto, per fare in modo che funzioni, tuttavia, ho messo insieme un esempio che credo illustrerà il metodo che funzionerà per generare la risposta hai bisogno.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Example",
formula(
If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13,
Col Mean( If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13, :height, . ) ),
.
)
)
);
Dai un'occhiata alla formula. Ha utilizzato 2 diverse decisioni per ottenere la sua risposta. In primo luogo, solo le righe in cui sono soddisfatte le combinazioni specifiche di sesso ed età devono essere calcolate. E se tali specifiche non vengono soddisfatte, il valore dovrebbe essere un valore mancante. La seconda decisione viene eseguita quando la prima decisione è corretta, quindi vogliamo calcolare la media della colonna, ma includere solo i valori in cui i valori specifici delle combinazioni di sesso ed età sono veri.
Ri: Ottenere una media di un sottoinsieme di datiNo, questo non è affatto quello che mi aspettavo.
Sto solo cercando di ottenere il valore medio dell'intensità usando tutti i
valori in cui il tempo è 1 h, la lunghezza d'onda è 400 e non sono stati registrati n
trattamento (I@1,400,N). Farò lo stesso per 0 e 3 ore (I@ 0, 400,N e
I@3, 400,N)
Alla fine farò una formula che usa istruzioni if per controllare l'ora
per la riga, quindi divide l'intensità per quella riga per il tempo
valore "I@" appropriato.
All'incirca:
Se t = 0, I/I@0,400,n
Altrimenti se t= 1, I/I@1,400,n
Altrimenti se t = 3, I/I@3,400,n
Altro Errore
Spero che questo spieghi meglio quello che sto cercando di fare.
Ri: Ottenere una media di un sottoinsieme di datiNon sono sicuro che tu stia interpretando ciò che sta effettivamente facendo il tuo codice. Il secondo elemento all'interno della funzione Col Mean() è un'istruzione "By". Cioè, il modo in cui l'hai codificato, calcolerà una media per Intensità per tutte le rew che soddisfano quanto segue
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
e per tutte le righe che non soddisfano tali criteri, calcolerà la media dell'intensità per tutte quelle righe. Pertanto, quando viene applicata la formula, può generare solo uno dei due valori diversi. È questo che ti aspetti?