Esto suena como una simulación en orden.
Entonces simulé su procedimiento de la siguiente manera: personas se agregan a la prueba una por una, asignadas aleatoriamente a uno de los grupos. El resultado del tratamiento para esta persona se elige al azar (es decir, estoy simulando una hipótesis nula de que todos los tratamientos tienen un efecto cero). Después de agregar a cada persona, realizo una prueba de chi cuadrado en la tabla de contingencia y verifico si . Si es así, entonces (y solo entonces) adicionalmente realizo pruebas de chi cuadrado en las tablas de contingencia reducidas para probar cada grupo contra otros tres grupos agrupados. Si una de estas cuatro pruebas adicionales resulta significativa (con el mismo4 4 × 2 p ≤ α 2 × 2 α N NN=100044×2p≤α2×2α), luego verifico si este tratamiento funciona mejor o peor que los otros tres juntos. Si es peor, dejo este tratamiento y continúo agregando personas. Si es mejor, detengo el juicio. Si se agregan todas las personas sin ningún tratamiento ganador, la prueba termina (tenga en cuenta que los resultados de mi análisis dependerán en gran medida de ).NN
Ahora podemos ejecutar esto muchas veces y descubrir en qué fracción de ejecuciones sale uno de los tratamientos como ganador: estos serían falsos positivos. Si lo ejecuto 1000 veces para nominal , obtengo 282 falsos positivos, es decir, tasa de error tipo II.0.28α=0.050.28
Podemos repetir todo este análisis para varios nominales y ver qué tasa de error real obtenemos: Entonces, si desea que la tasa de error real se mantenga en un nivel de , debe elegir el nominal de alrededor de , pero, por supuesto, es mejor ejecutar un simulación más larga para estimar esto con mayor precisión.α tasa de error 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
Mi código rápido y sucio en Matlab está debajo. Tenga en cuenta que este código tiene muerte cerebral y no está optimizado en absoluto; todo corre en bucles y horriblemente lento. Esto probablemente se puede acelerar 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