교정 곡선을 스크립팅하는 방법안녕하세요, 제 스크립팅 수준은 정말 기초적이며 여러분이 저를 도와주실 수 있기를 바랍니다.
다음을 달성하기 위해 스크립트를 어떻게 작성합니까?
알려진 교정기 농도가 있는 표가 있습니다. 각 분석(분석당 하나의 테이블)에서 나는 몇 가지 미지의 신호와 교정기에 대한 신호를 가지고 있으며 기본적으로 각 분석에 대한 내부 교정 곡선입니다.
알려진 농도 표에서 값을 가져와 해당 특정 분석(분석 표)에 대한 신호에 대해 플롯한 다음 선형 회귀를 사용하여 미지 농도를 계산하는 스크립트를 만들 수 있습니까?
도움을 주셔서 미리 감사드립니다!
Re: 보정 곡선을 스크립팅하는 방법이것은 완벽 해요! 나는 당신에게 충분한 감사를 표할 수 없습니다.
Re: 보정 곡선을 스크립팅하는 방법
Names Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join( With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// placeholders for matching information
combined
<< New Column( "Predicted AU 2", "Numeric", "Continuous" )
<< New Column( "Lower 95%", "Numeric", "Continuous" )
<< New Column( "Upper 95%", "Numeric", "Continuous" );
// handle each sample set separatelySummarize( sample = By( combined:Sample ) );
Summarize( sample list = By( combined:Sample ) );
For( s = 1, s <= N Items( sample list ), s++,
// isolate sample
combined
<< Select Where( :Sample == sample list[s] )
<< Invert Row Selection
<< Exclude;
// fit the calibration curve for this sample
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// access report layer
fit rep = fit << Report;
title = fit rep[OutlineBox(1)] << Get Title;
fit rep[OutlineBox(1)] << Set Title( title || ", Sample = " || sample list[s] );
// determine the assay for the unknown samples from the calibration curve
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
fit << Inverse Prediction( Response( :AU 1[] ) );
);
);
// remove extraneous string column box that interferes with making combined data table
(fit rep << XPath( "//StringColBox[StringColBoxHeader=\!"Type of CI\!"]")) << Delete;
// extract the assays into a new data table
assays = fit rep["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
// fit << Close Window;
// prepare predicted values for join
assays
<< Delete Columns( Column( assays, 1 ) )
<< New Column( "Sample", "Character", "NominaL" )
<< New Column( "Peps", "Character", "NominaL" );
Current Data Table( combined );
r = 1;
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
assays:Sample[r] = combined:Sample;
assays:Peps[r] = combined:Peps;
r++;
);
);
combined << Clear Row States;
combined << Update(
With( assays ),
Match Columns(
:Sample = :Sample,
:Peps = :Peps
)
);
Close( assays, No Save );
);
Re: 보정 곡선을 스크립팅하는 방법이것이 마지막 요청입니다. 약속합니다!
스크립트가 좀 더 일반적이고 이름에 관계없이 모든 샘플 세트에 적용될 수 있도록 이 부분을 어떻게 다시 작성해야 합니까? 예를 들어 다음과 같이 작성하는 대신
샘플 = 목록("001-AAA", "002-AAA", "003-AAA", "004-AAA");
샘플 열의 요약을 만들고 목록을 만들기 위해 해당 항목을 가져오도록 코딩할 수 있습니까?
Bivariate 기능으로 보정 곡선을 플로팅하고 마지막에 표시하여 수행된 맞춤을 시각적으로 확인할 수 있다면 좋을 것입니다.
Re: 보정 곡선을 스크립팅하는 방법완벽한!
모든 것에 감사드립니다 마크!
Re: 보정 곡선을 스크립팅하는 방법인덱스는 이제 반복 횟수에만 사용됩니다. 특정 샘플 라벨은 반복 전에 목록에 캡처됩니다.
// handle each sample set separately
sample = List( "001-AAA", "002-AAA", "003-AAA" );
For( s = 1, s <= 3, s++,
// isolate sample
combined
<< Select Where( :Sample == sample[s] )
<< Invert Row Selection
<< Exclude;
Re: 보정 곡선을 스크립팅하는 방법당신이 저를 오해했다고 생각합니다. 의심의 여지가 있다는 것은 코드의 기능을 이해하지 못했다는 뜻입니다. 나는 코딩에 대해 거의 알지 못하며 감히 당신의 코드를 의심하지 않을 것입니다!나는 단지 당신을 이해하고 배우려고 노력하고 있습니다.
첫 번째 예를 이해했다고 생각합니다.
두 번째 예에서 숫자 대신 샘플에도 텍스트 지정이 있는 경우 코드는 어떻게 변경됩니까? 예를 들어 샘플 1, 2, 3 대신 샘플 001-AAA, 002-AAA, 003-AAA?
Re: 보정 곡선을 스크립팅하는 방법당신은 내 코드를 의심? 글쎄, 그것은 당신의 특권입니다.
첫 번째 예는 열 수식 속성을 사용하지 않고 새 열을 채웁니다.
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
그만큼 각 행에 대해() 함수는 현재 데이터 테이블의 행을 반복합니다. 인덱싱 행을 자동으로 처리합니다. 따라서 할당은 행 단위로 발생합니다. 과제의 오른쪽은 만약에() 기능. 첫 번째 인수는 부울 식으로 해석됩니다. 이 표현식이 true로 평가되면 두 번째 인수("Calibrator")가 평가되고 반환됩니다. 그렇지 않으면 세 번째 인수("알 수 없음")가 평가되어 반환됩니다. 첫 번째 인수는 Peps 번호가 1에서 29 사이인지 여부를 결정합니다. 숫자 문자열은 정규식으로 추출되어 숫자로 변환됩니다. 정규식은 3단어 문자 다음에 하나 이상의 숫자 문자가 오는 패턴과 일치합니다. 역참조는 캡처 그룹만 반환합니다.
두 번째 예는 데이터 세트의 세 샘플을 반복합니다.
For( s = 1, s <= 3, s++,
// isolate sample
ss = Char( s );
combined
<< Select Where( :Sample == ss )
<< Invert Row Selection
<< Exclude;
데이터 열 속성과 일치하도록 문자열로 변환되는 정수 인덱스를 사용합니다. (1) 현재 샘플에 대한 모든 행을 선택하고, (2) 현재 샘플이 아닌 모든 행으로 선택을 변경하고, (3) 해당 행을 제외하기 위해 결합된 데이터 테이블에 일련의 메시지를 보냅니다. 이 접근 방식은 일반적으로 데이터 테이블을 부분 집합화하고 나중에 데이터 테이블을 결과와 조인하고 연결하는 것보다 더 간단하고 빠릅니다.
Re: 보정 곡선을 스크립팅하는 방법완벽하게 작동합니다! 감사합니다.
나는 각 코드 라인이 무엇을 하는지 이해하고 있다고 생각한다. 나는 이것들에 대해 몇 가지 의심이 있습니다.
<SPAN class="token function">For Each Row</SPAN><SPAN class="token punctuation">(</SPAN>
<SPAN class="token punctuation">:</SPAN>Status <SPAN class="token operator">=</SPAN> <SPAN class="token function">If</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token operator"><=</SPAN> <SPAN class="token function">Num</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token function">Regex</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Peps<SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"\w{3}(\d+)"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"\1"</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><=</SPAN> <SPAN class="token number">29</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"Calibrator"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"Unknown"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN><SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> s <SPAN class="token operator">=</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> s <SPAN class="token operator"><=</SPAN> <SPAN class="token number">3</SPAN><SPAN class="token punctuation">,</SPAN> s<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
<SPAN class="token comment">// isolate sample</SPAN>
ss <SPAN class="token operator">=</SPAN> <SPAN class="token function">Char</SPAN><SPAN class="token punctuation">(</SPAN> s <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
combined
<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Select Where</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Sample <SPAN class="token operator">==</SPAN> ss <SPAN class="token punctuation">)</SPAN>
<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Invert Row Selection
</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Exclude</SPAN><SPAN class="token punctuation">;</SPAN>
저에게 설명해 주시겠습니까?
Re: 보정 곡선을 스크립팅하는 방법Names Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join( With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// placeholders for matching information
combined
<< New Column( "Predicted AU 2", "Numeric", "Continuous" )
<< New Column( "Lower 95%", "Numeric", "Continuous" )
<< New Column( "Upper 95%", "Numeric", "Continuous" );
// handle each sample set separately
For( s = 1, s <= 3, s++,
// isolate sample
ss = Char( s );
combined
<< Select Where( :Sample == ss )
<< Invert Row Selection
<< Exclude;
// fit the calibration curve for this sample
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// determine the assay for the unknown samples from the calibration curve
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
fit << Inverse Prediction( Response( :AU 1[] ) );
);
);
// access report layer
fit rep = fit << Report;
// remove extraneous string column box that interferes with making combined data table
(fit rep << XPath( "//StringColBox[StringColBoxHeader=\!"Type of CI\!"]")) << Delete;
// extract the assays into a new data table
assays = fit rep["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
// prepare predicted values for join
assays
<< Delete Columns( Column( assays, 1 ) )
<< New Column( "Sample", "Character", "NominaL" )
<< New Column( "Peps", "Character", "NominaL" );
Current Data Table( combined );
r = 1;
For Each Row(
If( Not( Excluded( Row State( Row() ) ) ),
assays:Sample[r] = combined:Sample;
assays:Peps[r] = combined:Peps;
r++;
);
);
combined << Clear Row States;
combined << Update(
With( assays ),
Match Columns(
:Sample = :Sample,
:Peps = :Peps
)
);
Close( assays, No Save );
);Re: 보정 곡선을 스크립팅하는 방법예, 내부 교정기로 29개의 펩이 있습니다. 이러한 특정 29개의 펩은 보정 테이블에서 AU 2 값을 가져온 다음 각 세트가 샘플 번호와 관련된 나머지 펩을 보정해야 합니다.
나는 같은 게시물에서 두 가지 다른 것을 요구함으로써 이것을 더 혼란스럽게 만들었다고 생각합니다. 나는 그 일에 대해 유감이다.
Re: 보정 곡선을 스크립팅하는 방법그렇다면 세 개의 샘플 세트를 별도로 처리해야 합니까?
Re: 보정 곡선을 스크립팅하는 방법제가 너무 빨리 말을 한 것 같습니다. 하나의 문제 마크가 있습니다. 현재 스크립트는 모든 AU 2 값을 calib 테이블에서 unk 테이블 요새로 교정기를 가져오고 있으며 괜찮습니다. 그러나 새 테이블은 맞춤 모델에 사용하기 위해 교정기 지정과 함께 할당된 모든 것을 사용하고 미지수는 해당 모델(샘플 1, 2 및 3의 교정기가 함께 풀링됨)에서 예측되고 있습니다. 맞습니까?
내가 필요한 것은 샘플당 적합 모델이며 해당 샘플의 미지수는 해당 샘플과 관련된 적합 모델로만 결정됩니다.
Re: 보정 곡선을 스크립팅하는 방법이것은 완벽 해요! 정말 고마워 마크!
Re: 보정 곡선을 스크립팅하는 방법알겠습니다. 설명해 주셔서 감사합니다.
Names Default to Here( 1 );
// check for sufficient tables
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// identify the calibration and unknown data tables
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload the dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// include AU 2 values for calibrators from calibration table
combined = cal table << Join(
With( unk table ),
Copy formula( 0 ),
Select With( :Sample, :Peps, :AU 1 ),
Select( :AU 2 ),
By Matching Columns( :Peps = :Peps ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 0, 1 ),
Preserve Main Table Order( 0 )
);
Close( cal table, No Save );
Close( unk table, No Save );
// distinquish peps
Current Data Table( combined );
combined << New Column( "Status", "Character", "Nominal" );
For Each Row(
:Status = If( 1 <= Num( Regex( :Peps, "\w{3}(\d+)", "\1" ) ) <= 29, "Calibrator", "Unknown" );
);
// fit the calibration curve
dlg = combined << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Where( :Status == "Calibrator" )
);
fit = dlg << Run;
// determine the assay for the unknown samples from the calibration curve
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// extract the assays into a new data table
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// add the assays to the unknown table
final = combined << Join(
With( assays ),
Copy formula( 0 ),
By Matching Columns( :AU 1 = :Specified AU 1 ),
Drop Multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve Main Table Order( 1 )
);
Close( combined, No Save );
Close( assays, No Save );
final << Sort(
By( :Peps, :Sample ),
Order( Ascending, Ascending ),
Replace Table
);
AU 1의 무작위 측정으로 인해 예측된 AU 2 값 중 일부가 누락되었습니다.
Re: 보정 곡선을 스크립팅하는 방법완벽하게 작동했습니다. 그리고 그것은 내가 도움을 요청한 것을 수행합니다. 그러나 내 초기 게시물에는 두 부분이 있습니다. 첫 번째는 저에게 보여주신 것처럼 보정 스크립트를 작성하는 방법을 아는 것이었습니다.
첫 번째와 관련이 없으므로 완전히 다른 스크립트가 되는 두 번째는 다음을 수행하는 것입니다.
알려지지 않은 테이블에는 3개의 샘플이 있으며 각 샘플은 74 Peps에 대해 분석되었습니다. 그 Peps 중 29개는 나머지 45개를 보정하는 데 사용하고 싶습니다. 그리고 교정 테이블에서 AU 2 값을 가져와서 그렇게 하고 싶습니다. 따라서 스크립트는 보정 테이블에서 AU 2 값을 가져오고 알 수 없는 테이블의 각 샘플에 대해 1-29 Peps와 결합한 다음 각 샘플 및 속성 AU 2에 대한 보정 곡선(선형 회귀)을 만들어야 합니다. 나머지 45 Peps에 대한 값.
나와 함께 해주셔서 감사합니다!
값이 상관관계가 없다는 것을 알고 있습니다. 이들은 스크립팅 방법을 배우기 위한 목적으로 무작위로 생성된 값입니다.
Re: 보정 곡선을 스크립팅하는 방법나는 혼란스럽다.
우선, 효과가 있었는지 없었습니까? 어느 정도 효과가 있었나요?
둘째, 예, 교정은 전적으로 교정 표의 AU 1 및 AU 2 값으로 수행됩니다. 그렇지 않습니까?
셋째, 알 수 없는 테이블에 AU 2 값이 없습니다. 예측된 알 수 없는 AU 2 값을 사용하시겠습니까?
넷째, 이것은 교정 정의에 대한 변경입니까, 아니면 AU를 예측한 후 새로운 요구 사항(다음 단계)입니까? 알 수 없는 테이블에 2?
다섯째, 샘플이란? Peps와 어떤 관련이 있습니까?
여섯째, Pep1 ~ Pep29에 대한 캘리브레이터 테이블의 AU 1이 상관되어야 하지 않습니까? 그렇지 않습니다:

나는 아마도 매우 중요하고 매우 기본적인 것을 놓치고 있을 것입니다.
Re: 보정 곡선을 스크립팅하는 방법감사합니다 Mark, 이제 작동했습니다.
내가 이해한 바로는 스크립트를 보면 이것은 교정기 테이블의 AU 1 및 AU 2 값을 사용하여 간단한 교정을 위한 것입니다. 예?
캘리브레이터가 캘리브레이터 테이블에 지정된 AU 1 값 대 알 수 없는 테이블의 AU 2가 되도록 재정렬한 다음(각 샘플에 대해 다른 캘리브레이터로 만들기) 나머지 구성 요소에 대한 AU 2 값을 예측할 수 있습니다. 샘플에서?
Re: 보정 곡선을 스크립팅하는 방법버전 문제입니다. JMP 13을 열었고 (1) 함수가 더 이상 강조 표시되지 않았고 (2) 스크립팅 인덱스에서 찾을 수 없습니다.
나는 그럴 때 싫어!
다음 해결 방법을 시도하십시오.
Names Default to Here( 1 );
// find all open data tables
/* for JMP 14 and later:
tables = Get Data Table List();
*/
n tables = N Table();
If( n tables < 2,
Throw( "Two data tables are required for this analysis" )
);
tables = List();
For( t = 1, t <= n tables, t++,
Insert Into( tables, Eval( Data Table( t ) << Get Name ) );
);
// present open tables for assignment as calibration or unknown.
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// perform the linear calibration
dlg = cal table << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
fit = dlg << Run;
// perform inverse prediction on unknown
Current Data Table( unk table );
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// unload unknown assays
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// join with unknown table
unk table << Join(
With( assays ),
By Row Number
);
Close( assays, No Save );
// plot predictions with 95% confidence intervals versus actual
unk table << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :AU 1 ),
Y( :Lower 95% ),
Y( :Upper 95%, Position( 1 ) ),
Y( :Predicted AU 2, Position( 1 ) )
),
Elements(
Bar( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 8 ), Bar Style( "Interval" ) )
),
SendToReport(
Dispatch( {}, "AU 1", ScaleBox, {Format( "Best", 12 )} ),
Dispatch( {}, "Lower 95%", ScaleBox, {Format( "Fixed Dec", 12, 0 )} )
)
);Re: 보정 곡선을 스크립팅하는 방법JMP 버전 문제(JMP 13.1이 있음)일 수 있지만 스크립트가 작동하지 않습니다. JSL 디버거를 사용했는데 처음에 오류가 발생했습니다. Name Unresolved: Get Data Table List in access or evaluation of 'Get Data Table List' , Get Data Table List() /*###*/
Re: 보정 곡선을 스크립팅하는 방법나는 기본적인 문제를 이해하고 있다고 생각하지만 세부 사항을 놓쳤을 수 있습니다. 두 데이터 테이블이 열린 상태에서 이 스크립트를 시도하십시오(보정 테이블 및 알 수 없는 테이블).
Names Default to Here( 1 );
// find all open data tables
tables = Get Data Table List();
If( N Items( tables ) < 2,
Throw( "Two data tables are required for this analysis" )
);
dlg = New Window( "Assay Unknown Samples", << Modal,
H List Box(
lb = List Box( tables ),
Line Up Box( N Col( 2 ),
Button Box( "Calibrator Table",
sel = lb << Get Selected;
cal lb << Append( sel );
),
cal lb = List Box( {},
N Lines( 1 )
),
Button Box( "Unknown Table",
sel = lb << Get Selected;
unk lb << Append( sel );
),
unk lb = List Box( {},
N Lines( 1 )
)
)
),
H List Box(
Button Box( "OK",
cal table = cal lb << Get Items;
Show( cal table );
unk table = unk lb << Get Items;
Show( unk table );
),
Button Box( "Cancel" )
)
);
If( dlg["Button"] == -1,
Throw( "User cancelled" )
);
// unload dialog
cal table = Data Table( cal table[1] );
unk table = Data Table( unk table[1] );
// perform the linear calibration
dlg = cal table << Fit Model(
Y( :AU 1 ),
Effects( :AU 2 ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
fit = dlg << Run;
// perform inverse prediction on unknown
Current Data Table( unk table );
For Each Row(
fit << Inverse Prediction( Response( :AU 1[] ) );
);
// unload unknown assays
assays = Report( fit )["Inverse Prediction"][TableBox(1)] << Make Combined Data Table;
fit << Close Window;
assays << Delete Columns( Column( assays, 1 ) );
// join with unknown table
unk table << Join(
With( assays ),
By Row Number
);
Close( assays, No Save );
// plot predictions with 95% confidence intervals versus actual
unk table << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :AU 1 ),
Y( :Lower 95% ),
Y( :Upper 95%, Position( 1 ) ),
Y( :Predicted AU 2, Position( 1 ) )
),
Elements(
Bar( X, Y( 1 ), Y( 2 ), Y( 3 ), Legend( 8 ), Bar Style( "Interval" ) )
),
SendToReport(
Dispatch( {}, "AU 1", ScaleBox, {Format( "Best", 12 )} ),
Dispatch( {}, "Lower 95%", ScaleBox, {Format( "Fixed Dec", 12, 0 )} )
)
);
스크립트는 유연하지 않지만 시작입니다.
Re: 보정 곡선을 스크립팅하는 방법다음은 두 가지 예제 테이블입니다. 하나는 교정기 테이블입니다. 다른 테이블은 측정된 값(AU 1)이 있고 알 수 없는 값(AU 2)을 얻기 위해 보정이 필요한 테이블입니다. 조금 복잡하게 하기 위해 이 표에는 3개의 서로 다른 샘플에 대한 측정값이 있으며 이 3개의 샘플 각각에는 교정기를 만드는 데 사용된 구성 요소도 포함되어 있습니다. 따라서 각 샘플에는 일종의 내부 교정기가 있습니다.
내부 캘리브레이터가 있다는 사실을 완전히 생략하는 캘리브레이션을 스크립팅하는 방법을 아는 것이 좋습니다(캘리브레이터 테이블에 있는 것에 대한 단순 선형 회귀 및 샘플 테이블에서 미지수를 얻기 위해 표현식 사용). 그리고 각 샘플(샘플 테이블)에 있는 교정기 구성 요소의 측정값(AU 1)을 사용하고 교정기 테이블의 알려진 값(AU 2)에 대해 플롯하고 다음을 계산하는 교정을 스크립팅하는 방법을 아는 것이 훨씬 더 좋습니다. 해당 특정 샘플에 대한 미지수이며 샘플 테이블에 있는 각 샘플에 대해 동일한 작업을 수행합니다.
영어는 제 모국어가 아니므로 제가 좀 더 명확하게 말해야 한다면 알려주세요.
당신이 나를 도울 수 있기를 바랍니다.
건배.
Re: 보정 곡선을 스크립팅하는 방법분석 방법 및 프로세스를 확인해주셔서 감사합니다. 대본으로 가십시오!
데이터 샘플을 제공할 수 있습니까? 일반 이름(익명 데이터)을 사용할 수 있습니다. 그렇게 하면 스크립트가 데이터 테이블에서 무엇을 기대해야 하는지 이해할 수 있습니다.
Re: 보정 곡선을 스크립팅하는 방법고마워 마크.
사용자 지정 역 예측을 얻기 위해 언급한 단계를 따랐습니다. 예, 선형 회귀입니다.
내 문제는 내가 입력할 수 있는 제한된 수의 무지입니다. 스크립팅 질문은 내가 수천 개의 미지수를 가지고 있고 절차를 스크립팅하면 모든 미지수에 대한 값을 얻을 수 있을 것이라고 가정했습니다.
Re: 보정 곡선을 스크립팅하는 방법먼저 JMP를 사용하여 이 분석을 대화식으로 수행하는 방법을 배우는 것이 좋습니다. 보다 돕다 > 서적 > 예측 및 전문 모델링 > 장에 대해 맞춤 곡선 . 목적에 맞게 이 플랫폼을 사용하는 방법을 설명합니다. 자신의 데이터를 분석하려고 시도하기 전에 안내하고 연습하는 데 도움이 되는 예제가 포함되어 있습니다.
현재 검량선에 어떤 모델을 사용하고 있습니까? 선형 회귀를 언급했습니다. 이 경우 Fit Curve 옆에 있는 빨간색 삼각형을 클릭하고 다항식 > 선형 맞춤 . 이제 선형 옆에 있는 빨간색 삼각형을 클릭하고 사용자 정의 역 예측 . 알 수 없는 응답을 입력할 수 있는 대화 상자가 나타납니다.
적합 곡선 플랫폼을 먼저 대화식으로 사용하여 이 분석이 적절하고 원하는 결과를 산출하는지 확인하십시오. 그런 다음 스크립트로 도움을 드릴 수 있습니다.