Contexto: estou interessado em entender como analisar dados de ensaios clínicos com controle de história natural, ou seja, um ensaio clínico em que um grupo de pessoas (digamos, pessoas com risco genético para uma doença) é recrutado, todas elas são tratadas com uma droga e sua sobrevivência (por exemplo, idade de início da doença ou morte devido a essa doença) é comparada à sobrevivência de controles históricos não tratados com o mesmo risco genético.
Antes de começar, quero apenas reconhecer que li os documentos de orientação da FDA (por exemplo, doenças raras: problemas comuns no desenvolvimento de medicamentos ) sobre este tópico e estou bem ciente de que existem muitos tipos de preconceitos que podem se infiltrar na natureza. comparações da história e que, por esse motivo, a FDA raramente aceita esses ensaios como evidência da eficácia de um medicamento, em vez de considerar os ensaios randomizados como evidência muito mais forte. A questão de como determinar se uma coorte de história natural pode ser comparada de maneira justa com uma coorte prospectiva tratada com um medicamento é uma questão importante e complexa. Mas esse não é o tópico da minha pergunta hoje. Em vez disso, estou descobrindo que estou perplexo com uma questão ainda mais simples, a questão de seuma coorte de história natural é considerada comparável e imparcial e assim por diante; então , como , estatisticamente falando, é possível fazer a comparação?
Então, aqui está um cenário.
- Por uma questão de simplicidade, digamos que minha doença tem uma causa genética conhecida e única, e as pessoas com esse genótipo são perfeitamente saudáveis até alguma idade e, de repente, ficam muito doentes. A idade de início da doença é altamente variável e o risco varia em função da idade. Todos em todos os conjuntos de dados descritos abaixo possuem esse genótipo causador de doença.
- No conjunto de dados A, tenho dados de pessoas em um ensaio clínico hipotético. Eles se matricularam em uma idade (
starting_age
), foram tratados com um medicamento e foram seguidos por um período variável de tempo até uma segunda idade (last_age
) na qual adoeceram (event == 1
) ou se retiraram do estudo (event == 0
). - Em um cenário "ideal ideal", talvez a coorte de história natural seja um grande número de pessoas com esse genótipo, seguidas desde o nascimento até a morte desta doença ou de uma causa não relacionada. Esse tipo de conjunto de dados não existe. Em vez disso, considere duas opções possíveis para o que poderia ser a coorte de história natural (B e C) ...
- No conjunto de dados B, tenho dados de pessoas que se inscreveram em um estudo prospectivo em alguma idade aleatória (
starting_age
), não foram tratadas com nenhum medicamento e foram simplesmente seguidas por um período variável de tempo até uma segunda idade (last_age
) na qual elas se tornaram doente (event == 1
) ou retirou-se do estudo (event == 0
). Não se pode presumir que a distribuição das idades iniciais e o número de anos de acompanhamento sigam as mesmas distribuições que no conjunto de dados A. - No conjunto de dados C, tenho dados puramente retrospectivos; aqui não houve acompanhamento prospectivo. Simplesmente observamos cada pessoa uma vez. Observou-se que algumas pessoas adoeciam em uma idade específica (
age
, eevent == 1
), enquanto outras ainda eram saudáveis em alguma idade específica (age
, eevent == 0
).
Se eu entender a terminologia corretamente, os dados em A e B serão considerados truncados à esquerda e censurados à direita; os dados em C seriam considerados apenas censurados à direita. De acordo com os termos usados em Caim 2011 , acredito que o conjunto de dados B é uma "coorte prevalente", enquanto o conjunto de dados C é uma "coorte incidente".
Minhas perguntas são:
- Como (se é que existe) alguém pode construir uma função de sobrevivência (ou uma função de risco, etc.) para o conjunto de dados A ou B, dado que os dados são deixados truncados em diferentes idades para cada indivíduo?
- Que teste estatístico (ou método de bootstrapping) seria usado para testar se as pessoas no conjunto de dados A sobrevivem significativamente mais tempo ou apresentam riscos significativamente menores do que aqueles em B ou C?
- Se tudo o que você tinha era o conjunto de dados B ou C e você queria estimar o poder estatístico de um determinado ensaio clínico com N indivíduos para uma determinada taxa de risco, como você o faria?
- (Pergunta bônus) se as pessoas também tivessem, digamos, diferentes mutações genéticas associadas a diferentes perigos em função da idade, como você incorporaria essa variável nas respostas acima?
Algumas coisas que eu tentei até agora:
- Eu considerei a estatística Z de Flora [ Flora 1978 ], que alguns aplicaram em situações semelhantes, mas estou preocupado que ela não explique a variação da amostra na coorte da história natural sendo usada como referência.
- Pesquisei no Google algumas combinações diferentes de termos, como análise de sobrevivência com diferentes tempos de truncamento à esquerda, e encontrei algumas páginas que discutem problemas semelhantes, como Análise de Sobrevivência: Dados Truncados à Esquerda , Sobrevivendo ao Truncamento Esquerdo usando o PROC PHREG , mas estes não explicaram o subjacente matemática de sua solução.
- Finalmente cheguei a Caim 2011, que discute a questão em detalhes e, útil, tem o código R para lidar com o truncamento esquerdo no suplemento . Eles implementaram a sua própria função para um incorporando-truncamento deixou MLE, mas a alegação é que-truncamento esquerda já pode ser tratado em um modelo de riscos proporcionais de Cox utilizando a funcionalidade embutida no R
survival
biblioteca, por exemplo:coxph(Surv(time=agestart,time2=x,event=cx,type='counting')~bmi)
. Aqui, umSurv
objeto é criado usandotime
a idade inicial etime2
a idade emevent
que ocorreu ou não. Isso parece sensato, embora o arquivo de ajuda paraSurv
não explique o que realmente está fazendo aqui - por exemplo, não explica o que ocounting
modelo implica. Eu virei para osurvival
manuale, como referênciacounting
, fui apontado para Andersen & Gill 1982, que por sua vez estava um pouco acima da minha cabeça e não parece discutir o truncamento esquerdo, ou pelo menos não com esse nome. Uma peculiaridade é que o modelo de "contagem" parece construído para se ajustar a casos em que um indivíduo pode ter vários eventos em sua vida, o que não é o caso no meu exemplo, mas talvez isso não importe. - Com base no exposto, parecia que um modelo de "contagem" de Cox poderia ser o caminho certo para comparar o conjunto de dados A e B, e eu pude fazer essa comparação no R (veja o código abaixo), embora ainda esteja lutando para entender se Estou fazendo a coisa certa aqui e não tenho certeza de como (se é que existe) essa abordagem poderia ser aplicada para comparar o conjunto de dados A a C.
- Por fim, procurei o Cross Validated em busca de truncamento à esquerda e encontrei um grande número de casos em que as pessoas fizeram perguntas semelhantes às minhas ( 1 , 2 , 3 , 4 , 4 , 4 , 5 , 6 , 7 ), mas a maioria não teve resposta; um apontou para a referência de Caim acima e outro apontou para Klein & Moeschberger 2003 o que foi útil (ver p. 123 e p. 312) e parece apoiar a noção de que A e B podem ser comparados usando uma abordagem bastante simples de Cox, embora não atenda à comparabilidade de A a C, nem à questão do cálculo de potência (no entanto, se a pergunta do teste estatístico for respondida, presumivelmente eu poderia chegar ao poder com algumas instruções de inicialização).
Abaixo estão alguns dados hipotéticos em R ilustrando esse cenário. Incluí 20 linhas para cada conjunto de dados, embora, caso isso importe, no cenário da vida real que estou imaginando, os conjuntos de dados A e B talvez estejam na ordem de 50 ou 100 pacientes, e o conjunto de dados C esteja na ordem de 500 ou 1.000 pacientes.
# A) hypothetical data from clinical trial
data_a = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
1|33|42|0
2|45|49|0
3|47|52|1
4|30|34|0
5|37|44|0
6|34|37|0
7|29|34|0
8|58|66|0
9|58|60|0
10|66|75|0
11|37|41|0
12|37|46|0
13|58|62|0
14|44|48|1
15|45|50|0
16|56|65|0
17|54|63|0
18|36|41|0
19|47|55|1
20|45|55|0
"))
# B) hypothetical data from a prospective natural history study
data_b = read.table(sep='|',header=T,textConnection("
indiv_id|starting_age|last_age|event
101|19|28|0
102|39|52|0
103|38|41|1
104|18|27|0
105|20|24|0
106|16|20|0
107|39|41|0
108|48|50|0
109|40|50|0
110|38|41|1
111|40|43|1
112|26|29|0
113|37|39|0
114|21|30|0
115|36|41|1
116|46|48|0
117|27|32|0
118|26|29|0
119|29|38|0
120|47|58|0
"))
# C) hypothetical data from a retrospective natural history study
data_c = read.table(sep='|',header=T,textConnection("
indiv_id|age|event
201|43|1
202|53|1
203|64|1
204|45|1
205|88|1
206|70|1
207|66|1
208|55|1
209|51|1
210|48|1
211|63|1
212|36|0
213|61|0
214|63|1
215|63|1
216|57|1
217|74|0
218|63|1
219|59|1
220|57|1
"))
# one possible approach to compare A and B using Cox counting model
data_a$drug = TRUE
data_b$drug = FALSE
nh_compare = rbind(data_a, data_b)
m = survfit(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
summary(m)
coxph(Surv(time=starting_age,time2=last_age,event=event,type='counting')~drug, data=nh_compare)
Nota final: como é necessária uma reputação de 10 para postar> 2 links no Cross Validated, removi todos os (muitos) hiperlinks que deveriam aparecer acima. Uma versão deste post com links está disponível no meu blog e atualizarei este post para incluir os links se ou quando tiver permissão para fazê-lo. Atualização: obrigado a todos que votaram! Agora tenho reputação> 10 e atualizei este post para incluir links.