Écart absolu médian -> Exporter vers le tableau pour plus de tSNEChers tous,
Je travaille actuellement sur un projet utilisant 57 échantillons et plus de 800 000 variables (voir l'image ci-jointe). J'aimerais maintenant réduire les variables en n'utilisant que celles dont l'écart absolu médian (MAD) est le plus élevé. L’objectif serait de traiter les données plus en profondeur avec PC Analysis, suivi d’un t-SNE (j’utilise le joli complément JMP).
Jusqu'à présent, j'ai du mal à identifier les variables dont le MAD est le plus élevé et à les exporter directement dans un tableau de données.
Merci d'avance Cordialement
Tapoter
Re: écart médian absolu -> Exporter vers le tableau pour plus de tSNEVoici un exemple simple de génération du MAD. Je vous suggère de la transformer en une fonction, puis de créer une nouvelle table de données avec une ligne et vos> 800 000 colonnes.
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 ) ) );
Re: écart médian absolu -> Exporter vers le tableau pour plus de tSNEVoici un exemple plus complet que vous pourrez peut-être utiliser directement en modifiant simplement la référence à la table de données "dt" et à la colonne de la table en sortie à supprimer (c'est-à-dire Échantillon 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: écart médian absolu -> Exporter vers le tableau pour plus de tSNEAu début, j'avais mal interprété «médiane» comme «moyenne» et écrivais ce qui suit: «Cela prend quelques secondes sur mon Mac, mais la quasi-totalité est de créer l'exemple de table:
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]))
);
En plus de @txnelson approche, je remarque que la plateforme de distribution donnera l’écart absolu médian. Avec 800 000 colonnes, je pense que son approche sera plus rapide.
Re: écart médian absolu -> Exporter vers le tableau pour plus de tSNEMerci beaucoup @txnelson et @ian_jmp En principe, vos suggestions ont fonctionné. Malheureusement, j'ai utilisé un poste de travail lent pour le test. Je ne pouvais donc pas traiter toutes les variables, je devais vérifier sur un système plus rapide. Tout le meilleur, Pat