Ajustement de la valeur de p pour l'analyse séquentielle adaptative (pour le test du chi carré)?

12

Je souhaite savoir quelle littérature statistique est pertinente pour le problème suivant, et peut-être même une idée sur la façon de le résoudre.

Imaginez le problème suivant:

Nous avons 4 traitements possibles pour certaines maladies. Afin de vérifier quel traitement est le meilleur, nous effectuons un essai spécial. Dans l'essai, nous commençons par n'avoir aucun sujet, puis, un par un, d'autres sujets sont entrés dans l'essai. Chaque patient est affecté aléatoirement à l'un des 4 traitements possibles. Le résultat final d'un traitement est soit "sain" soit "encore malade", et disons que nous pouvons connaître ce résultat instantanément. Cela signifie qu'à tout moment, nous pouvons créer un tableau de contingence de deux par quatre, indiquant combien de nos sujets sont tombés dans quel traitement / résultat final.

À tout moment, nous pouvons vérifier le tableau de contingence (par exemple, en utilisant un test du chi carré), pour voir s'il existe un traitement statistiquement différent entre les 4 traitements possibles. Si l'un d'eux est meilleur que tous les autres - nous arrêtons le procès et le choisissons comme "gagnant". Si un essai s'avère pire que les trois autres, nous le retirerons de l'essai et cesserons de le donner aux futurs patients.

Cependant, le problème ici est de savoir comment ajuster la valeur de p pour le fait que le test peut être effectué à un moment donné, qu'il existe une corrélation entre les tests et également que la nature adaptative du processus manipule le processus (pour exemple, si un traitement est jugé "mauvais")?

Tal Galili
la source
2
Wald est venu avec son test de rapport de probabilité séquentiel (SPRT) pour créer une règle d'arrêt, le nombre de sujets dont vous avez besoin d'avoir des preuves contre le nul. Voir mon explication ici: stats.stackexchange.com/a/16120/401 Cela ne teste cependant qu'une seule hypothèse. Mais, lorsque vous proposez un test du chi carré, ce n'est qu'une seule hypothèse (tous les traitements sont tout aussi efficaces). Il semble que vous puissiez ajuster la valeur de p "primaire" dans mon article pour plusieurs tests et faire plusieurs tests. Il faudrait que je réfléchisse davantage à la manière d'incorporer le changement de l'ensemble des traitements.
Charlie
1
Je veux juste de noter qu'il existe une variante appelée « Groupe de l' analyse séquentielle » traitant plus d'un livre paramètre.Système Statistiques cliniques: Présentation des essais cliniques, analyse de la survie et l' analyse des données longitudinales pourrait aider , selon diverses sources, mais je ne lisez-le personnellement.
steffen
1
Je ne peux pas souligner à quel point cette question est intéressante. Le résoudre répondra également à de nombreuses questions concernant les ab-tests (même tâche, mais les coûts d'erreur sont ridiculement inférieurs)
steffen
1
L'ouvrage Group Sequential Methods with Applications to Clinical Trials de Jennison et Turnbull couvre de nombreux modèles d'essais séquentiels. Je ne me souviens pas si le plan à quatre traitements est couvert (mais je suppose que ce n'est qu'un modèle de régression logistique avec trois variables muettes), mais c'est un bon livre, et ça vaut vraiment la peine d'être lu si vous êtes intéressé par des problèmes comme celui-ci . (Et @steffen, le test A / B (c'est-à-dire un problème binomial simple) est couvert dans le livre.)
Karl Ove Hufthammer

Réponses:

2

Ce domaine des essais cliniques séquentiels a été largement exploré dans la littérature. Certains des chercheurs notables sont Scott Emerson, Tom Flemming, David DeMets, Stephen Senn et Stuart Pocock, entre autres.

Il est possible de spécifier une "règle de dépenses alpha". Le terme a ses origines dans la nature des tests fréquentistes (non-pêcheurs) où, chaque action qui augmente le risque de faux positifs devrait nécessairement réduire le pouvoir de garder le test de la bonne taille. Cependant, la majorité de ces tests exigent que les "règles d'arrêt" soient prédéfinies sur la base des limites de l'information de l'étude. (pour rappel, plus d'informations signifie plus de puissance lorsque la valeur null est fausse).

Il semble que ce qui vous intéresse soit un processus de surveillance continue dans lequel chaque heure de l'événement justifie un "regard" sur les données. À ma connaissance, un tel test n'a aucun pouvoir. Cela peut être fait avec une analyse bayésienne où le postérieur est continuellement mis à jour en fonction du temps, et les facteurs de Bayes sont utilisés pour résumer les preuves plutôt que les valeurs .p

Voir

[1] www.rctdesign.org/

AdamO
la source
+1. J'ai posté une autre réponse où j'utilise une simulation pour calculer le taux d'erreur de type II de la procédure suggérée. Cela permet de choisir un alpha nominal tel que le test ait la bonne taille. Je me demande ce que vous en pensez.
Amoeba dit Reinstate Monica
1

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α

αerror rate0.050.280.010.060.0010.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
amibe dit réintégrer Monica
la source