Это звучит как симуляция в порядке.
Поэтому я смоделировал вашу процедуру следующим образом: человек добавляются к пробной версии один за другим, случайным образом распределенные в одну из групп. Результат лечения для этого человека выбирается случайным образом (т. Е. Я имитирую нулевую гипотезу о всех методах лечения с нулевым эффектом). После добавления каждого человека я выполняю тест хи-квадрат в таблице непредвиденных обстоятельств и проверяю, есть ли . Если это так, тогда (и только тогда) я дополнительно выполняю тесты хи-квадрат для сокращенных таблиц сопряженности × чтобы проверить каждую группу против трех других групп, объединенных вместе. Если один из этих дальнейших четырех тестов окажется значительным (с тем же4 4 × 2 p ≤ α 2 × 2 α N NN=100044×2p≤α2×2α), тогда я проверяю, работает ли это лечение лучше или хуже, чем остальные три, объединенные вместе. Если хуже, я выгоняю это лечение и продолжаю добавлять людей. Если лучше, я прекращаю испытание. Если все человек будут добавлены без какого-либо успешного лечения, испытание закончится (обратите внимание, что результаты моего анализа будут сильно зависеть от ).NN
Теперь мы можем повторить это много раз и выяснить, в какой части прогонов одно из действий выходит победителем - это были бы ложные срабатывания. Если я запускаю его 1000 раз для номинального , я получаю 282 ложных срабатывания, то есть типа ошибок II типа.0,28α=0.050.28
Мы можем повторить весь этот анализ для нескольких номинальных и посмотреть, какую фактическую частоту появления ошибок мы получаем: Таким образом, если вы хотите, чтобы фактическая частота ошибок удерживалась, скажем, на уровне , вы должны выбрать номинальную около - но, конечно, лучше запустить более длительное моделирование, чтобы оценить это более точно.& alpha ; коэффициент ошибок 0,05 ~ 0,28 0,01 ~ 0,06 0,001 ~ 0,008 0,05 α 0,008α
α0.050.010.001error rate∼0.28∼0.06∼0.008
0.05α0.008
Мой быстрый и грязный код в Matlab ниже. Пожалуйста, обратите внимание, что этот код «мертвый мозг» и не оптимизирован вообще; все работает в петлях и ужасно медленно. Это, вероятно, может быть значительно ускорено.
function seqAnalysis()
alphas = [0.001 0.01 0.05];
for a = 1:length(alphas)
falsePositives(a) = trials_run(1000, 1000, alphas(a));
end
display(num2str([alphas; falsePositives]))
end
function outcome = trials_run(Nrep, N, alpha)
outcomes = zeros(1,Nrep);
for rep = 1:Nrep
if mod(rep,10) == 0
fprintf('.')
end
outcomes(rep) = trial(N, alpha);
end
fprintf('\n')
outcome = sum(outcomes);
end
function result = trial(N, alpha)
outcomes = zeros(2,4);
result = 0;
winner = [];
%// adding subjects one by one
for subject = 1:N
group = randi(size(outcomes,2));
outcome = randi(2);
outcomes(outcome, group) = outcomes(outcome, group) + 1;
%// if groups are significantly different
if chisqtest(outcomes) < alpha
%// compare each treatment against the rest
for group = 1:size(outcomes,2)
contrast = [outcomes(:, group) ...
sum(outcomes(:, setdiff(1:size(outcomes,2), group)),2)];
%// if significantly different
if chisqtest(contrast) < alpha
%// check if better or worse
if contrast(1,1)/contrast(2,1) < contrast(1,2)/contrast(2,2)
%// kick out this group
outcomes = outcomes(:, setdiff(1:size(outcomes,2), group));
else
%// winner!
winner = group;
end
break
end
end
end
if ~isempty(winner)
result = 1;
break
end
end
end
function p = chisqtest(x)
e = sum(x,2)*sum(x)/sum(x(:));
X2 = (x-e).^2./e;
X2 = sum(X2(:));
df = prod(size(x)-[1 1]);
p = 1-chi2cdf(X2,df);
end