Cálculos de potência / tamanho da amostra para estudo de biomarcadores

13

Temos um potencial biomarcador para prever se um paciente tem câncer ou não. O resultado do teste de biomarcador é binário sendo positivo ou negativo. Queremos ter uma noção da quantidade de pacientes que precisam ser testados para determinar se esse biomarcador é um bom preditor ou não.

Pela leitura na internet, parece que o caminho a seguir é examinar a sensibilidade (para o número de casos) e a especificidade (para o número de controles). Sugere-se que você trate essa situação como um teste de proporção de uma amostra, mas ainda não está claro como você deve estimar qual é a sensibilidade e o intervalo para o qual está preparado. Se, digamos, eu considero "bom" qualquer biomarcador com uma sensibilidade maior que 0,8, como você configuraria as duas variáveis? Eu gostaria que minha hipótese nula fosse o biomarcador não é melhor que uma atribuição aleatória, ou seja, uma sensibilidade de 0,5. Alguém poderia dar um exemplo da melhor maneira de fazer isso (especialmente se estiver em R).

danielsbrewer
fonte
Você está dizendo que vai começar com um conjunto de casos conhecidos, depois executar seu teste de biomarcador (coletar dados) e estimar a sensibilidade? E você começará com um conjunto de controles conhecidos, coletará dados e estimará a especificidade?
Para este cálculo em vigor, sim. Na realidade, não saberemos antes do recrutamento de pacientes, mas continuaremos recrutando até termos casos e controles suficientes. Também temos uma taxa estimada de que um paciente será um caso, para que possamos usá-lo para estimar o número total que precisaremos recrutar,
danielsbrewer
Se o biomarcador der apenas uma resposta sim / não, então você pode seguir com sensibilidade / especificidade e fazer um planejamento em um contexto para testes de proporções. Se um valor para um deles é "bom" ou "ruim" depende das consequências da vida real de uma decisão falsa. Se o biomarcador originalmente fornecer uma medição contínua, as curvas ROC e as estatísticas da AUC e os métodos de planejamento de tamanho de amostra correspondentes podem ser mais apropriados. Mas tudo isso só arranhões na superfície dos métodos relacionados com testes de diagnóstico ...
PSJ

Respostas:

11

Vamos falar sobre sensibilidade (que iremos denotar por ), a especificidade é semelhante. A seguir, é apresentada uma abordagem freqüentista; seria ótimo se um dos bayesianos aqui pudesse adicionar outra resposta para discutir uma maneira alternativa de fazer isso.p

Suponha que você tenha recrutado pessoas com câncer. Você aplica seu teste de biomarcador a cada um deles, para obter uma sequência de 0 e 1 que chamaremos . As entradas de terão uma distribuição de Bernoulli com probabilidade de sucesso p . A estimativa de p é p = Σ x / n . Esperemos que p é "grande", e você pode julgar a precisão da sua estimativa através de um intervalo de confiança para p . nxxppp^=x/np^p

np=0,5np=0,57α=0,05

Existem pelo menos duas abordagens - analítica e simulação. O pwrpacote Rjá existe para ajudar nesse design - você precisa instalá-lo primeiro. Em seguida, você precisará de um tamanho de efeito, e a função que você deseja será pwr.p.test.

library(pwr)
h1 <- ES.h(0.57, 0.5)
pwr.p.test(h = h1, n = NULL, sig.level = 0.05, power = 0.9, alt = "greater")

     proportion power calculation for binomial distribution (arc... 

              h = 0.1404614
              n = 434.0651
      sig.level = 0.05
          power = 0.9
    alternative = greater

4350,570,900,050,57

Depois de obter seus dados, a maneira de executar o teste é (simularemos dados por razões de argumento).

n <- 435
sens <- 0.57
x <- rbinom(n, size = 1, prob = sens)
binom.test(sum(x), n, p = 0.5, alt = "greater")

    Exact binomial test

data:  sum(x) and n 
number of successes = 247, number of trials = 435,
p-value = 0.002681
alternative hypothesis: true probability of success is greater than 0.5 
95 percent confidence interval:
 0.527342 1.000000 
sample estimates:
probability of success 
             0.5678161 

0,568p[0,527,1]

EDIT: Se você gosta mais da abordagem de simulação, pode fazê-lo desta maneira:

n <- 435
sens <- 0.57
nSim <- 1000

e deixe runTestser

runTest <- function(){
  x <- rbinom(1, size = n, prob = sens)
  tmp <- binom.test(x, n, p = 0.5, alt = "greater")
  tmp$p.value < 0.05
}

então a estimativa de poder é

mean(replicate(nSim, runTest()))
[1] 0.887

fonte