Deviazione assoluta mediana -> Esporta in tabella per ulteriori tSNECarissimi,
Attualmente sto lavorando a un progetto utilizzando 57 campioni e> 800.000 variabili (vedi immagine allegata). Ora vorrei ridurre le variabili usando solo quelle con la deviazione assoluta mediana più alta (MAD). L'obiettivo sarebbe quello di elaborare ulteriormente i dati con PC Analysis, seguito da un t-SNE (sto usando il simpatico add-in JMP).
Finora ho difficoltà a identificare le variabili con il MAD più elevato e ad esportare direttamente queste variabili in una tabella di dati.
Grazie in anticipo, Cordiali saluti
colpetto
Ri: Deviazione assoluta mediana -> Esporta in tabella per ulteriori tSNEEcco un semplice esempio di generazione del MAD. Ti suggerisco di trasformarlo in una funzione, quindi creare una nuova tabella di dati con una riga e le tue> 800000 colonne.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
theMatrix = Column( dt, "height" ) << get as matrix;
MAD = Quantile( .5, Abs( theMatrix - Quantile( .5, theMatrix ) ) );
Ri: Deviazione assoluta mediana -> Esporta in tabella per ulteriori tSNEEcco un esempio più completo che potresti essere in grado di utilizzare direttamente cambiando semplicemente il riferimento alla tabella di dati "dt" e la colonna nella tabella di output da eliminare (cioè ID campione)
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
dt << select where(row()==1);
dtMAD = dt << Subset(
Selected Rows( 0 ),
Rows( [1] ),
Selected columns only( 0 )
);
dtMAD << delete columns({"Lot_id","wafer","Wafer id in lot ID","site"});
For( i = 1, i <= N Cols( dtMAD ), i++,
theMatrix = Column( dt, Column( dtMAD, i ) << get name ) << get as matrix;
Column( dtMAD, i )[1] = Quantile( .5, Abs( theMatrix - Quantile( .5, theMatrix ) ) );
);Ri: Deviazione assoluta mediana -> Esporta in tabella per ulteriori tSNEInizialmente ho letto male 'median' come 'mean' e ho scritto quanto segue: Ci vogliono pochi secondi sul mio Mac, ma quasi tutto ciò è nel creare la tabella di esempio:
NamesDefaultToHere(1);
// Make a table with 'nc' columns and 'nr' rows to use . . .
nc = 1000;
nr = 57;
dt = NewTable("MAD Example");
for(c=1, c<=nc, c++,
dt << NewColumn("Col "||Char(c), Numeric, Continuous, Formula(RandomNormal(0, 1)));
);
dt << addRows(nr);
dt << runFormulas;
// Start Here: Calculate MAD for each column . . .
dt = CurrentDataTable();
mat = dt << getAsMatrix;
// (1): Get the mean of each column in a row vector
mean = VMean(mat);
// (2): 'Explode' this to make a matrix congruant with 'mat'
meanMat = Repeat(mean, nr);
// (3): Get the Absolute deviations
AD = Abs(mat - meanMat);
// (4): Get the MAD
MAD = VMean(AD);
// Find the column numbers of the 'nc2' columns that have the biggest MAD values
nc2 = Round(nc/10, 0);
rankMAD = Rank(MAD);
topRandMAD = rankMAD[(nc-nc2)+1::nc];
// Make a second table
dt2 = NewTable("Top "||Char(nc2)||" Largest MAD Values from "||(dt << getName),
NewColumn("Column Number", Numeric, Nominal, Values(topRandMAD)),
NewColumn("MAD", Numeric, Continuous, Values(MAD[topRandMAD]))
);
Inoltre @txnelson approccio, noto che la piattaforma di distribuzione darà la deviazione assoluta mediana. Con 800.000 colonne, mi aspetto che il suo approccio sia più veloce.
Ri: Deviazione assoluta mediana -> Esporta in tabella per ulteriori tSNEmolte grazie @txnelson e @ian_jmp in linea di principio i tuoi suggerimenti hanno funzionato. Sfortunatamente, ho usato una workstation lenta per il test, quindi non ero in grado di elaborare tutte le variabili, devo verificarlo su un sistema più veloce. Tutto bene, Pat