선의 차이두 개의 서로 다른 움직이는 물체에 대한 거리 대 시간이라는 두 개의 선이 있다고 가정합니다.객체 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: 선의 차이몇 가지 이상한 라이센스 문제로 인해* 마침내 오늘에서야 이 기능을 사용해 볼 수 있었습니다. 그것은 아주 잘 작동하고 매우 우아합니다!
두 가지 질문:
- JSL은 저를 위해 공식을 변경할 만큼 강력합니까? 그러면 전체 프로세스를 .jsl 스크립트로 작성할 수 있습니까?
- 더 부드러운 모드에서 람다를 변경하면 차이 곡선이 업데이트될 것으로 예상했지만 그렇지 않습니다. 더 자세히 살펴보면 "수식 저장"이 실제로 사용 중인 실제 스플라인과의 연결을 유지하지 않고 스플라인 매개변수를 저장한다는 것을 알 수 있습니다. 후자가 합리적으로 가능하지 않다고 생각합니까?
다시 한 번 감사드립니다!
****************************************
* 마침내 Mac을 11.6으로 업데이트해야 했지만 JMP v14가 Mac에서 작동하지 않는다는 사실을 깨닫지 못했습니다. 그래서 회사를 통해 v16을 요청했고, PO를 받은 후 실제로 v16 라이선스를 받는 데 말 그대로 몇 달이 걸렸습니다. 세금 증명서, 주소 변경, PO 문제로 수많은 고민이 있었습니다. 문제가 우리 회사의 공급망 때문인지 아니면 JMP/SAS의 영업 부서 때문인지는 알 수 없지만, 돈이 있다면 라이센스를 얻는 것이 그렇게 어렵지는 않을 것입니다.
Re: 선의 차이다음은 수식 저장 부드럽게 또는 맞춤선 요소에 대한 빨간색 삼각형 메뉴에서 명령을 사용할 수 있습니다.

두 개의 선/곡선을 얻기 위해 오버레이를 사용하는 Craige의 ab.jmp 테이블부터 시작하여 수식 저장을 사용하여 다음과 같은 수식이 포함된 새 열을 얻습니다.
If( :소스 테이블 == "a", 스플라인 평가( ... ), :소스 테이블 == "b", 스플라인 평가( ... ), . ))
새 열의 수식 편집기로 이동하여 수식을 변경하여 두 개의 스플라인 표현식을 뺍니다.
스플라인 평가( ... ) - 스플라인 평가( ... )
그리고 이를 GB 단위의 Y로 사용합니다.

Re: 선의 차이네, 은퇴했습니다. 질문에 답하면서 많은 것을 배웠습니다.
@XanGregg 그래프 빌더 제안을 위해.
Re: 선의 차이와, 인상적인 솔루션이네요! 그리고 매우 잘 문서화되어 있습니다. 감사합니다!!
더 나은 점은 JMP가 중간 스크립팅 단계 없이 이 작업을 자체적으로 수행하는 것입니다. 하지만 그래프 빌더에서 Shift 키를 누른 채 두 줄을 클릭하고 차이 선을 묻는 것(이는 정신 모델의 개념상 지저분합니다.) 무엇을 하고 있는지의 관점), 그것이 어떻게 작동할지 실제로 상상할 수 없습니다.
고마워요, 크레이지!
(ps. 정말 은퇴하셨나요? 재미로 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.녹색 곡선은 파란색-빨간색입니다. 기준선은 첫 번째 가장 큰 차이점에 있습니다.
이것이 경주라면 a는 71초 만에 이기고 b는 99초 만에 졌다. a가 43초로 가장 앞서 있었습니다. 원본 데이터에서 43번 시점의 b 위치에 대해서는 확신할 수 없습니다.)
원본 데이터에 대한 간단한 선형 맞춤으로는 이를 얻을 수 없습니다.
Original data with linear fit.선형 피팅이 적용된 원본 데이터입니다.
Re: 선의 차이@마크_베일리 두 선이 선형인 경우 두 성별 그룹에 대해 체중으로 예측된 신장 적합 모델은 결국 -2.079223의 용어 추정치를 갖게 됩니다. 선형 회귀로 단순화하면 선의 차이가 아닌가요?

Re: 선의 차이
@마크_베일리 썼다:
정확히. 곡선이나 모양의 복잡성에 따라 필요한 모델의 복잡성이 결정됩니다. 데이터 플롯의 그림을 보여줄 수 있습니까? 아마도 그러한 데이터에 대한 이론적 모델이 있을까요?
다음 단계는 모델링이기 때문에 더 이상 도움을 드릴 수 없습니다. 하지만 도움을 드리기 위해서는 어떤 모델이 무엇인지 알아야 합니다.
@마크_베일리 , @Craige_Hales -- 예, 점 사이에 선형으로 맞춰도 괜찮습니다. 선형 보간으로 인해 차이가 다소 탄력이 있다는 것을 알고 있지만 괜찮습니다. 대략적인 크기만 보고 있는 것입니다.
Re: 선의 차이정확히. 곡선이나 모양의 복잡성에 따라 필요한 모델의 복잡성이 결정됩니다. 데이터 플롯의 그림을 보여줄 수 있습니까? 아마도 그러한 데이터에 대한 이론적 모델이 있을까요?
다음 단계는 모델링이기 때문에 더 이상 도움을 드릴 수 없습니다. 하지만 도움을 드리기 위해서는 어떤 모델이 무엇인지 알아야 합니다.
Re: 선의 차이시간과 거리에 대한 열이 포함된 개체당 하나씩 한 쌍의 데이터 테이블이 있는 경우 시간 사이의 위치를 예측하는 공식을 저장할 수 있습니다. 한 번에 공식을 빼면 답이 나옵니다. Mark의 질문은 Fit Model의 선형/2차/기타 모델이 측정 간 개체 위치에 대한 충분한 추정치를 제공할 것이라고 생각하는지 여부입니다.
Re: 선의 차이아니요. 기본 JMP v16만 있습니다.
Re: 선의 차이서로 다른 시간에 관찰된 곡선과 비교할 수 있는 유일한 방법은 각 곡선을 모델링하고 선택한 시간에 모델을 비교하는 것입니다. 모델은 선형 보간만큼 간단할 수도 있고 JMP의 모든 모델 유형만큼 복잡할 수도 있습니다. JMP Pro가 있나요? 그렇다면 데이터를 '함수'로 처리하고 Functional Data Explorer를 사용할 수 있습니다.
일반적인 접근 방식이 타당하다는 의견을 듣기 전까지는 자세히 설명하지 않겠습니다.