Dostosowanie wartości p dla adaptacyjnej analizy sekwencyjnej (dla testu chi kwadrat)?

12

Chciałbym wiedzieć, która literatura statystyczna jest istotna dla następującego problemu, a może nawet pomysł, jak go rozwiązać.

Wyobraź sobie następujący problem:

Mamy 4 możliwe sposoby leczenia niektórych chorób. Aby sprawdzić, które leczenie jest lepsze, przeprowadzamy specjalną próbę. W rozprawie zaczynamy od braku podmiotów, a następnie, jeden po drugim, kolejnych uczestników jest włączanych do badania. Każdy pacjent jest losowo przydzielany do jednego z 4 możliwych zabiegów. Końcowy wynik leczenia jest „zdrowy” lub „nadal chory” i powiedzmy, że możemy natychmiast poznać ten wynik. Oznacza to, że w dowolnym momencie możemy stworzyć tabelę awaryjną dwa na cztery, mówiąc, ilu naszych pacjentów wpadło do którego leczenia / wyniku końcowego.

W dowolnym momencie możemy sprawdzić tabelę nieprzewidzianych zdarzeń (na przykład za pomocą testu chi-kwadrat), aby sprawdzić, czy istnieje statystycznie różne leczenie między 4 możliwymi zabiegami. Jeśli jeden z nich jest lepszy niż cała reszta - zatrzymujemy próbę i wybieramy ją jako „zwycięzcę”. Jeśli okaże się, że niektóre badania są gorsze niż wszystkie pozostałe trzy, usuniemy go z badania i przestaniemy przekazywać go przyszłym pacjentom.

Problem polega jednak na tym, jak dostosować wartość p dla faktu, że test można wykonać w dowolnym punkcie, że istnieje korelacja między testami, a także, że adaptacyjny charakter procesu manipuluje procesem (dla na przykład, jeśli okaże się, że pewne leczenie jest „złe”)?

Tal Galili
źródło
2
Wald wymyślił swój sekwencyjny test współczynnika prawdopodobieństwa (SPRT), aby stworzyć regułę zatrzymania, liczbę podmiotów, których potrzebujesz, aby mieć dowody przeciwko wartości zerowej. Zobacz moje wyjaśnienie tutaj: stats.stackexchange.com/a/16120/401 To jednak testuje tylko jedną hipotezę. Ale jeśli zaproponujesz test chi-kwadrat, jest to tylko jedna hipoteza (wszystkie zabiegi są jednakowo skuteczne). Wygląda na to, że możesz dostosować „pierwotną” wartość p w moim poście do wielu testów i wykonać kilka testów. Musiałbym więcej pomyśleć o tym, jak uwzględnić zmianę zestawu zabiegów.
Charlie
1
Chcę tylko zauważyć, że istnieje odmiana zwana „Grupową analizą sekwencyjną”, która dotyczy więcej niż jednego parametru. Książka Statystyka kliniczna: Wprowadzenie do badań klinicznych, Analiza przeżycia i Analiza danych podłużnych może pomóc według różnych źródeł, ale nigdy nie przeczytaj to osobiście.
steffen
1
Nie mogę podkreślić, jak interesujące jest to pytanie. Rozwiązanie tego problemu pozwoli również odpowiedzieć na wiele pytań dotyczących testów ab (testy to samo zadanie, ale koszty błędów są absurdalnie niższe)
steffen
1
Książka Group Sequential Methods with Applications to Clinical Trials autorstwa Jennison i Turnbull obejmuje wiele takich sekwencji badań sekwencyjnych. Nie pamiętam, czy uwzględniono projekt czteroleczenia (ale wydaje mi się, że jest to tylko model regresji logistycznej z trzema zmiennymi fikcyjnymi), ale jest to fajna książka i bardzo warta przeczytania, jeśli jesteś zainteresowany takimi problemami . (I @steffen, test A / B (tj. Prosty problem dwumianowy) jest omówiony w książce.)
Karl Ove Hufthammer

Odpowiedzi:

2

