こんにちは、みんな、
100個のデータセット(それぞれ参照データとテストデータを3回ずつ測定)をシミュレートし、各反復ごとに同等性検定を実行するスクリプトを作成しようとしています。出力は、同等性が示された回数の頻度を示すレポートにしたいと考えています(注:このレポートは、設定された同等性マージンを与えられた場合にタイプ1の誤りが発生する確率を予測するために使用したいと考えています)。
AIと少しの調査で以下のコードを作成したのですが、うまく動作しません。状況を複雑にしているのかもしれません…コミュニティの皆様からのご指導やご支援をいただければ幸いです。
ありがとう!
クリス
// パラメータ
シミュレーション回数 = 10;
nPerGroup = 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)) || "%")
);