こんにちは、
同等性テストにおけるタイプ 1 エラーの予測頻度を計算するスクリプトを作成しようとしています (同等性マージンが既知である場合)。
スクリプトで、参照サンプルとテストサンプルからランダム(正規)データ(n=3)を用いて一定回数のシミュレーションを実行し、そのデータセットに対して同等性検定を実施して、同等性が実証されたかどうかを報告してもらいたいと思っています。そして、x回の繰り返しについて、タイプ1の誤りの頻度を算出したいと考えています。
AIと少しの調査で以下のコードにたどり着いたのですが、明らかに動作しません。特定のセクションをコメントアウトしてTOSTを正常に実行できるのですが…それ以上先に進めないようです。
JMP19を使用しています。
ご協力いただきありがとうございます!
コードは下記、ファイルは添付。
// パラメータ
シミュレーション回数 = 10;
グループあたりn = 3;
refMean = 99.1;
テスト平均 = 98.8;
標準偏差 = 0.1;
等価マージン = 0.3;
type1エラー = 0;
// 自由度 = 2n - 2 の 90% CI の臨界 t 値
df = 2 * nPerGroup - 2;
tCrit = StudentTQuantile(0.950, 自由度);
// 要約テーブルを作成する
summaryTable = 新しいテーブル("シミュレーション概要",
新しい列("シミュレーション",数値),
新しい列("CI_Lower", 数値),
新しい列("CI_Upper", 数値),
新しい列("Equivalence_Concluded", 文字)、
新しい列("Mean_Diff", 数値)
);
// シミュレーションをループする
For(sim = 1, sim <= numSimulations, sim++,
// 新しいデータテーブルを作成する
dt = 新しいテーブル("Sim" || Char(sim),
行を追加(nPerGroup * 2)、
新しい列("グループ", 文字),
新しい列("値", 数値)
);
// 参照グループをシミュレートする
i = 1, i <= nPerGroup, i++, の場合
dt:Group[i] = "参照";
dt:Value[i] = ランダム正規分布(refMean, sd);
);
// テストグループをシミュレートする
i = nPerGroup + 1, i <= nPerGroup * 2, i++, の場合
dt:Group[i] = "テスト";
dt:Value[i] = ランダム正規分布(testMean, sd);
);
// 値を抽出する
refVals = dt << Get As Matrix( :Value )[1::nPerGroup];
testVals = dt << Get As Matrix( :Value )[nPerGroup+1::nPerGroup*2];
meanDiff = 平均(テスト値) - 平均(参照値)。
// 標本分散
varRef = 分散(refVals);
varTest = 分散(テスト値)。
// プールされた分散
pooledVar = ((nPerGroup - 1) * varRef + (nPerGroup - 1) * varTest) / df;
プールされたSD = Sqrt(プールされた変数);
// 差の標準誤差
seDiff = プールされたSD * Sqrt(2 / nPerGroup);
// 90% 信頼区間
ciLower = meanDiff - tCrit * seDiff;
ciUpper = meanDiff + tCrit * seDiff;
// 同等性をチェックする
eqResult = "いいえ";
ciLower > -equivMargin & ciUpper < equivMarginの場合、
type1エラー++;
eqResult = "はい";
);
// 結果をログに記録する
summaryTable << 行を追加(1);
サマリーテーブル:シミュレーション[sim] = sim;
サマリーテーブル:CI_Lower[sim] = ciLower;
サマリーテーブル:CI_Upper[sim] = ciUpper;
サマリーテーブル:Equivalence_Concluded[sim] = eqResult;
サマリーテーブル:Mean_Diff[sim] = meanDiff;
// 乱雑にならないようにテーブルを閉じます
dt << ウィンドウを閉じる;
);
// 結果を表示
新しいウィンドウ("タイプIエラーの概要",
テキストボックス("合計シミュレーション数: " || Char(numSimulations)),
テキストボックス("タイプIエラー: " || Char(type1Errors)),
テキストボックス("推定タイプIエラー率: " || Char(Round(type1Errors / numSimulations * 100, 2)) || "%")
);