Ten obszar kolejnych badań klinicznych został zasadniczo zbadany w literaturze. Niektórzy z wybitnych badaczy to między innymi Scott Emerson, Tom Flemming, David DeMets, Stephen Senn i Stuart Pocock.

Możliwe jest określenie „reguły wydatkowania alfa”. Termin ten ma swoje źródło w charakterze testów częstych (niefisheryjskich), w których każde działanie, które zwiększa ryzyko fałszywie dodatniego wyniku, musi koniecznie zmniejszyć moc, aby utrzymać prawidłowy rozmiar testu. Jednak większość takich testów wymaga, aby „reguły zatrzymywania” były wstępnie określone w oparciu o granice informacyjne badania. (dla przypomnienia, więcej informacji oznacza większą moc, gdy wartość null jest fałszywa).

Wygląda na to, że to, co Cię interesuje, to ciągły proces monitorowania, w którym każde wydarzenie gwarantuje „spojrzenie” na dane. Według mojej najlepszej wiedzy taki test nie ma mocy. Można tego dokonać za pomocą analizy bayesowskiej, w której tylna część ciała jest stale aktualizowana w funkcji czasu, a współczynniki Bayesa służą raczej do podsumowania dowodów niż wartości .p

Widzieć

[1] www.rctdesign.org/

AdamO
źródło
+1. Opublikowałem inną odpowiedź, w której używam symulacji do obliczenia poziomu błędu typu II sugerowanej procedury. Pozwala to wybrać nominalną wartość alfa, tak aby test miał prawidłowy rozmiar. Zastanawiam się, co o tym sądzisz.
ameba mówi Przywróć Monikę
1

To brzmi jak symulacja jest w porządku.

Więc symulowałem twoją procedurę w następujący sposób: osób jest dodawanych do badania jeden po drugim, losowo przypisywanych do jednej z grup. Wynik leczenia tej osoby jest wybierany losowo (tzn. Symuluję zerową hipotezę wszystkich zabiegów o zerowym efekcie). Po dodaniu każdej osoby wykonuję test chi kwadrat na tabeli nieprzewidzianych zdarzeń i sprawdzam, czy . Jeśli tak, to (i tylko wtedy) wykonuję dodatkowo testy chi-kwadrat na zredukowanych tabelach kontyngencji aby przetestować każdą grupę względem pozostałych trzech grup zebranych razem. Jeśli jeden z tych czterech kolejnych testów okaże się znaczący (z tym samymN=100044×2pα2×2α), a następnie sprawdzam, czy to leczenie działa lepiej czy gorzej niż pozostałe trzy połączone razem. Jeśli gorzej, wyrzucam to leczenie i kontynuuję dodawanie ludzi. Jeśli lepiej, zatrzymam proces. Jeśli wszystkie osób zostanie dodanych bez zwycięskiego leczenia, próba zostanie zakończona (zauważ, że wyniki mojej analizy będą silnie zależeć od ).NN

Teraz możemy uruchomić to wiele razy i dowiedzieć się, w jakim ułamku serii jeden z zabiegów wychodzi jako zwycięzca - byłyby to wyniki fałszywie pozytywne. Jeśli uruchomię go 1000 razy dla nominalnego , otrzymam 282 fałszywie dodatnie, tj . Współczynnik błędu typu II.α=0.050.28

Możemy powtórzyć całą analizę dla kilku nominalnych i zobaczyć, jaki rzeczywisty poziom błędu otrzymujemy: Więc jeśli chcesz utrzymać rzeczywisty poziom błędu, powiedzmy na poziomie , powinieneś wybrać nominalny około - ale oczywiście lepiej jest uruchomić dłuższa symulacja w celu dokładniejszego oszacowania.α

αerror rate0.050.280.010.060.0010.008
0.05α0.008

Mój szybki i brudny kod w Matlabie znajduje się poniżej. Należy pamiętać, że ten kod jest mózgowy i w ogóle nie zoptymalizowany; wszystko działa w pętli i jest strasznie wolne. Prawdopodobnie można to znacznie przyspieszyć.

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
ameba mówi Przywróć Monikę
źródło