[JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 여러분,
저는 다양한 측정 항목(500개 이상)에 대한 TOST(양측 일측 T 검정)를 자동화하는 JSL 스크립트를 작성하고 싶습니다.
TOST는 "레벨" 쌍으로 작동하므로 2x 레벨로 작업하는 것이 쉽습니다. "쌍"당 1x 행만 필요하기 때문입니다.
저는 이미 "결합된 데이터 테이블"을 생성하고 수식이 있는 열을 추가하여 2x 레벨에 잘 작동하는 스크립트를 작성했으며, 그 결과는 "동등함" 또는 "동등하지 않음"입니다.
문제는 2배 이상의 레벨로 작업하고 싶을 때 더욱 심각해집니다. 가능한 모든 고유한 "레벨" 쌍을 찾은 다음 메트릭 + 레벨 쌍의 모든 조합에 대해 TOST 수학을 실행해야 합니다.
저는 (이 포럼에서) 목록에서 가능한 모든 고유한 쌍을 찾아 테이블이나 중첩 목록(NchooseKmatrix())에 넣는 방법을 찾았습니다.
하지만 저는 거기에 갇혀 있습니다. 제가 필요한 것은:
1- 모든 가능한 메트릭 조합(열 1)과 모든 가능한 수준 쌍(열 2 및 열 3)으로 새 테이블을 채웁니다.
2- 그런 다음 각 행의 각 레벨 쌍에 대한 통계를 추가합니다.
이 시점부터 TOST를 완성하기 위한 수학적인 근거를 파악할 수 있을 겁니다.
더미 테이블을 생성하는 스크립트를 첨부한 다음 Oneway 분석에서 결합된 데이터 테이블을 생성한 다음 모든 메트릭 + 고유한 레벨 쌍의 조합으로 세 번째 테이블을 생성하려는 시도가 실패했습니다.
미리 도움을 주셔서 감사합니다
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
//Create table with random distribution (table 1)
dt = New Table( "tabletest",
Add Rows( 500 ),
New Column( "Product", Character, "Nominal", formula("Product " ||char( Random Integer( 1, 4 )))),
New Column( "Metric1", Numeric, "Continuous", formula( Random Normal( 10, 1 ) ) ),
New Column( "Metric2", Numeric, "Continuous", formula( Random Gamma( 10, 1 ) ) ),
New Column( "Metric3", Numeric, "Continuous", formula( Random Gamma( 10, 2 ) ) )
);
Column( dt, "Metric1" ) << set property( "spec limits", {LSL( 5 ), USL( 25 ), Show Limits( 0 )} );
Column( dt, "Metric2" ) << set property( "spec limits", {LSL( 0 ), USL( 40 ), Show Limits( 0 )} );
Column( dt, "Metric3" ) << set property( "spec limits", {LSL( 5 ), USL( 40 ), Show Limits( 0 )} );
dt << save( "$Desktop\tabletest.jmp" );
//Get a list from all unique Product
SplitBy = "Product";
summarize(ColumnSplitBy=by(Column (SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get Column name
MetricCols = dt << Get Column Names( numeric, continuous, "string" );
//Get all unique combo of 2 Products
ColumnSplitByCombo = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (ColumnSplitByCombo);
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create new table for the result, each row has a unique pair of Levels
dt3 = astable( nchoosekMatrix(nitems(ColumnSplitBy), 2), << column names({"x", "y"}) );
dt3 << new column ("first", character, << set values ( ColumnSplitBy[dt3:x << get values]));
dt3 << new column ("second", character, << set values ( ColumnSplitBy[dt3:y << get values]));
dt3 << delete columns (1::2);
//Create a nested list with each pair of levels
Listdt3 = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (Listdt3);
// I tried to use associate array() to match the level and name but couldn't make it work- 설교자
자동화 및 스크립팅Re: [JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트요청을 더 잘 설명하기 위해 스크린샷이 있는 "Untitled.png" 문서를 첨부했습니다.
감사해요!
Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트예를 들어 먼저 그룹 열을 쌓은 다음 결과로 업데이트하고 다시 분할할 수 있습니다.
이 예에서는 여러 개의 메트릭이 있을 수 있다는 점을 고려하지 않습니다.
// Loop over Metrics and perform these for each of them
// Concatenate results into single table
dt3 = As Table(NChooseK Matrix(N Items(ColumnSplitBy), 2), <<COLUMN names=""></COLUMN>// Metrics should be taken into account here OR stacked table should contain them
dt4 << Update(
With(dt2),
Match Columns(:Data = :Level)
);
또는 이와 유사한 최종 분할이 없는 경우가 있습니다.

Re: [JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 @Voizingu : TOST는 100(1-2alpha)% 신뢰 구간이 일부 동등 한계 내에 완전히 포함되는지 확인하는 것입니다. 따라서 모든 조합을 대신 계산해주는 Fit Y by X 다중 비교 절차를 사용하는 것이 적절한 해결책이 될 수 있을까요?
Re: [JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트Oneway 플랫폼에서 내장된 동등성 테스트를 사용할 수 없는 이유가 있나요?
Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 Jarmo 님,
스택 > 업데이트 > 분할은 정말 좋은 아이디어예요!!!
저는 이를 성공적으로 구현할 수 있었지만, 제 코드는 조금 지저분합니다(For() 루프가 많고, 중간 단계가 많습니다...).
대신:
- 테이블을 여러 번 연결합니다.
- 반복되는 메트릭 목록에서 열 채우기
저는 코드 최적화 능력을 향상시키고 싶습니다.
좀 더 깔끔하고, 최적화된 방법으로 dt5를 채울 방법이 있나요? (기본적인 JMP 명령을 사용하면 될까요?)
나는 이것에 대한 당신의 제안을 듣고 싶습니다
어쨌든, 이 일을 도와주셔서 정말 감사합니다. 
- 설교자
Names Default To Here( 1 );
clear symbols();
Deletesymbols();
//Create table with random distribution (table 1)
dt = New Table( "tabletest",
Add Rows( 5000 ),
New Column( "Product", Character, "Nominal", formula("Product " ||char( Random Integer( 1, 4 )))),
New Column( "Metric1", Numeric, "Continuous", formula( Random Normal( 10, 1 ) ) ),
New Column( "Metric2", Numeric, "Continuous", formula( Random Gamma( 10, 1 ) ) ),
New Column( "Metric3", Numeric, "Continuous", formula( Random Gamma( 10, 2 ) ) ),
);
Column( dt, "Metric1" ) << set property( "spec limits", {LSL( 5 ), USL( 25 ), Show Limits( 0 )} );
Column( dt, "Metric2" ) << set property( "spec limits", {LSL( 0 ), USL( 40 ), Show Limits( 0 )} );
Column( dt, "Metric3" ) << set property( "spec limits", {LSL( 5 ), USL( 40 ), Show Limits( 0 )} );
dt << save( "$Desktop\tabletest.jmp" );
//Get a list from all unique Product
SplitBy = "Product";
summarize(ColumnSplitBy=by(Column (SplitBy)));
show(ColumnSplitBy);
For( i = N Items( ColumnSplitBy ), i > 0, i--,
If( ColumnSplitBy[i] == "",
Remove From( ColumnSplitBy, i, 1 );
)
);
//Get Column name
MetricCols = dt << Get Column Names( numeric, continuous, "string" );
show(MetricCols);
//Get all unique combo of 2 Products
ColumnSplitByCombo = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (ColumnSplitByCombo);
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch(
{"Means and Std Deviations"},
"Std Dev Lower 95%",
NumberColBox,
{Visibility("Visible")}
),
Dispatch(
{"Means and Std Deviations"},
"Std Dev Upper 95%",
NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create new table for the result, each row has a unique pair of Levels
dt3 = astable( nchoosekMatrix(nitems(ColumnSplitBy), 2), << column names({"x", "y"}) );
dt3 << new column ("first", character, << set values ( ColumnSplitBy[dt3:x << get values]));
dt3 << new column ("second", character, << set values ( ColumnSplitBy[dt3:y << get values]));
dt3 << delete columns (1::2);
//Create a nested list with each pair of levels
Listdt3 = aslist( nchoosekMatrix(nitems(ColumnSplitBy), 2));
show (Listdt3);
// I tried to use associate array() to match the level and name but couldn't make it work
// Loop over Metrics and perform these for each of them
// Concatenate results into single table
dt3 = As Table(NChooseK Matrix(N Items(ColumnSplitBy), 2), <<COLUMN names=""></COLUMN>Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 MRB3855님,
훌륭한 지적이네요. 첫 번째 메시지에 스크립트 문제에 집중하기 위해 너무 많은 정보를 담고 싶지 않았지만, 초기 코드(2단계에서 작동)에서는 동등성 한계를 [LSL;USL] 범위의 5%로 설정했습니다.
물론 이는 필요할 경우 변경할 수 있는 임의의 값입니다.
이를 통해 수백 개 이상의 측정 항목을 걸러내고 이 기준에 따라 일반적으로 12개 정도인 "동등하지 않음" 측정 항목을 표시할 수 있습니다.
그러면 이 목록에서 철저한 분석을 실행할 수 있습니다.
- 분산 분석
- 적절한 범위의 TOST
- 등...
두 번째 요점에 대해, 제가 잘 이해했다면, 각 메트릭에 대해 TOST 플랫폼을 실행하고 데이터를 선택하여 Display Box()를 통해 테이블에 배치하는 것이 어떨까요? 그렇다면 실제로 가능한 해결책이지만 TOST 원리를 이해하고 처리 시간을 절약하기 위해 직접 수학을 실행하는 것이 좋습니다 .
의미가 있기를 바랍니다:)
도와주셔서 감사합니다
- 설교자
Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 마크,
네, 처음에는 TOST 플랫폼을 사용하고 Display Box()로 통계를 선택하는 것을 생각했지만, 플랫폼이 제공하는 것과 동일한 결과를 얻기 위해 각 매개변수를 개별적으로 계산하는 다른 접근 방식을 선호했습니다.
나중에 생각해 보면, 바퀴를 다시 발명하는 것보다는 더 빠른 방법이었을지도 모르지만, 저는 지금까지 이 일에 엄청난 시간을 투자했고, 이를 이루는 데 매우 가까이 다가갔기 때문에 (어려운 방법으로) 시작한 것을 (끝낼 수 있을 것 같아요) 하하!
이것의 장점 중 하나는 이제 TOST 방법의 각 단계를 이해하게 되었다는 것입니다.
감사해요
- 설교자
Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트저는 루프를 직접 사용할 가능성이 가장 높지만, 여러분은 일부 행렬 연산으로 할 수 있습니다. 이 스크립트는 제 생각에 읽기 쉽게 만들기 위해 다시 작성해야 할 것입니다(더 나은 이름의 변수, 출력 테이블 이름 활용, 불필요한 테이블 닫기 및 일반적인 정리)
더 보기...
Names Default To Here(1);
//Create table with random distribution (table 1)
dt = New Table("tabletest",
Add Rows(5000),
New Column("Product",
Character,
"Nominal",
formula("Product " || Char(Random Integer(1, 4)))
),
New Column("Metric1", Numeric, "Continuous", formula(Random Normal(10, 1))),
New Column("Metric2", Numeric, "Continuous", formula(Random Gamma(10, 1))),
New Column("Metric3", Numeric, "Continuous", formula(Random Gamma(10, 2))),
);
Column(dt, "Metric1") << set property("spec limits", {LSL(5), USL(25), Show Limits(0)});
Column(dt, "Metric2") << set property("spec limits", {LSL(0), USL(40), Show Limits(0)});
Column(dt, "Metric3") << set property("spec limits", {LSL(5), USL(40), Show Limits(0)});
SplitBy = "Product";
Summarize(ColumnSplitBy = by(Column(SplitBy)));
MetricCols = dt << Get Column Names(numeric, continuous, "string");
ColumnSplitByCombo = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2));
//Create a combinaed datatable with stats (Table 2)
ow = dt << Oneway(
Y(Eval(MetricCols)),
X(Eval(SplitBy)),
Means and Std Dev(1),
SendToReport(
Dispatch({"Means and Std Deviations"}, "Std Dev Lower 95%", NumberColBox,
{Visibility("Visible")}
),
Dispatch({"Means and Std Deviations"}, "Std Dev Upper 95%", NumberColBox,
{Visibility("Visible")}
)
),
Invisible
);
tb = Report(ow[1])[Outline Box("Means and Std Deviations"), Table Box(1)];
dt2 = tb << Make Combined Data Table;
tb << close window;
//Create a nested list with each pair of levels
Listdt3 = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2));
mcols = N Items(MetricCols);
l = Repeat(Listdt3, mcols);
m = J(N Items(l) / mcols, mcols) :*</img> (1::mcols);
mfinal = Sort Ascending(Shape(m, 1, N Items(l)));
dt3 = As Table(Matrix(l), <<COLUMN names=""></COLUMN>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">이름은 기본적으로 Here(1); // 무작위 분포로 테이블 생성(테이블 1) dt = New Table("tabletest", Add Rows(5000), New Column("Product", Character, "Nominal", formula("Product " || Char(Random Integer(1, 4))) ), New Column("Metric1", Numeric, "Continuous", formula(Random Normal(10, 1))), New Column("Metric2", Numeric, "Continuous", formula(Random Gamma(10, 1))), New Column("Metric3", Numeric, "Continuous", formula(Random Gamma(10, 2))), ); Column(dt, "Metric1") << set property("spec limits", {LSL(5), USL(25), Show Limits(0)}); Column(dt, "Metric2") << 속성 설정("사양 제한", {LSL(0), USL(40), 제한 표시(0)}); Column(dt, "Metric3") << 속성 설정("사양 제한", {LSL(5), USL(40), 제한 표시(0)}); SplitBy = "제품"; Summarize(ColumnSplitBy = by(Column(SplitBy))); MetricCols = dt << 열 이름 가져오기(숫자, 연속, "문자열"); ColumnSplitByCombo = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2)); // 통계(표 2)를 사용하여 결합된 데이터 테이블을 만듭니다. ow = dt << Oneway( Y(Eval(MetricCols)), X(Eval(SplitBy)), 평균 및 표준 편차(1), SendToReport( Dispatch({"평균 및 표준 편차"}, "표준 편차 하위 95%", NumberColBox, {Visibility("Visible")} ), Dispatch({"평균 및 표준 편차"}, "표준 편차 상위 95%", NumberColBox, {Visibility("Visible")} ) ), Invisible ); tb = Report(ow[1])[Outline Box("평균 및 표준 편차"), Table Box(1)]; dt2 = tb << 결합된 데이터 테이블 만들기; tb << 창 닫기; // 각 쌍의 수준으로 중첩된 목록을 만듭니다. Listdt3 = As List(NChooseK Matrix(N Items(ColumnSplitBy), 2)); mcols = N Items(MetricCols); l = Repeat(Listdt3, mcols); m = J(N Items(l) / mcols, mcols) (1::mcols); mfinal = Sort Ascending(Shape(m, 1, N Items(l))); dt3 = As Table(Matrix(l), < <COLUMN names=""></COLUMN></DIV></DIV>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1724774273332.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67576i7A33F8F17FEAD03D/jthi_1-1724774273332.png" role="button" title="jthi_1-1724774273332.png" alt="jthi_1-1724774273332.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_2-1724774284315.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_2-1724774284315.png" style="width: 304px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67577i906F6E675ADD899F/jthi_2-1724774284315.png" role="button" title="jthi_2-1724774284315.png" alt="jthi_2-1724774284315.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_0-1724774190734.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/67575i9361F045B1E7C693/jthi_0-1724774190734.png" role="button" title="jthi_0-1724774190734.png" alt="jthi_0-1724774190734.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P> </P> Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕, 자르모,
빠른 답변 감사합니다.
이 라인은 실패하고 있습니다
m = J(N Items(l) / mcols, mcols) (1::mcols);
이것이 무엇을 하려는 것인지 설명해줄 수 있나요?
저는 보통 매트릭스를 사용하지 않습니다. 직접 디버깅을 시도했지만 실패했습니다...
도움을 주셔서 감사합니다
Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트어떤 이유에서인지 누락되었습니다:*
m = J(N Items(l) / mcols, mcols) :*</img> (1 :: mcols);
목적은 이와 같은 행렬을 만드는 것입니다

그런 다음 다음으로 변환합니다.

Shape를 사용합니다.
또한 루프를 사용하세요. 이상한 매트릭스 "트릭"보다 읽고 이해하기가 훨씬 쉽습니다.
Re: [JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 Jarmo님,
번역 과정에서 손실될 수 있는 특수문자를 추가하여 이 줄의 여러 버전을 테스트해 보았지만, 아무 일도 일어나지 않았습니다...
이 줄은 내 쪽에서는 작동하지 않습니다(저는 JMP Pro 17을 사용하고 있습니다)

괜찮습니다. Matrix를 사용한 이 최적화는 정말 좋습니다. 말씀하신 대로 루프를 사용하는 것도 효과가 있으므로 그걸로 하겠습니다.:)
다시 한번 시간을 내어 저를 도와주셔서 감사드립니다!

- 설교자
Re: [JSL] 다양한 메트릭에 대한 2-1측 T 검정을 위한 스크립트커뮤니티에서 깨지는 코드 부분을 스크린샷으로 첨부했습니다.

행렬 E Mult() 의 요소별 곱셈입니다.
@Ryan_Gilmore JMP 커뮤니티에서 식사를 하고 있습니다.:* (: * 여기에 공백을 추가했습니다)
JSL 코드 블록:
m = J(N Items(l) / mcols, mcols) :*</img> (1::mcols);
텍스트:
m = J(N 항목(l) / mcols, mcols):* (1::mcols);
편집 중 스크린샷

미리보기에서 스크린샷

Re: [JSL] 많은 수의 메트릭에 대한 2-1측 T 검정을 위한 스크립트안녕하세요 @Voizingu 모두 말씀드렸듯이, 귀하에게 적합한 해결책이 있는 것 같습니다. 훌륭합니다! 그러나 분실되지 않도록 신뢰 구간은 100(1-2알파)% 구간이어야 합니다. 즉, 1종 오류율을 5%로 하려면 동등성을 판단하는 데 사용되는 구간은 90% 신뢰 구간(95%가 아님)이어야 합니다. 이는 양측 단측 검정 입니다. 각 측면은 알파 = 0.05에서 검정됩니다. 첨부된 내용을 참조하세요.