大家好,
我正在嘗試創建一個模擬器,該模擬器將從參考樣本和測試樣本中生成一定數量的重複(例如 1000 次)隨機數據,然後對每次模擬運行等效性測試,並報告在給定定義的等效性界限下,I 類錯誤(錯誤證明等效性)的頻率。
我利用人工智慧和一些研究方法編寫了下面的程式碼,但卻無法讓它運作。我對腳本編寫還比較陌生,所以我確信答案應該很簡單……只是我搞不懂而已!
任何幫助都將不勝感激。
謝謝!
// 參數
模擬次數 = 1000;
每組人數 = 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)) || "%")
);