12 votos

¿Ajustando el valor p para el análisis secuencial adaptativo (para la prueba del chi cuadrado)?

Deseo saber qué literatura estadística es relevante para el siguiente problema, y tal vez incluso una idea sobre cómo resolverlo.

Imagina el siguiente problema:

Tenemos 4 posibles tratamientos para algunas enfermedades. Con el fin de comprobar qué tratamiento es mejor, realizamos un ensayo especial. En el ensayo, comenzamos sin sujetos, luego, uno por uno, se introducen más sujetos en el ensayo. Cada paciente es asignado al azar a uno de los 4 tratamientos posibles. El resultado final de un tratamiento es "sano" o "todavía enfermo", y digamos que podemos saber este resultado al instante. Esto significa que en cualquier momento, podemos crear una tabla de contingencia de dos por cuatro, diciendo cuántos de nuestros sujetos cayeron en qué tratamiento/resultado final.

En cualquier momento podemos comprobar la tabla de contingencia (por ejemplo, utilizando una prueba de chi cuadrado), para ver si hay un tratamiento estadísticamente diferente entre los 4 tratamientos posibles. Si uno de ellos es mejor que el resto, detenemos el ensayo y lo elegimos como el "ganador". Si algún ensayo es peor que los otros tres, lo retiramos del ensayo y dejamos de darlo a futuros pacientes.

Sin embargo, el problema aquí es ¿cómo ajusto el valor p por el hecho de que la prueba puede realizarse en un momento dado, que existe una correlación entre las pruebas y también que la naturaleza adaptativa del proceso manipula el proceso (por ejemplo, si se descubre que algún tratamiento es "malo")?

2voto

alexs77 Puntos 36

Esta área de ensayos clínicos secuenciales ha sido explorada sustancialmente en la literatura. Algunos de los notables investigadores son Scott Emerson, Tom Flemming, David DeMets, Stephen Senn, y Stuart Pocock entre otros.

Es posible especificar una "regla de gasto alfa". El término tiene su origen en la naturaleza de las pruebas de los frecuentadores (no pescadores), en las que cada acción que aumenta el riesgo de un falso positivo debe necesariamente reducir la potencia para mantener la prueba en el tamaño correcto. Sin embargo, la mayoría de esas pruebas requieren que se prescriban "reglas de parada" basadas en los límites de información del estudio. (como recordatorio, más información significa mayor poder cuando el nulo es falso).

Suena como si lo que le interesara es un proceso de monitoreo continuo en el que cada evento garantiza una "mirada" a los datos. Hasta donde yo sé, tal prueba no tiene ningún poder. Se puede hacer con el análisis bayesiano donde el posterior se actualiza continuamente en función del tiempo, y los factores bayesianos se utilizan para resumir las pruebas en lugar de $p$ -Valores.

Ver

[1] www.rctdesign.org/

1voto

zowens Puntos 1417

Esto suena como si una simulación estuviera en orden.

Así que simulé su procedimiento de la siguiente manera: $N=1000$ las personas se añaden al ensayo una a una, asignadas al azar a uno de los $4$ grupos. El resultado del tratamiento para esta persona se elige al azar (es decir, estoy simulando la hipótesis nula de que todos los tratamientos tienen un efecto nulo). Después de agregar a cada persona, realizo una prueba de chi cuadrado en el $4 \times 2$ tabla de contingencia y compruebe si $p \le \alpha $ . Si es así, entonces (y sólo entonces) adicionalmente realizo pruebas de chi cuadrado en el reducido $2 \times 2$ tablas de contingencia para probar cada grupo contra otros tres grupos reunidos. Si una de estas cuatro pruebas adicionales resulta significativa (con la misma $ \alpha $ ), entonces compruebo si este tratamiento funciona mejor o peor que los otros tres juntos. Si es peor, dejo este tratamiento y continúo añadiendo gente. Si es mejor, detengo el ensayo. Si todos $N$ se añaden personas sin ningún tratamiento ganador, el ensayo ha terminado (tenga en cuenta que los resultados de mi análisis dependerán en gran medida de $N$ ).

Ahora podemos hacer esto muchas veces y averiguar en qué fracción de las carreras uno de los tratamientos sale como ganador estos serían los falsos positivos. Si lo ejecuto 1000 veces para el nominal $ \alpha =0.05$ obtengo 282 falsos positivos, es decir $0.28$ tasa de error de tipo II.

Podemos repetir todo este análisis para varias $ \alpha $ y ver qué tasa de error real obtenemos: $$ \begin {array}{cc} \alpha & \text {error rate} \\ 0.05 & \sim 0.28 \\ 0.01 & \sim 0.06 \\ 0.001 & \sim 0.008 \end {array}$$ Así que si quieres que la tasa de error real se mantenga digamos en $0.05$ nivel, se debe elegir el nivel nominal $ \alpha $ de alrededor de $0.008$ -- pero por supuesto es mejor ejecutar una simulación más larga para estimar esto con mayor precisión.


Mi código rápido y sucio en Matlab está abajo. Por favor, tened en cuenta que este código tiene muerte cerebral y no está optimizado en absoluto; todo funciona en bucles y es terriblemente lento. Esto probablemente puede ser acelerado 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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X