你好,
我正在尝试编写一个脚本,该脚本将计算等效性检验中 I 类错误的预测频率(给定已知的等效性界值)。
我希望脚本使用来自参考样本和测试样本的随机(正态)数据(n=3)运行一定数量的模拟,然后对该数据集进行等效性检验,并报告是否证明了等效性。对于 x 次重复,我希望计算 I 类错误的发生频率。
我利用人工智能和一些推理方法找到了以下代码,但它显然无法正常工作。我可以注释掉某些部分并成功运行 TOST……但我似乎无法继续进行下去。
我使用的是JMP19。
感谢您的帮助!
以下是代码,文件已附上。
// 参数
模拟次数 = 10;
每组人数 = 3;
参考均值 = 99.1;
测试均值 = 98.8;
标准差 = 0.1;
等效边际 = 0.3;
type1Errors = 0;
// 自由度为 2n - 2 时,90% 置信区间的临界 t 值
df = 2 * nPerGroup - 2;
tCrit = StudentTQuantile(0.950, df);
// 创建汇总表
summaryTable = New Table("模拟摘要",
新列(“模拟”,数值型),
新列(“CI_Lower”,数值型),
新列(“CI_Upper”,数值型),
新列(“等效性已完成”,字符),
新列(“均值差值”,数值型)
);
// 循环执行模拟
对于(sim = 1,sim <= numSimulations,sim++,
// 创建新的数据表
dt = New Table("Sim" || Char(sim),
添加行数(每组行数 * 2),
新列(“组”,字符),
新列(“值”,数值型)
);
// 模拟参考组
对于(i = 1,i <= nPerGroup,i++,
dt:Group[i] = "参考";
dt:Value[i] = Random Normal(refMean, sd);
);
// 模拟测试组
对于(i = nPerGroup + 1,i <= nPerGroup * 2,i++,
dt:Group[i] = "Test";
dt:Value[i] = Random Normal(testMean, sd);
);
// 提取值
refVals = dt << Get As Matrix( :Value )[1::nPerGroup];
testVals = dt << Get As Matrix( :Value )[nPerGroup+1::nPerGroup*2];
meanDiff = Mean(testVals) - Mean(refVals);
// 样本方差
varRef = Variance(refVals);
varTest = Variance(testVals);
// 合并方差
pooledVar = ((nPerGroup - 1) * varRef + (nPerGroup - 1) * varTest) / df;
pooledSD = Sqrt(pooledVar);
// 差异的标准误差
seDiff = pooledSD * Sqrt(2 / nPerGroup);
// 90% 置信区间
ciLower = meanDiff - tCrit * seDiff;
ciUpper = meanDiff + tCrit * seDiff;
// 检查等效性
eqResult = "否";
如果(ciLower > -equivMargin 且 ciUpper < equivMargin,
type1Errors++;
eqResult = "是";
);
// 记录结果
summaryTable << 添加行(1);
summaryTable:Simulation[sim] = sim;
summaryTable:CI_Lower[sim] = ciLower;
summaryTable:CI_Upper[sim] = ciUpper;
summaryTable:Equivalence_Concluded[sim] = eqResult;
summaryTable:Mean_Diff[sim] = meanDiff;
// 关闭表格以避免杂乱。
dt << 关闭窗口;
);
// 显示结果
新窗口(“I 型错误摘要”)
文本框("模拟总数:" || Char(numSimulations)),
文本框("类型 I 错误:" || Char(type1Errors)),
文本框(“估计的 I 类错误率:” || Char(Round(type1Errors / numSimulations * 100, 2)) || “%”)
);