Cela ressemble à une simulation est en règle.
J'ai donc simulé votre procédure comme suit: personnes sont ajoutées à l'essai une par une, assignées au hasard à l'un des groupes. Le résultat du traitement pour cette personne est choisi au hasard (c'est-à-dire que je simule l'hypothèse nulle de tous les traitements n'ayant aucun effet). Après avoir ajouté chaque personne, j'effectue un test du chi carré sur la table de contingence et vérifie si . Si tel est le cas, alors (et seulement à ce moment-là), j'effectue également des tests de chi carré sur les tables de contingence réduites pour tester chaque groupe par rapport à trois autres groupes regroupés. Si l'un de ces quatre autres tests s'avère significatif (avec le même4 4 × 2 p ≤ α 2 × 2 α N NN=100044×2p≤α2×2α), je vérifie ensuite si ce traitement est meilleur ou pire que les trois autres regroupés. Si pire, je rejette ce traitement et continue d'ajouter des gens. Si c'est mieux, j'arrête le procès. Si toutes les personnes sont ajoutées sans aucun traitement gagnant, l'essai est terminé (notez que les résultats de mon analyse dépendront fortement de ).NN
Maintenant, nous pouvons exécuter cela plusieurs fois et savoir dans quelle fraction de séries l'un des traitements sortira vainqueur - ce serait de faux positifs. Si je l'exécute 1000 fois pour un nominal , j'obtiens 282 faux positifs, soit un taux d'erreur de type II.0,28α=0.050.28
Nous pouvons répéter toute cette analyse pour plusieurs nominaux et voir quel taux d'erreur réel nous obtenons: Donc, si vous voulez que le taux d'erreur réel soit maintenu par exemple à , vous devez choisir le nominal d'environ - mais bien sûr, il vaut mieux exécuter un simulation plus longue pour estimer cela plus précisément.α taux d'erreur 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
Mon code rapide et sale dans Matlab est ci-dessous. Veuillez noter que ce code est mort de cerveau et n'est pas optimisé du tout; tout tourne en boucle et horriblement lent. Cela peut probablement être beaucoup accéléré.
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