SHASH 변환된 값을 역변환하는 방법은 무엇입니까?안녕.
프로세스 데이터의 CpK를 알아내려고 합니다.
그러나 역사적 Dist 분석에 따르면 SHASH 변환이 필요했습니다.
따라서 데이터에 SHASH 변환을 적용하고 분석합니다.
질문은 다음과 같습니다.
1. SHASH 데이터를 Cpk의 자료로 사용할 수 있나요?
2. Cpk 분석에 원본 LSL/USL의 SHASH 값을 입력해야 합니까?
3. 분석 결과 SHASH 값이 제시된 경우 어떻게 역변환할 수 있나요?
4. 이러한 유형의 분석에 대해 다른 고려 사항이 있습니까?
읽어주셔서 감사합니다.
고급 통계 모델링품질 및 프로세스 엔지니어링Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?나는 과거에 Back Transform을 수행하기 위해 연속 근사법을 사용하여 이 작업을 수행했습니다.다음은 열에 연속 근사를 사용하는 매우 조잡한 예입니다.
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Probe.jmp" );
// Save Columns: Save Transformed
Local( {obj},
obj = dt << Distribution(
Continuous Distribution( Column( :DELL_RPPBR ), Fit SHASH )
);
obj << (Fit Handle["SHASH"] << Save Transformed);
obj << Close Window;
);
meandell_rppbr = col mean(dt:dell_rppbr);
meanSHASH = col mean(dt:SHASH Transform to Normal dell_rppbr);
// Determine the mean of the SHASH value in the original data distribution
// Do this by using successive approximation
// Temporarily add a new row to have a cell to be able to run the SHASH formula
dt << add rows(1);
theRow = nrows(dt);
theMax = col max(:dell_rppbr);
theMin = col min(:dell_rppbr);
targetdell_rppbr = meandell_rppbr;
theDif = col max( dt:SHASH Transform to Normal dell_rppbr)-col min(dt:SHASH Transform to Normal dell_rppbr);
count = 1;
// Successively recalculate the SHASH formula until the difference
// between the mean of the SHASH calculated mean, and the estimated
// value is effectively zero.
while( round(theDif,5) != 0 & count < 100,
if(dt:SHASH Transform to Normal dell_rppbr[theRow]>meanSHASH,
theMax = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMin ),
theMin = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMax )
);
dt:dell_rppbr[theRow] = targetdell_rppbr;
count++;
dt << rerun formulas;
theDif = meanSHASH - dt:SHASH Transform to Normal dell_rppbr[theRow];
);
// Once the difference is effectively zero, then display the results
meanSHASHBackTransform = :dell_rppbr[theRow];
dt<<DELETE rows=""></DELETE>Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?불행히도 나는 스크립트와 실행 결과를 완전히 이해할 수 없습니다.
그러나 SHASH의 역변환은 원래 단위와 동일하지 않다는 것이 분명해 보입니다. (실행 결과 값과 "근사치" 사용 고려)
따라서 나는 이 유형의 Cpk 분석에는 정확한 1:1 매칭이 필요하기 때문에 이 변환을 사용할 수 없다는 결론을 내렸습니다.
Log 및 Sqrt와 같은 일반 변환에는 정확한 역변환이 있지만 SHASH 및 Box-cox와 같은 다른 여러 변환에는 해당되지 않는 매우 흥미롭지만 혼란스러운 점입니다.
한 가지 더 질문하겠습니다. 제가 조사한 대로 SHASH는 sinh(arcsinh(x))여야 합니다. 그런데 왜 sinh(arcsinh(93))=93인가요? 이 93은 임의적이지만 f(x)=x입니다. 제가 의도한 것입니다. 내가 잘못?
Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?안녕하세요 TXnelson, 원본, SHASH 및 역변환에 대한 표준 편차를 추가할 수 있습니까? 매우 감사합니다!
Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?귀하의 요청은 코드 수정이 어렵지는 않지만 해석이 간단하지 않습니다.표준편차를 역변환하려면 변환된 평균보다 높은 1개의 변환된 표준편차 값을 역변환한 다음 평균보다 1std 높게 역변환된 새 값에서 원래 평균을 빼야 합니다.이는 쉽지만 변환으로 인해 데이터의 분포가 변경되므로 표준 이하로 변환된 변환된 값을 사용하여 동일한 프로세스를 반복해야 합니다.그 결과, 평균에서 평균 위의 역변환된 값까지의 거리가 평균에서 평균 아래의 역변환된 값까지의 거리와 다릅니다.이전 응답의 예에서 평균에서 역변환된 값까지의 거리는 1.57입니다. 여기서 평균 아래의 거리는 .303입니다. 이러한 차이를 처리하는 방법을 모르겠습니다.
Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?빠른 응답을 보내주신 Jim에게 감사드립니다. 귀하의 코드를 사용하여 데이터세트를 평균값으로 역변환할 수 있었지만 JMP를 처음 접했기 때문에 코드가 어떻게 보일지 모르겠습니다. 도와주실 수 있나요? 감사해요
원래 평균: 4.92759
SHASH 평균: 0284
역변환 평균: 5.14013
원래 표준: 0.6796304
SHASH 표준: 1.0157
Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?위에서 언급했듯이 역변환된 STD에는 단일 값이 없습니다.데이터를 변환하는 경우 변환되지 않은 원본 데이터가 정규 분포를 따르지 않는다고 가정해야 합니다.따라서 원래 평균보다 1STD 높은 역변환 표준편차 지점은 평균에서 1STD 아래에 있는 것과 마찬가지로 평균과의 거리가 같지 않습니다.따라서 이를 보여주는 가장 좋은 방법은 평균 위의 v1STD와 평균 아래의 2 STD를 반환하는 것입니다.이 모든 것을 계산하는 JSL은 다음과 같습니다.
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Probe.jmp" );
// Save Columns: Save Transformed
Local( {obj},
obj = dt << Distribution(
Continuous Distribution( Column( :DELL_RPPBR ), Fit SHASH )
);
obj << (Fit Handle["SHASH"] << Save Transformed);
obj << Close Window;
);
meandell_rppbr = col mean(dt:dell_rppbr);
meanSHASH = col mean(dt:SHASH Transform to Normal dell_rppbr);
// Determine the mean of the SHASH value in the original data distribution
// Do this by using successive approximation
// Temporarily add a new row to have a cell to be able to run the SHASH formula
dt << add rows(1);
theRow = nrows(dt);
theMax = col max(:dell_rppbr);
theMin = col min(:dell_rppbr);
targetdell_rppbr = meandell_rppbr;
theDif = col max( dt:SHASH Transform to Normal dell_rppbr)-col min(dt:SHASH Transform to Normal dell_rppbr);
count = 1;
// Successively recalculate the SHASH formula until the difference
// between the mean of the SHASH calculated mean, and the estimated
// value is effectively zero.
while( round(theDif,5) != 0 & count < 100,
if(dt:SHASH Transform to Normal dell_rppbr[theRow]>meanSHASH,
theMax = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMin ),
theMin = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMax )
);
dt:dell_rppbr[theRow] = targetdell_rppbr;
count++;
dt << rerun formulas;
theDif = meanSHASH - dt:SHASH Transform to Normal dell_rppbr[theRow];
);
// Once the difference is effectively zero, then display the results
meanSHASHBackTransform = :dell_rppbr[theRow];
displayList = {};
insert into(displayList, meandell_rppbr);
insert into(displayList, meanSHASH);
insert into(displayList, meanSHASHBackTransform);
sourceList = {"Original Mean", "SHASH Mean", "Back Transformed Mean"};
meandell_rppbr = col mean(dt:dell_rppbr);
stddell_rppbr = col STDDEV(dt:dell_rppbr);
upperSTDSHASH = col mean(dt:SHASH Transform to Normal dell_rppbr)+col STDDEV(dt:SHASH Transform to Normal dell_rppbr);
// Calculate the Upper STD
// Determine the mean of the SHASH value in the original data distribution
// Do this by using successive approximation
STDSHASH = col mean(dt:SHASH Transform to Normal dell_rppbr) +
col STDDEV(dt:SHASH Transform to Normal dell_rppbr);
theMax = col max(:dell_rppbr);
theMin = col min(:dell_rppbr);
targetdell_rppbr = meandell_rppbr;
theDif = col max( dt:SHASH Transform to Normal dell_rppbr)-col min(dt:SHASH Transform to Normal dell_rppbr);
count = 1;
// Successively recalculate the SHASH formula until the difference
// between the mean of the SHASH calculated mean, and the estimated
// value is effectively zero.
while( round(theDif,5) != 0 & count < 100,
if(dt:SHASH Transform to Normal dell_rppbr[theRow]>upperSTDSHASH,
theMax = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMin ),
theMin = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMax )
);
dt:dell_rppbr[theRow] = targetdell_rppbr;
count++;
dt << rerun formulas;
theDif = upperSTDSHASH - dt:SHASH Transform to Normal dell_rppbr[theRow];
);
// Once the difference is effectively zero, then display the results
UpperSTDSHASHBackTransform = :dell_rppbr[theRow] - meandell_rppbr;
insert into(displayList, stddell_rppbr);
insert into(displayList, upperSTDSHASH);
insert into(displayList, UpperSTDSHASHBackTransform);
insert into(sourceList,"Original STD" );
insert into(sourceList,"SHASH STD");
insert into(sourceList,"Back Transformed Upper STD");
// Calculate the Lower STD
// Determine the mean of the SHASH value in the original data distribution
// Do this by using successive approximation
STDSHASH = col mean(dt:SHASH Transform to Normal dell_rppbr) -
col STDDEV(dt:SHASH Transform to Normal dell_rppbr);
theMax = col max(:dell_rppbr);
theMin = col min(:dell_rppbr);
targetdell_rppbr = meandell_rppbr;
theDif = col max( dt:SHASH Transform to Normal dell_rppbr)-col min(dt:SHASH Transform to Normal dell_rppbr);
count = 1;
// Successively recalculate the SHASH formula until the difference
// between the mean of the SHASH calculated mean, and the estimated
// value is effectively zero.
while( round(theDif,5) != 0 & count < 100,
if(dt:SHASH Transform to Normal dell_rppbr[theRow]>upperSTDSHASH,
theMax = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMin ),
theMin = targetdell_rppbr;
targetdell_rppbr = mean(targetdell_rppbr, theMax )
);
dt:dell_rppbr[theRow] = targetdell_rppbr;
count++;
dt << rerun formulas;
theDif = upperSTDSHASH - dt:SHASH Transform to Normal dell_rppbr[theRow];
);
// Once the difference is effectively zero, then display the results
UpperSTDSHASHBackTransform = meandell_rppbr - :dell_rppbr[theRow];
insert into(displayList, UpperSTDSHASHBackTransform);
insert into(sourceList,"Back Transformed Lower STD");
New Window("Results",
Table Box(
string col box("Source", sourceList),
number col box("Value", displayList)
)
);
dt<<DELETE rows=""></DELETE>Re: SHASH 변환된 값을 역변환하는 방법은 무엇입니까?안녕하세요 짐 - 설명해주셔서 정말 감사합니다. 이제 이해가 되네요. 또한 업데이트된 코드를 제공해 주셔서 감사합니다!.