SHASH変換された値を逆変換するにはどうすればよいですか?こんにちは。
プロセスデータのCpKを把握しようとしています。
ただし、過去の Dist 分析では、SHASH 変換が必要であることが示されています。
そこでデータにSHASH変換を適用して分析します。
質問は次のとおりです。
1. SHASHデータをCpkの素材として使用できますか?
2. 元の LSL/USL の SHASH 値を Cpk 分析に入力する必要がありますか?
3. 分析によって提示された場合、SHASH 値を逆変換するにはどうすればよいですか?
4. この種の分析に関して他に考慮すべき点はありますか?
読んでいただきありがとうございます。
高度な統計モデリング品質およびプロセスエンジニアリングRe: SHASH 変換された値を逆変換するにはどうすればよいですか?私は過去に逐次近似を使用して逆変換を行ったことがあります。以下は、列で逐次近似を使用する非常に大雑把な例です。
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 などの他のいくつかの変換には当てはまらないという点です。
もう 1 つの質問ですが、調べたところ、SHASH は sinh(arcsinh(x)) でなければなりませんが、なぜ sinh(arcsinh(93))=93 になるのでしょうか?この 93 は任意ですが、f(x)=x のつもりでした。 私が間違っている?
Re: SHASH 変換された値を逆変換するにはどうすればよいですか?こんにちは、TXnelson。元の標準偏差、SHASH 変換、および逆変換の標準偏差を加算してもらえますか? どうもありがとうございます!
Re: SHASH 変換された値を逆変換するにはどうすればよいですか?あなたのリクエストはコードに対する難しい変更ではありませんが、解釈は単純ではありません。標準偏差を逆変換するには、変換された平均より 1 つ大きい変換された標準偏差の値を逆変換し、平均より 1 std 大きい新しい逆変換値から元の平均を減算する必要があります。これは簡単ですが、変換によってデータの分布が変化するため、平均より 1 つ変換された std 下の変換値を使用して同じプロセスを繰り返す必要があります。その結果、平均値から平均値を上回る逆変換値までの距離は、平均値から平均値を下回る逆変換値までの距離とは異なります。前の回答の例では、平均から逆変換された値までの距離は 1.57 で、平均より下の距離は .303 です。これらの違いにどう対処すればよいかわかりません。
Re: SHASH 変換された値を逆変換するにはどうすればよいですか?ジムさん、素早い対応ありがとうございます。 あなたのコードを使用して、平均値でデータセットを逆変換することができましたが、JMP は初めてで、コードがどのようなものになるかわかりません。助けてもらえますか?ありがとう
元の平均: 4.92759
シャッシュの意味: 0284
逆変換平均: 5.14013
元の標準偏差: 0.6796304
シャッシュ標準偏差: 1.0157
Re: SHASH 変換された値を逆変換するにはどうすればよいですか?上で述べたように、逆変換された STD には単一の値は存在しません。データを変換している場合、変換されていない元のデータは正規分布していないことを前提としている必要があります。したがって、元の平均より 1 STD 高い逆変換標準偏差点は、平均より 1 STD 低い場合と同様に、平均からの距離が同じになりません。したがって、これを示す最良の方法は、平均を上回る 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 変換された値を逆変換するにはどうすればよいですか?こんにちは、ジム - 今では納得のいく説明をしていただき、ありがとうございます。 また、更新されたコードを提供していただきありがとうございます。