Mittlere absolute Abweichung --> In Tabelle exportieren für weitere tSNEVerehrte Gäste,
Ich arbeite derzeit an einem Projekt mit 57 Samples und >800 000 Variablen (siehe beigefügtes Bild). Jetzt möchte ich die Variablen reduzieren, indem ich nur diejenigen mit der höchsten mittleren absoluten Abweichung (MAD) verwende. Das Ziel wäre, die Daten mit PC Analysis weiterzuverarbeiten, gefolgt von einem t-SNE (ich verwende das nette JMP-Add-In).
Bisher kämpfe ich mit der Identifizierung der Variablen mit dem höchsten MAD und exportiere diese Variablen direkt in eine Datentabelle.
Danke im voraus Viele Grüße
Klopfen
Re: Mittlere absolute Abweichung --> In Tabelle exportieren für weitere tSNEVielen Dank @txnelson Und @ian_jmp im Prinzip funktionierten Ihre Vorschläge. Leider habe ich für den Test eine langsame Workstation verwendet, daher konnte ich nicht alle Variablen verarbeiten, muss es auf einem schnelleren System überprüfen. Alles Gute Pat
Re: Mittlere absolute Abweichung --> In Tabelle exportieren für weitere tSNEIch habe 'Median' anfangs falsch als 'Mittelwert' gelesen und folgendes geschrieben: Es dauert ein paar Sekunden auf meinem Mac, aber fast alles davon ist in der Erstellung der Beispieltabelle:
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]))
);
Zusätzlich zu @txnelson Herangehensweise stelle ich fest, dass die Distributionsplattform die mittlere absolute Abweichung angibt. Bei 800.000 Spalten könnte ich jedoch erwarten, dass sein Ansatz schneller ist.
Re: Mittlere absolute Abweichung --> In Tabelle exportieren für weitere tSNEHier ist ein vollständigeres Beispiel, das Sie möglicherweise direkt verwenden können, indem Sie einfach den Verweis auf die Datentabelle „dt“ und die Spalte in der zu löschenden Ausgabetabelle ändern (z. B. Proben-ID).
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 ) ) );
);Re: Mittlere absolute Abweichung --> In Tabelle exportieren für weitere tSNEHier ist ein einfaches Beispiel für die Generierung des MAD.Ich schlage vor, Sie verwandeln es in eine Funktion und erstellen dann eine neue Datentabelle mit einer Zeile und Ihren >800000 Spalten.
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 ) ) );