Comment rétrotransformer la valeur transformée SHASH ?Salut.
J'essaie de comprendre le CpK des données de processus.
Cependant, l'analyse Dist historique indique qu'une transformation SHASH est nécessaire.
Ainsi, j'applique la transformation SHASH aux données et j'analyse.
Voici les questions.
1. Puis-je utiliser les données SHASH comme matériau pour Cpk ?
2. Dois-je saisir la valeur SHASH du LSL/USL d'origine dans l'analyse Cpk ?
3. Comment puis-je retransformer la valeur SHASH si elle est présentée par analyse ?
4. Y a-t-il d'autres considérations à prendre en compte dans ce type d'analyse ?
Merci d'avoir lu.
Modélisation statistique avancéeIngénierie Qualité et ProcédésRe : Comment rétrotransformer la valeur transformée SHASH ?Je l'ai fait dans le passé en utilisant des approximations successives pour effectuer la transformation arrière.Vous trouverez ci-dessous un exemple très grossier d'utilisation d'approximations successives sur une colonne
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 : Comment rétrotransformer la valeur transformée SHASH ?Malheureusement, je ne parviens pas à comprendre pleinement le script et les résultats de l'exécution.
Cependant, il semble évident que la rétro-transformation de SHASH n'est pas identique à l'unité d'origine. (en tenant compte de la valeur du résultat de l'exécution et de votre utilisation de "approximation")
J'ai donc simplement conclu que je ne pouvais pas utiliser cette transformation, car une correspondance exacte de 1 à 1 est nécessaire pour ce type d'analyse Cpk.
Point très intéressant mais déroutant : les transformations générales telles que Log et Sqrt ont exactement la rétro-transformation, mais cela ne semble pas le cas pour SHASH et plusieurs autres comme peut-être Box-cox.
Encore une question, au fur et à mesure de mes recherches, SHASH doit être sinh(arcsinh(x)), alors pourquoi sinh(arcsinh(93))=93 ? ce 93 est arbitraire mais f(x)=x, je voulais. Ai-je tort?
Re : Comment rétrotransformer la valeur transformée SHASH ?Bonjour TXnelson, pouvez-vous ajouter l'écart type pour la transformation originale, SHASH et arrière ? Merci beaucoup!
Re : Comment rétrotransformer la valeur transformée SHASH ?Votre demande, même s'il ne s'agit pas d'une modification difficile du code, l'interprétation n'est pas simple.Pour rétrotransformer l'écart type, il faut rétrotransformer la valeur d'un écart type transformé au-dessus de la moyenne transformée, puis soustraire la moyenne d'origine de la nouvelle rétrotransformation 1 std au-dessus de la moyenne.C'est facile à faire, mais comme la transformation modifie la distribution des données, il faut répéter le même processus avec la valeur transformée une fois transformée en dessous de la moyenne.Le résultat est que la distance entre la moyenne et la valeur rétrotransformée au-dessus de la moyenne est différente de la distance entre la moyenne et la valeur rétrotransformée inférieure à la moyenne.Dans l'exemple de ma réponse précédente, la distance entre la moyenne et la valeur rétrotransformée est : 1,57, où la distance en dessous de la moyenne est de 0,303. Je ne sais pas comment gérer ces différences ?
Re : Comment rétrotransformer la valeur transformée SHASH ?Merci Jim pour votre réponse rapide. En utilisant votre code, j'ai pu reconvertir mon ensemble de données, mais je suis nouveau sur JMP et je ne sais pas à quoi ressemblerait le code. Pouvez-vous m'aider ? merci
Moyenne initiale : 4,92759
SHASH Moyenne : 0284
Moyenne transformée en arrière : 5,14013
Valeur standard d'origine : 0,6796304
Valeur standard SHASH : 1,0157
Re : Comment rétrotransformer la valeur transformée SHASH ?Comme je l'ai dit ci-dessus, il n'y aura pas de valeur unique pour le STD Back Transformed.L'hypothèse doit être que si vous transformez les données, les données originales, non transformées, ne sont pas normalement distribuées.Par conséquent, le point d’écart type rétrotransformé de 1 STD au-dessus de la moyenne d’origine ne sera pas à la même distance de la moyenne, tout comme le sera 1 STD en dessous de la moyenne.La meilleure façon de le montrer est donc de renvoyer le v1STD au-dessus de la moyenne et le 2 STD en dessous de la moyenne.Voici le JSL pour calculer tout ça
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 : Comment rétrotransformer la valeur transformée SHASH ?Salut Jim - Merci beaucoup pour votre explication, cela me semble logique maintenant. Merci également d'avoir fourni le code mis à jour !.