Como simular dados censurados

11

Gostaria de saber como posso simular uma amostra de n vidas úteis de distribuição Weibull que incluem observações tipo I censuradas à direita. Por exemplo, vamos ter n = 3, forma = 3, escala = 1 e a taxa de censura = 0,15, e o tempo de censura = 0,88. Sei como gerar uma amostra Weibull, mas não sei como gerar dados censurados com o tipo I censurado à direita em R.

T = rweibull(3, shape=.5, scale=1)
Emeli
fonte

Respostas:

11

(Por uma questão de R estilo de codificação, é melhor não usar T como nome de variável, porque é um apelido para TRUE, e essa prática inevitavelmente levará a problemas.)


Sua pergunta é um tanto ambígua; existem várias maneiras de interpretá-lo. Vamos percorrê-los:

  1. Você estipula que deseja simular a censura do tipo 1 . Normalmente, isso significa que o experimento é realizado por um período de tempo e que as unidades de estudo que ainda não tiveram o evento são censuradas. Se foi isso que você quis dizer, não é (necessariamente) possível estipular os parâmetros de forma e escala, e o tempo e a taxa de censura simultaneamente. Depois de estipular três, o último é necessariamente fixo.

    (Tentando) resolver o parâmetro shape:
    Isso falha; parece que é impossível ter uma taxa de censura de 15% em um tempo de censura de 0,88 com uma distribuição Weibull em que o parâmetro de escala é mantido em 1, independentemente do parâmetro de forma.

    optim(.5, fn=function(shp){(pweibull(.88, shape=shp, scale=1, lower.tail=F)-.15)^2})
    # $par
    # [1] 4.768372e-08
    # ...
    # There were 46 warnings (use warnings() to see them)
    pweibull(.88, shape=4.768372e-08, scale=1, lower.tail=F)
    # [1] 0.3678794
    
    optim(.5, fn=function(shp){(pweibull(.88, shape=shp, scale=1, lower.tail=F)-.15)^2},
          control=list(reltol=1e-16))
    # $par
    # [1] 9.769963e-16
    # ...
    # There were 50 or more warnings (use warnings() to see the first 50)
    pweibull(.88, shape=9.769963e-16, scale=1, lower.tail=F)
    # [1] 0.3678794
    

    Resolução para o parâmetro de escala:

    optim(1, fn=function(scl){(pweibull(.88, shape=.5, scale=scl, lower.tail=F)-.15)^2})
    # $par
    # [1] 0.2445312
    # ...
    pweibull(.88, shape=.5, scale=0.2445312, lower.tail=F)
    # [1] 0.1500135
    

    Resolução para o tempo de censura:

    qweibull(.15, shape=.5, scale=1, lower.tail=F)
    # [1] 3.599064
    

    Resolução para a taxa de censura:

    pweibull(.88, shape=.5, scale=1, lower.tail=F)
    # [1] 0.3913773
  2. Por outro lado, podemos pensar na censura como aleatória (e tipicamente independente) ocorrendo ao longo do estudo devido a, por exemplo, abandono. Nesse caso, o procedimento é simular dois conjuntos de variáveis ​​Weibull. Depois, basta observar o que veio primeiro: você usa o menor valor como ponto final e chama a unidade censurada se o menor valor foi o tempo de censura. Por exemplo:

    set.seed(0775)  
    t    = rweibull(3, shape=.5, scale=1)
    t      # [1] 0.7433678 1.1325749 0.2784812
    c    = rweibull(3, shape=.5, scale=1.5)
    c      # [1] 3.3242417 2.8866217 0.9779436
    time = pmin(t, c)
    time   # [1] 0.7433678 1.1325749 0.2784812
    cens = ifelse(c<t, 1, 0)
    cens   # [1] 0 0 0
- Reinstate Monica
fonte
resposta muito interessante (a optimfunção é incrível), mas como você calibraria sua segunda resposta para atingir uma certa porcentagem de censura?
Dan Chaltiel 28/02
@ DanChaltiel, o segundo não é realmente calibrado - é apenas aleatório. Também pode não ser possível atingir a proporção desejada, considerando outros aspectos que você deseja (análogo ao nº 1). Dito isto, pode ser possível identificar uma proporção da população (a proporção observada saltará de iteração para iteração) otimizando a distribuição censurada em relação à distribuição de eventos.
gung - Restabelecer Monica
2

Só para ter certeza de que estamos falando da mesma coisa, a censura tipo I é quando

... um experimento tem um número definido de assuntos ou itens e interrompe o experimento em um tempo predeterminado, quando os assuntos restantes são censurados à direita.

Para gerar dados censurados à direita usando o tempo de censura = 0,88 , basta usar a minfunção:

T <- rweibull(3, shape=.5, scale=1)
censoring_time <- 0.88
T_censored <- min(censoring_time, T)

No entanto, não tenho muita certeza do que você quer dizer quando diz " taxa de censura = 0,15 " ... Você quer dizer que 15% de seus assuntos estão censurados corretamente? Essas notas sobre censura parecem indicar que o único parâmetro necessário para a censura tipo I é o tempo de censura , portanto, não tenho certeza de como essa taxa é influenciada.

StevieP
fonte
11
Observe que sua cotação não é uma definição de censura: é apenas um exemplo. A censura correta ocorre quando cada valor é comparado a um limite predeterminado e substituído por um indicador de censura não numérico quando o valor excede esse limite. Independentemente disso, aplicar min(ou, de maneira mais geral pmin) é a maneira de simular isso R. (Um exemplo de censura correta em um estudo de não sobrevivência é a análise de colônias bacterianas em águas residuais. Isso é feito contando manualmente os visíveis em uma lâmina de microscópio. Com forte contaminação, o resultado é apresentado como "muito numeroso para contar". )
whuber