Регулировка значения p для адаптивного последовательного анализа (для теста хи-квадрат)?


12

Я хотел бы знать, какая статистическая литература имеет отношение к следующей проблеме, и, возможно, даже идея о том, как ее решить.

Представьте себе следующую проблему:

У нас есть 4 возможных лечения некоторых заболеваний. Чтобы проверить, какое лечение лучше, мы проводим специальное исследование. В испытании мы начинаем с отсутствия субъектов, затем, один за другим, в исследование включается больше субъектов. Каждому пациенту случайным образом назначается один из 4 возможных способов лечения. Конечный результат лечения - «здоров» или «все еще болен», и, скажем, мы можем узнать этот результат мгновенно. Это означает, что в любой данный момент мы можем создать таблицу непредвиденных обстоятельств два на четыре, в которой будет указано, сколько наших пациентов попало в какое лечение / конечный результат.

В любой момент мы можем проверить таблицу непредвиденных обстоятельств (например, с помощью критерия хи-квадрат), чтобы увидеть, существует ли статистически разная обработка между 4 возможными обработками. Если один из них лучше, чем все остальные - мы прекращаем испытание и выбираем его в качестве «победителя». Если какое-либо испытание окажется хуже, чем все остальные три, мы исключим его из испытания и перестанем давать его будущим пациентам.

Однако проблема здесь заключается в том, как мне отрегулировать значение p для того факта, что тест может быть выполнен в любой заданной точке, что существует корреляция между тестами, а также что адаптивный характер процесса манипулирует процессом (для Например, если какое-то лечение окажется «плохим»)?


2
Уолд придумал свой последовательный тест отношения вероятности (SPRT), чтобы создать правило остановки - количество предметов, которые вам нужны, чтобы иметь доказательства против нуля. Смотрите мое объяснение здесь: stats.stackexchange.com/a/16120/401 Это только проверяет одну гипотезу. Но когда вы предлагаете критерий хи-квадрат, это всего лишь одна гипотеза (все методы лечения одинаково эффективны). Похоже, что вы можете настроить «первичное» значение p в моем посте для многократного тестирования и сделать несколько тестов. Мне нужно больше думать о том, как включить изменение набора процедур.
Чарли

1
Я просто хочу отметить, что существует вариация под названием «Групповой последовательный анализ», касающаяся более чем одного параметра. Книга « Клиническая статистика: введение в клинические испытания, анализ выживаемости и продольный анализ данных» может помочь в соответствии с различными источниками, но я никогда прочитайте это лично.
Штеффен

1
Я не могу подчеркнуть, насколько интересен этот вопрос. Решение будет также ответить на многие вопросы , касающиеся AB-тестов ( ту же задачу, но затраты ошибок смехотворно низшему)
Штеффен

1
Книга Дженнисона и Тернбулла « Групповые последовательные методы с приложениями к клиническим испытаниям » охватывает многие из таких последовательных проектов испытаний. Я не помню, охватывался ли дизайн с четырьмя обработками (но я предполагаю, что это просто модель логистической регрессии с тремя фиктивными переменными), но это хорошая книга, и ее стоит прочитать, если вас интересуют подобные проблемы , (И @steffen, то / B-тест A (то есть, простой бином проблема) будет покрыт в книге.)
Карл Уве Hufthammer

Ответы:


2

Эта область последовательных клинических испытаний была в значительной степени изучена в литературе. Среди известных исследователей - Скотт Эмерсон, Том Флемминг, Дэвид Деметс, Стивен Сенн и Стюарт Покок.

Можно указать «правило альфа-расходов». Термин берет свое начало в природе частых (нефишерианских) тестов, где каждое действие, которое увеличивает риск ложноположительного результата, должно обязательно снижать мощность, чтобы сохранить тест правильного размера. Однако большинство таких тестов требуют, чтобы «правила остановки» были заранее определены на основе информационных границ исследования. (как напоминание, больше информации означает большую мощность, когда ноль ложен).

Похоже, что вас интересует непрерывный процесс мониторинга, при котором каждое событие-время гарантирует «просмотр» данных. Насколько мне известно, такой тест не имеет силы. Это можно сделать с помощью байесовского анализа, где апостериорные значения постоянно обновляются как функция времени, а байесовские факторы используются для обобщения данных, а не значений.p

Видеть

[1] www.rctdesign.org/


+1. Я опубликовал другой ответ, в котором я использую симуляцию для вычисления частоты ошибок типа II предлагаемой процедуры. Это позволяет выбрать номинальную альфу так, чтобы тест имел правильный размер. Интересно, что вы думаете об этом?
амеба говорит восстановить монику

1

Это звучит как симуляция в порядке.

Поэтому я смоделировал вашу процедуру следующим образом: человек добавляются к пробной версии один за другим, случайным образом распределенные в одну из групп. Результат лечения для этого человека выбирается случайным образом (т. Е. Я имитирую нулевую гипотезу о всех методах лечения с нулевым эффектом). После добавления каждого человека я выполняю тест хи-квадрат в таблице непредвиденных обстоятельств и проверяю, есть ли . Если это так, тогда (и только тогда) я дополнительно выполняю тесты хи-квадрат для сокращенных таблиц сопряженности × чтобы проверить каждую группу против трех других групп, объединенных вместе. Если один из этих дальнейших четырех тестов окажется значительным (с тем же4 4 × 2 p α 2 × 2 α N NN=100044×2pα2×2α), тогда я проверяю, работает ли это лечение лучше или хуже, чем остальные три, объединенные вместе. Если хуже, я выгоняю это лечение и продолжаю добавлять людей. Если лучше, я прекращаю испытание. Если все человек будут добавлены без какого-либо успешного лечения, испытание закончится (обратите внимание, что результаты моего анализа будут сильно зависеть от ).NN

Теперь мы можем повторить это много раз и выяснить, в какой части прогонов одно из действий выходит победителем - это были бы ложные срабатывания. Если я запускаю его 1000 раз для номинального , я получаю 282 ложных срабатывания, то есть типа ошибок II типа.0,28α=0.050.28

Мы можем повторить весь этот анализ для нескольких номинальных и посмотреть, какую фактическую частоту появления ошибок мы получаем: Таким образом, если вы хотите, чтобы фактическая частота ошибок удерживалась, скажем, на уровне , вы должны выбрать номинальную около - но, конечно, лучше запустить более длительное моделирование, чтобы оценить это более точно.& alpha ; коэффициент ошибок 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

Мой быстрый и грязный код в Matlab ниже. Пожалуйста, обратите внимание, что этот код «мертвый мозг» и не оптимизирован вообще; все работает в петлях и ужасно медленно. Это, вероятно, может быть значительно ускорено.

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.