Wie kann man den SHASH-transformierten Wert zurücktransformieren?Hallo.
Ich versuche, den CpK der Prozessdaten herauszufinden.
Die historische Dist-Analyse besagt jedoch, dass eine SHASH-Transformation erforderlich ist.
Daher wende ich die SHASH-Transformation auf die Daten an und analysiere sie.
Hier sind die Fragen.
1. Kann ich SHASH-Daten als Material für Cpk verwenden?
2. Muss ich den SHASH-Wert des ursprünglichen LSL/USL in die Cpk-Analyse eingeben?
3. Wie kann ich den SHASH-Wert zurücktransformieren, wenn er durch eine Analyse dargestellt wird?
4. Gibt es andere Überlegungen zu dieser Art von Analyse?
Vielen Dank fürs Lesen.
Erweiterte statistische ModellierungQualitäts- und VerfahrenstechnikBetreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Ich habe dies in der Vergangenheit mithilfe der sukzessiven Näherung getan, um die Rücktransformation durchzuführen.Nachfolgend finden Sie ein sehr grobes Beispiel für die Verwendung der sukzessiven Approximation für eine Spalte
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>Betreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Leider kann ich das Skript und die Laufergebnisse nicht vollständig verstehen.
Es scheint jedoch offensichtlich, dass die Rücktransformation von SHASH nicht mit der Originaleinheit identisch ist. (unter Berücksichtigung des Werts des Laufergebnisses und Ihrer Verwendung von „Näherung“)
Daraus bin ich einfach zu dem Schluss gekommen, dass ich diese Transformation nicht verwenden kann, da für diese Art der Cpk-Analyse eine exakte 1:1-Übereinstimmung erforderlich ist.
Sehr interessanter, aber verwirrender Punkt, dass allgemeine Transformationen wie Log und Sqrt die exakte Rücktransformation haben, aber dies scheint bei SHASH und einigen anderen, wie vielleicht Box-Cox, nicht der Fall zu sein.
Noch eine Frage, während ich nachforschte, muss SHASH sinh(arcsinh(x)) sein, warum dann sinh(arcsinh(93))=93? Diese 93 ist willkürlich, aber f(x)=x, das habe ich beabsichtigt. Liege ich falsch?
Betreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Hallo TXnelson, können Sie die Standardabweichung für das Original, SHASH und die Rücktransformation hinzufügen? Vielen Dank!
Betreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Ihre Anfrage stellt zwar keine schwierige Änderung des Codes dar, die Interpretation ist jedoch nicht einfach.Um die Standardabweichung zurückzutransformieren, muss man den Wert einer transformierten Standardabweichung über dem transformierten Mittelwert zurücktransformieren und dann den ursprünglichen Mittelwert von dem neuen, 1 std über dem Mittelwert rücktransformierten Wert subtrahieren.Das ist einfach, aber da die Transformation die Verteilung der Daten verändert, muss man den gleichen Vorgang wiederholen, wobei der transformierte Wert einen transformierten Standardwert unter dem Mittelwert liegt.Das Ergebnis ist, dass der Abstand vom Mittelwert zum rücktransformierten Wert oberhalb des Mittelwerts anders ist als der Abstand vom Mittelwert zum rücktransformierten Wert unterhalb des Mittelwerts.Im Beispiel meiner vorherigen Antwort beträgt der Abstand vom Mittelwert zum rücktransformierten Wert: 1,57, wobei der Abstand unter dem Mittelwert 0,303 beträgt. Ich weiß nicht, wie ich mit diesen Unterschieden umgehen soll?
Betreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Danke, Jim, für deine schnelle Antwort. Mithilfe Ihres Codes konnte ich meinen Datensatz für den Mittelwert zurücktransformieren, aber ich bin neu bei JMP und weiß nicht, wie der Code aussehen würde. Können Sie mir helfen? Danke
Ursprünglicher Mittelwert: 4,92759
SHASH Mittelwert: 0284
Rücktransformierter Mittelwert: 5,14013
Ursprünglicher Standardwert: 0,6796304
SHASH Stdv: 1.0157
Betreff: Wie kann man den SHASH-transformierten Wert zurücktransformieren?Wie ich oben erwähnt habe, wird es keinen einzigen Wert für den Back Transformed STD geben.Es muss davon ausgegangen werden, dass bei der Transformation der Daten die ursprünglichen, nicht transformierten Daten nicht normalverteilt sind.Daher wird der rücktransformierte Standardabweichungspunkt von 1 STD über dem ursprünglichen Mittelwert nicht den gleichen Abstand vom Mittelwert haben, ebenso wie der Punkt, der 1 STD unter dem Mittelwert liegt.Der beste Weg, dies zu zeigen, besteht darin, den v1STD für über dem Mittelwert und den 2 STD für unter dem Mittelwert zurückzugeben.Hier ist die JSL, um das alles zu berechnen
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>Betreff: Wie kann ich den SHASH-transformierten Wert zurücktransformieren?Hallo Jim, vielen Dank für deine Erklärung, jetzt ergibt es für mich Sinn. Vielen Dank auch für die Bereitstellung des aktualisierten Codes!