線の違い2 つの異なる移動オブジェクトの距離と時間を表す 2 本の線があるとします。オブジェクト 1 とオブジェクト 2 の時間測定値は任意の時間です。つまり、オブジェクト 1 の測定時間は、オブジェクト 2 に提供された時間と同じではありません。
グラフ ビルダーで、これらの曲線と時間の *差* をプロットする方法はありますか?
高度な統計モデリングマスカスタマイゼーション品質およびプロセスエンジニアリングRe: 線の違いについてさまざまな提案を組み合わせて、単純な interpolate() - interpolate() を使用して差を計算し、よりスムーズなプロットのラムダ設定を使用して曲線の粒度を調整することもできます。

Open( "$DOWNLOADS/ab.jmp" );
New Column( "diff",
Formula(
rowsA = As Constant( Current Data Table() << get rows where( :Source Table == "a" ) );
rowsB = As Constant( Current Data Table() << get rows where( :Source Table == "b" ) );
xA = As Constant( :time[rowsA] );
xB = As Constant( :time[rowsB] );
posA = As Constant( :position[rowsA] );
posB = As Constant( :position[rowsB] );
If( Min( xA ) <= :time <= Max( xA ) & Min( xB ) <= :time <= Max( xB ),
Interpolate( :time, xA, posA ) - Interpolate( :time, xB, posB ),
.
);
)
);
Graph Builder(
Variables( X( :time ), Y( :diff ), Y( :position ), Overlay( :Source Table ) ),
Elements( Position( 1, 1 ), Points( X, Y, Overlay( 0 ), Legend( 1 ) ), Smoother( X, Y, Overlay( 0 ), Lambda( 0.02 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y ), Smoother( X, Y ) )
);
Re: 線の違いについていくつかの奇妙なライセンス問題* のため、私は今日やっとこれを試すことができました。 それは非常にうまく機能し、非常にエレガントです!
2 つの質問:
- JSL はその方式を変えるほど強力ですか? では、そのプロセス全体を .jsl スクリプトに記述できるでしょうか?
- スムーザーのラムダを変更すると差分曲線が更新されると期待していましたが、更新されません。 さらに詳しく見てみると、「式を保存」は実際にスプライン パラメータを保存しており、使用されている実際のスプラインへの接続を維持していないことがわかります。 後者は合理的には不可能だと思いますか?
再度、感謝します!
***************************************
* JMP v14 が動作しないことに気づかず、最終的に Mac を 11.6 にアップデートする必要がありました。 そこで私は会社を通じて v16 をリクエストしましたが、PO を取得してから実際に v16 ライセンスを取得するまでに文字通り数か月かかりました。 納税証明書、住所変更、PO の問題など、何度もやりとりがありました。 問題が私の会社のサプライチェーンにあるのか、JMP/SAS の営業部門にあるのかはわかりませんが、お金に余裕があればライセンスを取得するのはそれほど難しいことではありません。
Re: 線の違いについて以下は、数式を保存このコマンドは、スムーザーまたはフィット線要素の赤い三角メニューで使用できます。

オーバーレイを使用して 2 つの直線/曲線を取得する Craige の ab.jmp テーブルから始めて、[式の保存] を使用して次のような式を含む新しい列を取得します。
If( :ソース テーブル == "a", スプライン Eval( ... ), :ソース テーブル == "b", スプライン Eval( ... ), . ))
新しい列の数式エディターに移動し、2 つのスプライン式を減算するように数式を変更します。
スプライン Eval( ... ) - スプライン Eval( ... )
そしてそれを GB の Y として使用します。

