絶対偏差の中央値 - > tSNEのために表にエクスポートみなさん、
現在57のサンプルと80万以上の変数を使ったプロジェクトに取り組んでいます(添付の画像を参照)。今度は、最大中央絶対偏差(MAD)を持つものだけを使って変数を減らしたいと思います。目標は、PC Analysisでデータをさらに処理し、続いてt-SNEを使用することです(私は素敵なJMPアドインを使用しています)。
これまでのところ、私はMADが最も高い変数の特定に苦労しており、これらの変数をデータテーブルに直接エクスポートしています。
事前にありがとう、よろしく
パット
再:中央絶対偏差 - >さらにtSNEのために表にエクスポートこれはMADを生成する簡単な例です。 それを関数に変換してから、1行と80万列を超える新しいデータテーブルを作成することをお勧めします。
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 ) ) );
再:中央絶対偏差 - >さらにtSNEのために表にエクスポートこれは、"dt"データテーブルへの参照を変更し、出力テーブルの列を削除するだけで直接使用できる可能性がある、より完全な例です(例: サンプル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 ) ) );
);再:中央絶対偏差 - >さらにtSNEのために表にエクスポート私は最初、「中央値」を「平均値」と読み間違えて、次のように書きました。私のMacでは数秒かかりますが、そのほとんどすべてが例の表を作成することです。
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]))
);
に加えて @txnelson 私は、Distributionプラットフォームが中央値の絶対偏差を示すことに注意してください。80万列であれば、彼のアプローチはもっと速いと思うかもしれません。
再:中央絶対偏差 - >さらにtSNEのために表にエクスポートどうもありがとう @txnelson そして @ian_jmp 原則としてあなたの提案はうまくいきました。残念ながら、私はテストのために遅いワークステーションを使用しました、従って私はすべての変数を処理することができませんでした、より速いシステムでそれをチェックしなければなりません。パット