セグメント化された回帰<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP でセグメント回帰を実行し、ブレークポイント (2 つの線が交わる場所) を計算する方法を知っている人はいますか?
Re: セグメント回帰これをまだ見ていない人のために、私の同僚が書いた役立つ可能性のあるブログを紹介します。 @JerryFish JMP で区分的フィッティングを構築および操作する方法 (非線形プラットフォームを使用):区分的非線形解法パート 3: JMP の数式エディターを使用して未知のパラメーターを解決します。
この議論とよく一致するので、これをここに含めます。
Re: セグメント回帰私はつい最近これを試してみましたが、私にとっては非線形プラットフォーム ユーティリティよりも理にかなっています。反復スキームがどのようにして解に収束するのかを理解したいのですが?データに適切な d (カットポイント) の値を選択しようとしましたが、d の値を「ロック」し、非線形プラットフォームは以下を使用して起動されました。
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
コードの一部。
この短いスクリプトを変更して、代わりにデータテーブルを呼び出す簡単な方法はありますか? (X と Y の値を手動で入力する)?
これは「JSL 初心者の質問」だと思いますので、あらかじめお詫び申し上げます。
私はこれを奇妙なやり方で、列、{X、Y、Ypred} と入力されたデータを含む保存されたデータテーブルに次の内容だけをコピーして貼り付けました。
Parameter( {a = 5, b = 45, c = -100, d = 0.109}, a + b * :X + c * (:X - d) * (:X > d) );
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );こうして私はデータの結果に到達しました。コミュニティへの貢献に改めて感謝いたします。
Re: セグメント回帰ありがとう、これを試してみます!
Re: セグメント回帰Dodo が示唆しているように、区分回帰は非線形プラットフォームで実行できます。 以下は、上記の壊れたスティックの例に基づいた例です。
New Table( "piecewise",
Add Rows( 20 ),
New Column( "X",
Continuous,
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] )
),
New Column( "Y",
Numeric,
Set Values( [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19] )
),
New Column( "Ypred",
Numeric,
Formula( Parameter( {a = 20, b = 1, c = -10, d = 10}, a + b * :X + c * (:X - d) * (:X > d) ) )
)
);
Nonlinear( Y( :Y ), X( :Ypred ), Newton, Finish );
Re: セグメント回帰単純な壊れたスティック関係の場合は、次のようなことができます。
// Create a broken stick relationship with some noise;
x = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
y = [15, 12, 27, 31, 26, 31, 42, 47, 56, 56, 47, 46, 36, 44, 38, 35, 34, 35, 25, 19];
expr_FX = expr(a + b*x + c*(x-d):*(x>d));
expr_SSE = expr(sum((y-expr_FX)^2));
// Supply a set of starting values;
a = 20; b = 1; c = -10; d = 15;
print("Starting values:");
show(a, b, c, d);
sse = minimize(expr_SSE, {a, b, c, d}, << tolerance(1e-5));
print("Final estimates:");
show(a, b, c, d);
show(eval(expr_FX));
上記は、JMP 10 マニュアルの第 8 章の最小二乗法の例に基づいており、例の指数モデルの式に壊れた棒の関係を置き換えています。ブレークポイントはパラメータ d になります。これは、線の傾きが変化する x 値です。2 つの行列 (xd) と (x>d) を乗算するときは、要素ごとの積が必要になることに注意してください。単純な乗算とは対照的に。また、式が収束するためには、ブレークポイントとして比較的適切な開始値も必要になるでしょう。この例では、すべての出力がログに書き込まれます。
おそらく、これは非線形プラットフォーム (分析 | モデリング | 非線形) でも設定できると思われますが、データ テーブル内で数式を使用することにあまり慣れていないため、まだ試していません。それは少しでも役に立ちますか?