Re: 線の違いについてはい、退職しましたが、質問に答えることで多くのことを学びました。
@XanGreggグラフビルダーの提案について。
Re: 線の違いについてうわー、素晴らしい解決策ですね! そして非常によく文書化されています、ありがとう!!
唯一良いのは、グラフ ビルダーで 2 行を Shift キーを押しながらクリックして違いの行を要求することは別として、中間のスクリプト作成ステップを行わずに、JMP がこれを単独で実行することです (これは、メンタル モデルから概念的に面倒です)。何をしているかという観点から)、それがどのように機能するのかまったく想像できません。
ありがとう、クレイジ!
(追記:本当に引退したんですか? 趣味で JMP サポートをしていますか?)
Re: 線の違いについてあなたが望むのは区分的線形補間と呼ばれるものだと思います。 どのプラットフォームがその計算式を生成するかはわかりませんが、次のような同様のことができます。 これを使用する場合は、独自のテストを行ってください。
dt = Open( "$desktop/ab.jmp" ); // table with unaligned times for a and b measurements
dt << sort( by( time ), replacetable( 1 ) ); // make sure time is ascending
aRows = dt << getrowswhere( SourceTable == "a" ); // get all the a
bRows = dt << getrowswhere( SourceTable == "b" ); // and b row indexes
aTimes = dt:time[aRows]; // get all the a and b times and positions in
aPositions = dt:position[aRows]; // matrices for the interpolate function
bTimes = dt:time[bRows];
bPositions = dt:position[bRows];
apos = Function( {time}, // tiny wrappers for interpolate
Interpolate( time, aTimes, aPositions )
);
bpos = Function( {time},
Interpolate( time, bTimes, bPositions )
);
dtnew = New Table( "new_ab", // new table is similar to old table
New Column( "Source Table", Character( 1 ), "Nominal" ),
New Column( "time", Numeric, "Continuous", Format( "Best", 12 ) ),
New Column( "position", Numeric, "Continuous", Format( "Best", 12 ) )
);
bigdif = 0; // track the largest difference so it can have a ref line
bigtime = .;
// make a new table covering the range of the data
For( i = min(min(aTimes),min(bTimes))-10, i <= max(max(aTimes),max(bTimes))+10, i += 1,
dtnew << addrows( 1 ); // interpolate a at time i
dtnew:SourceTable = "a";
dtnew:time = i;
dtnew:position = apos( i );
dtnew << addrows( 1 ); // interpolate b at time i
dtnew:SourceTable = "b";
dtnew:time = i;
dtnew:position = bpos( i );
dtnew << addrows( 1 ); // difference at time i
dtnew:SourceTable = "diff";
dtnew:time = i;
dtnew:position = apos( i ) - bpos( i );
If( Abs( dtnew:position ) > bigdif, // capture biggest diff
bigdif = Abs( dtnew:position );
bigtime = i;
);
);
dtnew << Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Variables( X( :time ), Y( :position ), Overlay( :Source Table ) ),
Elements( Points( X, Y, Legend( 21 ) ), Smoother( X, Y, Legend( 22 ), Lambda( 0.000001 ) ) ),
SendToReport(
Dispatch( {}, "time", ScaleBox, {Add Ref Line( bigtime, "Solid", "Black", "big=" || Char( bigtime ), 1 )} ),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 2 )} )
)
);このようにデータを入力します

そして、このような補間されたデータ

次のようなグラフを作成します。
The green curve is blue - red; the ref line is at the first biggest difference.The green curve is blue - red; the ref line is at the first biggest difference.緑の曲線は青 - 赤です。リファレンスラインが最初の最大の違いです。
これがレースであれば、a は 71 秒で勝ち、b は 99 秒で負けます。 a は 43 秒で最も先を行っていました (まあ、おそらく。 元のデータの時間 43 における b の位置についてはあまり確信が持てません。)
元のデータに対する単純な線形近似からはそれを得ることができません。
Original data with linear fit.Original data with linear fit.線形フィットの元のデータ。
Re: 線の違いについて@Mark_Bailey 2 つの直線が線形の場合、2 つの性別グループの体重によって予測される身長の適合モデルの項推定値は -2.079223 になります。線形回帰に単純化した場合、それが線間の違いではないでしょうか?

Re: 線の違いについて
@Mark_Bailey書きました:
その通り。 曲線または形状の複雑さによって、必要なモデルの複雑さが決まります。 データのプロットの写真を見せていただけますか? おそらくそのようなデータには理論的なモデルがあるのでしょうか?
次のステップはモデリングであるため、これ以上お手伝いすることはできませんが、お手伝いするにはどのモデルを知る必要があります。
@Mark_Bailey 、 @Craige_Hales -- はい、点間の線形フィットは問題ありません。 線形補間のため、差が多少跳ね返ることは承知していますが、問題はありません。大まかな大きさを見ているだけです。
Re: 線の違いについてその通り。 曲線または形状の複雑さによって、必要なモデルの複雑さが決まります。 データのプロットの写真を見せていただけますか? おそらくそのようなデータには理論的なモデルがあるのでしょうか?
次のステップはモデリングであるため、これ以上お手伝いすることはできませんが、お手伝いするにはどのモデルを知る必要があります。
Re: 線の違いについて時間と距離の列を含む 1 対のデータ テーブル (オブジェクトごとに 1 つ) がある場合、時間と時間の間の位置を予測する式を保存できます。 数式を一度に引き算すると答えが得られます。 Mark の質問は、Fit Model の線形/二次/その他のモデルが、測定間のオブジェクトの位置の十分な推定値を与えると思うかどうかということだと思います。
Re: 線の違いについていいえ、基本的な JMP v16 があるだけです。
Re: 線の違いについて異なる時点で観察された曲線と比較できる唯一の方法は、それぞれをモデル化し、選択した時点でモデルを比較することです。 モデルは、JMP の他のモデル タイプと同じくらい複雑な線形補間と同じくらい単純なものにすることができます。 JMPプロはありますか? その場合は、データを「関数」として扱い、Functional Data Explorer を使用できます。
一般的なアプローチが理にかなっているというご意見を聞くまでは、詳細には触れません。