スプラインフィットの残差を保存するスクリプトこんにちは、
スプライン フィットの新しい列として残差 (または予測) を保存するスクリプトを作成する方法を知っている人はいますか? 手動で行う場合は簡単で、ドロップダウンの赤い三角形で [残差を保存] を選択するだけです。 私は、モデルのフィットを使用して残差をライナー フィットの新しい列として保存するスクリプトの作成方法を知っています。 ただし、標準化された x スプライン フィットを使用して時間傾向データをフィットする必要があることがよくありますが、これより簡単な方法があるかどうかはわかりません。 私の最終目標は、ループ内の複数の変数の残差または予測を取得することなので、単純なスクリプトが非常に役立ちます。
ありがとう!!

Re: スプラインフィットの残差を保存するスクリプトこんにちは、ジム
v14 で残差を保存できるようにするための解決策/修正はありますか?
助けてくれてありがとう
Re: スプラインフィットの残差を保存するスクリプト彭
はい、これは矛盾しているように見えますが、これは予測値を比較するために意図的に行われているのだと思います(たとえば、男性は女性に基づく予測値のホールドアウトセットであり、その逆も同様です)。
Group By モデルに基づいて Predicted の単一列を作成するには、数式を使用して新しい列を作成するか、各値式を設定します。
If( :sex=="M", 男性予測の列, :sex=="F",男性の予測の列)。
残りの列のような列が必要な場合は、男性用の列を作成し、次のような式を使用します。
If( :sex=="M", 男性予測の列, empty() );
次に、女性に対しても同じことを行います。
Re: スプラインフィットの残差を保存するスクリプトすごい、これはすごいですね!!
もう 1 つだけ質問します。
私がする時オブジェクト<SPAN class="token operator"><</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token punctuation"> (</SPAN>曲線<SPAN class="token punctuation">[</SPAN>私<SPAN class="token punctuation">】</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token messages">残差の保存</SPAN><SPAN class="token punctuation">)</SPAN> (:sex) でグループ化すると、JMP は「M」と「F」の残差を計算し、いくつかの空のセルを含む別の列に保存しました。 すべての残差を 1 つの列に取得するには「転置」が必要となるのはそのためです。 ただし、<
ありがとう
Re: スプラインフィットの残差を保存するスクリプト新しい JMP 13 テーブル サブセット リファレンスがとても気に入っています。 ただし、「Get as Matrix」メッセージを使用して値を取得する簡単な方法がまだあります。 重要な構文は dt << get as math( list |index ) です。行方向の最大値関数はありませんが、列方向の最大値である VMax 関数があります。これをJMP 12でテストしました。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
cmat = Transpose(VMax(Transpose(dt << get as matrix(idx)))); //matrix _nby x nrow(dt)
/*the previous line of code is performing these tasks
- get the columns of residuals into a matrix of size nrow(dt) x _nby
- create the transpose: coloumns are rows and rows are columns, size _nby x nrow(dt)
- Vmax is a vertical maximum, it finds the max of each column (previously rows)
returns a 1 x nrow(dt) vector, a row vector
- transpose again so it is a column vector
*/
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous, Values( cmat )
);
Re: スプラインフィットの残差を保存するスクリプト皆さん、解決策をありがとうございました!! のデータテーブルの複数のサブセクションの構文は、JMP12 では機能しません。 複数の行の最大値を返すことに関する別の議論を読みましたが、同様の方法が JMP13 にも適用されていました。 JMP12で複数の行にわたる最大値を取得するより良い方法はありますか? 未知の行数の行値を比較する式を書くのは効率的ではないようです。 ありがとう!
Re: スプラインフィットの残差を保存するスクリプトジム、
JMP 14 でも同じ問題があることに気付きました。JMP サポートによれば、この問題は JMP 14.1 (8 月?) で修正されていると記載されています。
ここにジムのスクリプトを少し修正しました。 残差の単一列を作成します。 データテーブルの複数のサブセクションに新しい (JMP 13 の) 構文を使用します。 これは行ごとに残りの列を取得し、最大値を見つけます (実際には空ではない唯一の値を取得します)。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous,
<< Set Each Value( max(dt[row(),idx]) )
);
Re: スプラインフィットの残差を保存するスクリプト指定された個別の「フィット」ごとに、その残差を個別に保存する必要があります。「Curve[]」リファレンスのサブストリップがこれを処理します。以下の例には、女性の適合度「F」と男性の適合度「M」を生成する GroupBy(:Sex) があります。したがって、「残余の保存」を 2 回発行する必要があります。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
obj << (Curve[1] << Save Residuals);
obj << (Curve[2] << Save Residuals);
あなたの例のためにこのコードをテストしていたとき。JMP 14 がスプライン フィットの残差の保存では機能しないことがわかりました。これをバグとして JMP サポートに報告します。
Re: スプラインフィットの残差を保存するスクリプトありがとうジム! それは動作します。 二変量に「GroupBy」を追加する必要がある場合、すべての残差を保存することは可能ですか? JMP は最後のフィットラインのみを保持しているようです。 ありがとう!
<SPAN class="token function">Names Default To Here</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Open</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"$SAMPLE_DATA/Big Class.jmp"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator">=</SPAN> Bivariate<SPAN class="token punctuation">(</SPAN>
Y<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Weight <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
X<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Height <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,<BR /></SPAN> GroupBy( :Team),
Fit Spline<SPAN class="token punctuation">(</SPAN> 0.1, Standardized <SPAN class="token punctuation">)</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN> <SPAN class="token punctuation">(</SPAN>Curve<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Save Residuals</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Re: スプラインフィットの残差を保存するスクリプトこれらのタイプの構文は、スクリプト索引で見つけることができます。
ヘルプ==>スクリプトインデックス==>二変量==>二変量曲線
そのエントリのスクリプト インデックスの例は次のとおりです。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
Fit Polynomial( 3 )
);
obj << (Curve[1] << Save Residuals);