Rsquared 値のテーブルをすばやく作成する方法1 つのパラメーターと多くのパラメーターの Rsquared 値を見つけるスクリプトがあります。テーブルに入ると、最適な値を簡単に並べ替えることができます。何年にもわたって非常にうまく機能してきましたが、数万以上のパラメーターの値を見つけるためにプッシュしようとすると、非常に長い時間がかかります。JSLでこれを行うための簡単な方法を誰かが知っているかどうか疑問に思いました。
私が試したことはすべて時間がかかりすぎます:
1. 二変量レポートを作成し、表示ツリーから Rsq を読み取ります。
xyp =二変量(Y(桁(resp))、バツ(評価(事実)), フィット多項式(度), 非表示);
このコマンドは実際には予想よりも速く動作しますが、表示ツリーをループして値を取得するのにほとんどの時間がかかります。
2. モデルの適合を使用 -> StepWise -> 1 項のすべての可能なモデル。
これは、すべての用語について欠落データがないデータ行にのみ適合するようであり、一部の用語については多くの欠落データがある可能性があります。だから私のニーズには合わない。
3. 以下のような関数で平方を合計します。
GetRsquared = function ({x,y}, {sx,sy,ssxx,ssyy,ssxy,nr,np,i},
sx=0;
sy=0;
ssxx=0;
ssyy=0;
ssxy=0;
nr=nrows(y);
np=nr;
for( i=1, i<=nr, i++,
if(is missing(x[i]),np--,
if(is missing(y[i]),np--,
sx=sx+x[i];
sy=sy+y[i];
ssxx=ssxx+x[i]*x[i];
ssyy=ssyy+y[i]*y[i];
ssxy=ssxy+x[i]*y[i]
)));
ssxx=ssxx-sx*sx/np;
ssyy=ssyy-sy*sy/np;
ssxy=ssxy-sx*sy/np;
r2=ssxy*ssxy/ssxx/ssyy
);
Re: Rsquared 値のテーブルをすばやく作成する方法ご協力ありがとうございました。ここで要約したいと思います。将来の JMP 探検家のための記録です。
私は、最大 100,000 項までの 1 つの項と多くの項のすべての R 二乗値をすばやく決定する方法を見つけようとしていました。
私の試行では、Windows 7、64 ビット オペレーティング システム、Intel Core i5-4300U CPU @190 GHz 2.50 Ghz、16 GB RAM を搭載した HP EliteBook を使用して、2,000 項をフィッティングしました。
1) 2 変量フィットをループして表示ツリーから R の 2 乗を読み取る、または 2) ブルート フォーシング計算のいずれかの私の元の方法は、どちらも私のラップトップで約 37 秒かかりました。100,000 タームで約 30 分です。そして、複数の応答項に対してこれを行いたい!
多変量プラットフォームを使用する方法は、すべてのコンピューター リソースを約 15 分間消費し、メモリ不足のためにクラッシュしました。家でこれを試さないでください。
KarenC の Response Screening を使用する方法は 1 秒かかりました。これは明らかに解決策です。mikedriscoll からの回答を解決策としてマークしたのは、彼が議論を要約し、使用するコードを示しているからです。
完全にするために、これが私が最後に使用したコードです。
dt は、元のデータ テーブルです。
resp は、関心のある y 列を指定する文字列です。
fact は、関心のある x 列を指定する文字列のリストです。
dt1 = dt << Response Screening(Y(column(resp)), X(eval(fact)));
// Note: This is not a normal table and JMP will not recognize dt1 as a table
// The 'table' is called "Pvalues". Hopefully you don't already have a table of that name.
// Of course you can write more code to make this error proof.
// To immediately move this information to a normal JMP table I took a subset.
dt2 = Data Table( "PValues" ) << Subset( All rows, Selected columns only( 0 ) );
// Now I can do other things, like ...
dt2 << Sort( By( :RSquare ), Order( Descending ), Replace Table );
rsq = dt2:RSquare<< get as matrix;
Re: Rsquared 値のテーブルをすばやく作成する方法あなたはJSLからResponse Screeningプラットフォームを呼び出すことができます.そこから私のJSLスキルは役に立ちません.
Re: Rsquared 値のテーブルをすばやく作成する方法私のスクリプトに関する最初の質問への回答として、多変量には "Y" 変数しかないため、X と Y を連結して計算させます。 オーバーラップのために何をしたか覚えていませんが、どうにかして処理していると思います。
Karen が指摘した応答のスクリーニングは、私がやろうとしていたことに対してより理にかなっています。どうやらスクリプト化できます。 テストとして実行し、テーブルではなく、レポート出力の赤い三角形を確認してください。 一番上の赤い三角形。 スクリプトの保存 -> スクリプト ウィンドウへをクリックすると、スクリプトが表示されます。 テーブルへの参照と r 値を取得する方法はわかりませんが、おそらくスクリプトが実行される前に開いているテーブルのリストを取得し、生成後に新しいテーブルを見つけます。
応答スクリーニング( Y( .... ), X(.... ) )
Re: Rsquared 値のテーブルをすばやく作成する方法また、新しいデータ テーブルに「ソース」エントリがないことにも驚いています。JMPウィッシュリストにエントリを追加して、これを追加するよう依頼することをお勧めします.
Re: Rsquared 値のテーブルをすばやく作成する方法カレン、
これは非常に高速で、必要なすべてのパラメーターを取得できるようです。
私のアプリケーションは、結果に対して他の処理を行うスクリプトの一部です。
スクリプト化できると思いますか?
テーブルのソース変数がないことに驚いています。
Re: Rsquared 値のテーブルをすばやく作成する方法マイク、
返信ありがとうございます。これを試しました。これは、すべてのデータに共通する用語の R のみを記録していますか?データの不良列に対して堅牢かどうか疑問に思います。
パット
Re: Rsquared 値のテーブルをすばやく作成する方法最近、私は RSq 値を取得するために Analyze>Screening>Resposne Screening (JSL だけでなく UI) を使用しています。これは、1 対多のパラメーター、または多対多のパラメーターで機能します。 速いです。 最終的には他の情報が得られますが、RSq 値は生成される pvalue テーブルにあります。 ボーナス ヒント: P 値テーブルでは、行 (パラメーターのペア) を選択し、"Fit Selected Items" テーブル スクリプトを実行して、2 変量フィットを取得できます。 本当に信じる前に、数値的に強く見える関係を常に見たいと思っているので、これが大好きです。
Re: Rsquared 値のテーブルをすばやく作成する方法ほぼ同じことを行うスクリプトがあります。 以前は二変量を使用していましたが、現在は多変量を使用しています (以下のスクリプトのサブセットを参照)。最近、まだ修正していないバグを見つけました。列名に特殊文字が含まれている可能性があります。 しかし、全体としてこれはうまくいくはずです。 このような大規模なデータセットで使用したかどうかは覚えていませんが、使用したデータの場合、これははるかに高速でした.一般的な x の数と y の一般的な数を取得するには、実際には (num_x + num_y) と (num_x + num_y) を計算していることに注意してください。これは、2 変量をループするよりも高速です。
編集:カレンの方法は、これよりもはるかに効率的/エレガントに見えます。 スクリプトを更新する必要がある場合は、間違いなくその方法を確認します。
numX = nitems(xParamNames);
numy = nitems(yParamNames);
yxParamNames = concat(yParamNames, xParamNames);
mvObj = Multivariate(
// Y(evallist(yParamList)
Y(evallist(yxParamNames)
),
Estimation Method( "Row-wise" ),
Matrix Format( "Square" ),
Scatterplot Matrix(0
)
);
corrMatrixObj = mvObj << xpath( "//OutlineBox[ text() = 'Correlations']//MatrixBox");
corrMatrix = corrMatrixObj << get();
corrMatrix = corrMatrix[1];
corrMatRows = 1::numY;
corrMatCols = (numY+1)::(numY+numX);
sub_corrMatrix = corrMatrix[corrMatRows,corrMatCols];
myRsqr = aslist(power(sub_corrMatrix,2)); // rsqr is corr matrix to the power 2. rest of script expects a list.
mvObj<< closewindow();