Esto suena como si una simulación estuviera en orden.
Así que simulé su procedimiento de la siguiente manera: $N=1000$ las personas se añaden al ensayo una a una, asignadas al azar a uno de los $4$ grupos. El resultado del tratamiento para esta persona se elige al azar (es decir, estoy simulando la hipótesis nula de que todos los tratamientos tienen un efecto nulo). Después de agregar a cada persona, realizo una prueba de chi cuadrado en el $4 \times 2$ tabla de contingencia y compruebe si $p \le \alpha $ . Si es así, entonces (y sólo entonces) adicionalmente realizo pruebas de chi cuadrado en el reducido $2 \times 2$ tablas de contingencia para probar cada grupo contra otros tres grupos reunidos. Si una de estas cuatro pruebas adicionales resulta significativa (con la misma $ \alpha $ ), entonces compruebo si este tratamiento funciona mejor o peor que los otros tres juntos. Si es peor, dejo este tratamiento y continúo añadiendo gente. Si es mejor, detengo el ensayo. Si todos $N$ se añaden personas sin ningún tratamiento ganador, el ensayo ha terminado (tenga en cuenta que los resultados de mi análisis dependerán en gran medida de $N$ ).
Ahora podemos hacer esto muchas veces y averiguar en qué fracción de las carreras uno de los tratamientos sale como ganador estos serían los falsos positivos. Si lo ejecuto 1000 veces para el nominal $ \alpha =0.05$ obtengo 282 falsos positivos, es decir $0.28$ tasa de error de tipo II.
Podemos repetir todo este análisis para varias $ \alpha $ y ver qué tasa de error real obtenemos: $$ \begin {array}{cc} \alpha & \text {error rate} \\ 0.05 & \sim 0.28 \\ 0.01 & \sim 0.06 \\ 0.001 & \sim 0.008 \end {array}$$ Así que si quieres que la tasa de error real se mantenga digamos en $0.05$ nivel, se debe elegir el nivel nominal $ \alpha $ de alrededor de $0.008$ -- pero por supuesto es mejor ejecutar una simulación más larga para estimar esto con mayor precisión.
Mi código rápido y sucio en Matlab está abajo. Por favor, tened en cuenta que este código tiene muerte cerebral y no está optimizado en absoluto; todo funciona en bucles y es terriblemente lento. Esto probablemente puede ser acelerado mucho.
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