Come ritrasformare il valore trasformato SHASH?CIAO.
Sto cercando di capire il CpK dei dati di processo.
Tuttavia l'analisi storica di Dist afferma che è necessaria la trasformazione SHASH.
Quindi applico la trasformazione SHASH ai dati e li analizzo.
Ecco le domande.
1. Posso utilizzare i dati SHASH come materiale per Cpk?
2. Devo inserire il valore SHASH dell'LSL/USL originale nell'analisi Cpk?
3. Come posso retrotrasformare il valore SHASH se presentato dall'analisi?
4. Ci sono altre considerazioni su questo tipo di analisi?
Grazie per aver letto.
Modellazione statistica avanzataIngegneria della qualità e dei processiRi: Come ritrasformare il valore trasformato SHASH?L'ho fatto in passato utilizzando l'approssimazione successiva per eseguire la trasformazione all'indietro.Di seguito è riportato un esempio molto semplice dell'utilizzo dell'approssimazione successiva su una colonna
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>Ri: Come ritrasformare il valore trasformato SHASH?Sfortunatamente non sono in grado di comprendere appieno lo script e i risultati dell'esecuzione.
Tuttavia sembra ovvio che la retrotrasformazione di SHASH non è identica all'unità originale. (considerando il valore del risultato della corsa e l'utilizzo di "approssimazione")
Pertanto ho semplicemente concluso che non è possibile utilizzare questa trasformazione, poiché per questo tipo di analisi Cpk è necessaria una corrispondenza esatta 1 a 1.
Punto molto interessante ma confuso secondo cui la trasformazione generale come Log e Sqrt ha l'esatta trasformazione all'indietro, ma questo non sembra il caso di SHASH e molti altri come forse Box-cox.
Un'altra domanda, mentre indagavo, SHASH deve essere sinh(arcsinh(x)), quindi perché sinh(arcsinh(93))=93? questo 93 è arbitrario ma f(x)=x, intendevo. Ho sbagliato?
Ri: Come ritrasformare il valore trasformato SHASH?Ciao TXnelson, puoi aggiungere la deviazione standard per la trasformazione originale, SHASH e viceversa? Grazie mille!
Ri: Come ritrasformare il valore trasformato SHASH?La tua richiesta, pur non essendo una modifica difficile al codice, l'interpretazione non è semplice.Per trasformare all'indietro la deviazione standard, è necessario trasformare all'indietro il valore di una deviazione standard trasformata al di sopra della media trasformata e quindi sottrarre la media originale, dalla nuova trasformazione all'indietro 1 std sopra la media.Questo è facile da fare, ma poiché la trasformazione cambia la distribuzione dei dati, è necessario ripetere lo stesso processo con il valore trasformato uno trasformato std sotto la media.Il risultato è che la distanza dalla media al valore retrotrasformato al di sopra della media è diversa dalla distanza dalla media al valore retrotrasformato al di sotto della media.Nell'esempio della mia risposta precedente la distanza dalla media al valore retrotrasformato è: 1,57, dove la distanza sotto la media è ,303. Non so come gestire queste differenze?
Ri: Come ritrasformare il valore trasformato SHASH?Grazie Jim per la tua rapida risposta. Usando il tuo codice sono riuscito a trasformare il mio set di dati in modo medio, ma sono nuovo in JMP e non saprei come sarebbe il codice: puoi aiutarmi? Grazie
Media originale: 4,92759
SHASH Media: 0284
Media trasformata indietro: 5.14013
Stdv originale: 0,6796304
SHASH Standard: 1.0157
Ri: Come ritrasformare il valore trasformato SHASH?Come ho affermato sopra, non ci sarà un singolo valore per STD trasformato all'indietro.Si deve presupporre che, se si trasformano i dati, i dati originali, non trasformati, non vengono distribuiti normalmente.Pertanto, il punto di deviazione standard retrotrasformato di 1 STD sopra la media originale non sarà alla stessa distanza dalla media, poiché sarà 1 STD sotto la media.Quindi il modo migliore per dimostrarlo è restituire v1STD sopra la media e 2 STD sotto la media.Ecco la JSL per calcolare tutto questo
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>Ri: Come ritrasformare il valore trasformato SHASH?Ciao Jim, grazie mille per la tua spiegazione che ora ha senso per me. Inoltre, grazie per aver fornito il codice aggiornato!.