<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace;color:rgb(7,55,99)"><font size="4">Cara,</font><br><br><font size="4">Primeiro um comentário a respeito do IC. Li umas paradas aqui que me levou </font>a seguinte<font size="4"> conclusão. O objeto y$std.chaz é identico ao objeto y$std.err. Então o cumhaz no y nada mais é que -log(y$surv). Dessa forma, </font>pra<font size="4"> achar o IC do cumhaz basta fazer o -log(y$lower) e -log(y$upper), independente do método utilizado, sendo que como tem o </font>"-" na<font size="4"> frente, o upper vira lower e vice versa. Está batendo aqui com os meus dados nas primeiras casas decimais. </font><br><font size="1">cumhaz.summ <- function(y, digits = 3){<br>y$cumhaz.upper  <- -log(y$lower)<br>y$cumhaz.lower  <- -log(y$upper)<br>      for(i in seq_along(levels(y$strata))){<br>        cond <- y$strata == levels(y$strata)[i]<br>        output[[i]] <- round(data.frame(Time = y$time[cond],<br>                                        'N risk' = y$n.risk[cond],<br>                                        'N events' = y$n.event[cond],<br>                                        'Cum Hazard' = y$cumhaz[cond],<br>                                        lower = y$cumhaz.lower[cond],<br>                                        upper = y$cumhaz.upper[cond]),digits)<br>      }<br> names(output) <- levels(y$strata)<br> output<br>}<br>cumhaz.summ(y)</font><br><br><font size="4">A segunda parada é que essa função só foi testada para um preditor que estratifica a curva. No</font> <font size="4">exemplo acima o "~ x". Possivelmente daria errado se não houver preditor (e dá errado mesmo no meu teste aqui retorna uma lista vazia pq </font>o y$strata<font size="4"> retorna NULL) ou mais de um preditor. Este deve ser o teu caso já que o erro dá a entender que o comprimento da condição está retornando objetos de tamanhos diferentes. Mas se colocar um exemplo reprodutível, talvez eu consiga te ajudar.  </font><br><br><font size="4">Abraço forte, </font><br><br><font size="4">Pedro Brasil</font><br></div><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><font face="'courier new', monospace" style="background-color:rgb(255,255,255)" color="#000066" size="4">Pedro Brasil</font></div></div></div></div></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Em qua., 15 de dez. de 2021 às 21:52, sznelwar--- por (R-br) <<a href="mailto:r-br@listas.c3sl.ufpr.br" target="_blank">r-br@listas.c3sl.ufpr.br</a>> escreveu:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><span style="color:rgb(0,51,255)">Não consegui rodar esta função:</span><br>
> cumhaz.summ <- function(y, digits = 3){<br>
+   cond <- y$strata == levels(y$strata)[1]<br>
+   y$cumhaz.upper  <- pmax(y$cumhaz + 1.96 * y$std.chaz,0)<br>
+   y$cumhaz.lower  <- pmax(y$cumhaz - 1.96 * y$std.chaz,0)<br>
+   output <- list()<br>
+   for(i in seq_along(levels(y$strata))){<br>
+     cond <- y$strata == levels(y$strata)[i]<br>
+     output[[i]] <- round(data.frame(Time = y$time[cond],<br>
+                                     'N risk' = y$n.risk[cond],<br>
+                                     'N events' = y$n.event[cond],<br>
+                                     'Cum Hazard' = y$cumhaz[cond],<br>
+                                     lower = y$cumhaz.lower[cond],<br>
+                                     upper = y$cumhaz.upper[cond]),digits)<br>
+   }<br>
+   names(output) <- levels(y$strata)<br>
+   output<br>
+ }<br>
> cumhaz.summ(y)<br>
Error in data.frame(Time = y$time[cond], `N risk` = y$n.risk[cond], `N events` = y$n.event[cond],  : <br>
  arguments imply differing number of rows: 3, 10<br>
Além disso: Warning messages:<br>
1: In y$cumhaz + 1.96 * y$std.chaz :<br>
  comprimento do objeto maior não é múltiplo do comprimento do objeto menor<br>
2: In y$cumhaz - 1.96 * y$std.chaz :<br>
  comprimento do objeto maior não é múltiplo do comprimento do objeto menor<br>
> <br>
 </div>

<div dir="ltr">
<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">Na verdade eu estou fuçando ainda como plot.survfit faz pq não esta escrito em qualquer lugar que eu tenha achado como essa função faz e a summary.survfit retorna o erro padrão. Mas como a duvida era como extrair o cumhaz... achei que poderia postar. Se voce souber como a função plot faz posta aí que eu acerto. </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"> </div>

<div>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div dir="ltr"><font color="#000066" face="'courier new', monospace" size="4" style="background-color:rgb(255,255,255)">Pedro Brasil</font></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">Em sex., 10 de dez. de 2021 às 13:32, Cesar Rabak <<a>cesar.rabak@gmail.com</a>> escreveu:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Esse cálculo dos limites superiores e inferiores do risco acumulado me parece estranho..
<div> </div>

<div>A formulação é baseada em alguma referência?</div>

<div> </div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Fri, Dec 10, 2021 at 1:23 PM Pedro Emmanuel Alvarenga Americano do Brasil por (R-br) <<a>r-br@listas.c3sl.ufpr.br</a>> wrote:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div class="gmail_default" style="font-family:monospace,monospace;color:rgb(7,55,99)">> fit <- survfit(Surv(time, status) ~ x, data = aml)<br>
> y <- summary(fit, times = c(14,28,35))<br>
> y<br>
Call: survfit(formula = Surv(time, status) ~ x, data = aml)<br>
<br>
                x=Maintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
   14      8       2    0.818   0.116        0.619        1.000<br>
   28      6       2    0.614   0.153        0.377        0.999<br>
   35      3       2    0.368   0.163        0.155        0.875<br>
<br>
                x=Nonmaintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
   14      7       5    0.583   0.142       0.3616        0.941<br>
   28      4       2    0.389   0.147       0.1854        0.816<br>
   35      2       2    0.194   0.122       0.0569        0.664<br>
<br>
> cumhaz.summ <- function(y, digits = 3){<br>
+   cond <- y$strata == levels(y$strata)[1]<br>
+   y$cumhaz.upper  <- pmax(y$cumhaz + 1.96 * y$std.chaz,0)<br>
+   y$cumhaz.lower  <- pmax(y$cumhaz - 1.96 * y$std.chaz,0)<br>
+   output <- list()<br>
+   for(i in seq_along(levels(y$strata))){<br>
+     cond <- y$strata == levels(y$strata)[i]<br>
+     output[[i]] <- round(data.frame(Time = y$time[cond],<br>
+                                     'N risk' = y$n.risk[cond],<br>
+                                     'N events' = y$n.event[cond],<br>
+                                     'Cum Hazard' = y$cumhaz[cond],<br>
+                                     lower = y$cumhaz.lower[cond],<br>
+                                     upper = y$cumhaz.upper[cond]),digits)<br>
+   }<br>
+   names(output) <- levels(y$strata)<br>
+   output<br>
+ }<br>
> cumhaz.summ(y)<br>
$`x=Maintained`<br>
  Time N.risk N.events Cum.Hazard lower upper<br>
1   14      8        2      0.191 0.000 0.456<br>
2   28      6        2      0.459 0.002 0.915<br>
3   35      3        2      0.909 0.133 1.685<br>
<br>
$`x=Nonmaintained`<br>
  Time N.risk N.events Cum.Hazard lower upper<br>
1   14      7        5      0.492 0.056 0.928<br>
2   28      4        2      0.858 0.187 1.530<br>
3   35      2        2      1.442 0.385 2.499<br>
<br>
> </div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">Em qui., 9 de dez. de 2021 às 10:43, Cid Póvoas por (R-br) <<a>r-br@listas.c3sl.ufpr.br</a>> escreveu:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">library(survival)<br>
library(broom)<br>
library(tidyverse)<br>
<br>
fit <- survfit(Surv(time, status) ~ x, data = aml)<br>
df<-tidy(fit)<br>
df$cumhaz <- fit$cumhaz<br>
df %>% filter(time%in%c(9,8,28,33,48))<br>
<br>
fit1 <- summary(fit, times = c(14,28,35))<br>
fit1<br>
<br>
tab <- data.frame(time = fit1$time,<br>
                  n.risk = fit1$n.risk,<br>
                  n.event = fit1$n.event,<br>
                  survival = fit1$surv,<br>
                  std.err = fit1$std.err,<br>
                  `lower 95% CI` = fit1$lower,<br>
                  `upper 95% CI` = fit1$upper,<br>
                  cumhaz = fit1$cumhaz,<br>
                  strata = fit1$strata)<br>
<br>
tab
<div>
<div dir="ltr">
<div dir="ltr">
<div style="text-align:left"> </div>

<div style="text-align:center">
<div style="text-align:left"><font color="#073763"><b><i>Cid Edson Mendonça Póvoas</i></b></font></div>

<div style="text-align:left"> </div>

<div style="text-align:left"><b style="font-size:12.8px;color:rgb(7,55,99)"><i><a>AnovAgro</a></i></b></div>

<div style="text-align:left"><b><i><font color="#073763">Engenheiro Agrônomo - </font></i></b><i style="color:rgb(7,55,99)"><b>Data Scientist</b></i><b><i><font color="#073763"> </font></i></b></div>

<div>
<div style="text-align:left"><i style="color:rgb(7,55,99)"><b>CREA :</b> 051984991-4</i></div>

<div style="text-align:left"><b><font color="#073763"><i>Técnico em Segurança do Trabalho </i></font></b></div>

<div style="text-align:left"><i style="color:rgb(7,55,99)"><b>Nº: </b></i><span style="text-align:center"><font color="#073763"><i>0012669/BA</i></font></span></div>

<div style="text-align:left"><i style="color:rgb(7,55,99)"><b>Tel: </b>+55 73 99151-9565</i></div>

<div style="text-align:left"><font color="#073763"><span style="font-size:12.8px"><b>Lattes : </b></span><span style="font-size:12.8px"><a>http://lattes.cnpq.br/2303498368142537</a></span></font></div>
</div>

<div>
<div>
<div style="text-align:left"><span style="font-size:12.8px"><font color="#073763"><b>LinkedIn :</b> <a>http://br.linkedin.com/in/cidedson/</a></font></span></div>

<div style="text-align:left"><font color="#073763"><b>Whatsapp :</b> <a>https://wa.me/5573991519565</a></font></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">Em qui., 9 de dez. de 2021 às 09:26, Pedro Emmanuel Alvarenga Americano do Brasil por (R-br) <<a>r-br@listas.c3sl.ufpr.br</a>> escreveu:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="auto">Ei Cesar,
<div dir="auto"> </div>

<div dir="auto">Ei sei que o cumhaz esta la. Eu so queria uma saida parecida com a do survival. Parece que vou ter que montar uma um esquema aqui pegar esses valores e montar uma tabela de saida. </div>

<div dir="auto"> </div>

<div dir="auto">Valeu. <br>
 
<div dir="auto">Pedro Emmanuel Brasil<br>
(:)=</div>
</div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">Em qua, 8 de dez de 2021 20:42, Cesar Rabak <<a>cesar.rabak@gmail.com</a>> escreveu:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div><font face="arial, sans-serif">Isto não é suficiente?</font></div>

<div> </div>
<font face="monospace">> fit$cumhaz<br>
 [1] 0.09090909 0.19090909 0.31590909 0.45876623 0.45876623 0.65876623<br>
 [7] 0.90876623 0.90876623 1.40876623 1.40876623 0.16666667 0.36666667<br>
[13] 0.49166667 0.49166667 0.65833333 0.85833333 1.10833333 1.44166667<br>
[19] 1.94166667 2.94166667<br>
></font>

<div><font face="arial, sans-serif">HTH</font></div>

<div><font face="arial, sans-serif">--</font></div>

<div><font face="arial, sans-serif">Cesar Rabak</font></div>
</div>
 

<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Wed, Dec 8, 2021 at 5:12 PM Pedro Emmanuel Alvarenga Americano do Brasil por (R-br) <<a rel="noreferrer">r-br@listas.c3sl.ufpr.br</a>> wrote:</div>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">Saudações amigos do R, </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"> </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">Estou as voltas de estimar taxas de eventos e estou batendo cabeça. Antes de escrever uma função eu mesmo para fazer uma tabela com alguns valores gostaria de uma luz dos amigos de R.</div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"> </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">O banco aml está no pacote survival então bastaria carregar o pacote pra reproduzir o exemplo. Eu gostaria de ver em formato de tabela alguns momentos específicos da tabela de sobrevivência. Só que o summary.survfit só retorna a sobrevivência e não a taxa cumulativa. </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"> </div>
<span class="gmail_default" style="color:rgb(7,55,99)"><font face="monospace" size="1">library("survival")</font></span>

<div> <font face="monospace" size="1">fit <- survfit(Surv(time, status) ~ x, data = aml)<br>
> fit<br>
Call: survfit(formula = Surv(time, status) ~ x, data = aml)<br>
<br>
                 n events median 0.95LCL 0.95UCL<br>
x=Maintained    11      7     31      18      NA<br>
x=Nonmaintained 12     11     23       8      NA<br>
<span class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"># Summary com todos os momentos de eventos</span></font></div>

<div><font face="monospace" size="1">> summary(fit)<br>
Call: survfit(formula = Surv(time, status) ~ x, data = aml)<br>
<br>
                x=Maintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
    9     11       1    0.909  0.0867       0.7541        1.000<br>
   13     10       1    0.818  0.1163       0.6192        1.000<br>
   18      8       1    0.716  0.1397       0.4884        1.000<br>
   23      7       1    0.614  0.1526       0.3769        0.999<br>
   31      5       1    0.491  0.1642       0.2549        0.946<br>
   34      4       1    0.368  0.1627       0.1549        0.875<br>
   48      2       1    0.184  0.1535       0.0359        0.944<br>
<br>
                x=Nonmaintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
    5     12       2   0.8333  0.1076       0.6470        1.000<br>
    8     10       2   0.6667  0.1361       0.4468        0.995<br>
   12      8       1   0.5833  0.1423       0.3616        0.941<br>
   23      6       1   0.4861  0.1481       0.2675        0.883<br>
   27      5       1   0.3889  0.1470       0.1854        0.816<br>
   30      4       1   0.2917  0.1387       0.1148        0.741<br>
   33      3       1   0.1944  0.1219       0.0569        0.664<br>
   43      2       1   0.0972  0.0919       0.0153        0.620<br>
   45      1       1   0.0000     NaN           NA           NA<br>
<br>
<span class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"># Summary com os momentos desejados</span><br>
> summary(fit, times = c(14,28,35))<br>
Call: survfit(formula = Surv(time, status) ~ x, data = aml)<br>
<br>
                x=Maintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
   14      8       2    0.818   0.116        0.619        1.000<br>
   28      6       2    0.614   0.153        0.377        0.999<br>
   35      3       2    0.368   0.163        0.155        0.875<br>
<br>
                x=Nonmaintained<br>
 time n.risk n.event survival std.err lower 95% CI upper 95% CI<br>
   14      7       5    0.583   0.142       0.3616        0.941<br>
   28      4       2    0.389   0.147       0.1854        0.816<br>
   35      2       2    0.194   0.122       0.0569        0.664</font><br>
<br>
<span style="font-family:monospace;font-size:x-small">> plot(fit)</span></div>

<div><font face="monospace" size="1">> plot(fit, cumhaz = T) </font>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"><span style="font-family:Arial,Helvetica,sans-serif;font-size:small;color:rgb(34,34,34)">></span> </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">Reparem que há uma opção para o gráfico cumhaz = T, o que significa que o cumhaz está depositado no objeto, inclusive dentro do summary também. Tipo summary(fit)$cumhaz. Só que não há uma opção summary(fit, cumhaz = T) que retorne o cumhaz ao invés da sobrevivência. Alguém tem algum bizu pra fazer  isso organizado, extrair a mesma tabela só que com o cumhaz, como <span style="color:rgb(34,34,34);font-family:monospace;font-size:x-small">summary(fit, times = c(14,28,35)) </span>sem muito trabalho?  </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)"> </div>

<div class="gmail_default" style="font-family:monospace,monospace;font-size:large;color:rgb(7,55,99)">Abraço forte,</div>

<div>
<div dir="ltr">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div dir="ltr"><font color="#000066" face="'courier new', monospace" size="4" style="background-color:rgb(255,255,255)">Pedro Brasil</font></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
_______________________________________________<br>
R-br mailing list<br>
<a rel="noreferrer">R-br@listas.c3sl.ufpr.br</a><br>
<a rel="noreferrer noreferrer">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a rel="noreferrer noreferrer">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</blockquote>
</div>
</blockquote>
</div>
_______________________________________________<br>
R-br mailing list<br>
<a>R-br@listas.c3sl.ufpr.br</a><br>
<a rel="noreferrer">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a rel="noreferrer">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</blockquote>
</div>
_______________________________________________<br>
R-br mailing list<br>
<a>R-br@listas.c3sl.ufpr.br</a><br>
<a rel="noreferrer">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a rel="noreferrer">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</blockquote>
</div>
_______________________________________________<br>
R-br mailing list<br>
<a>R-br@listas.c3sl.ufpr.br</a><br>
<a rel="noreferrer">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a rel="noreferrer">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</blockquote>
</div>
</blockquote>
</div>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a>https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a>http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível._______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" rel="noreferrer" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" rel="noreferrer" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br>
</blockquote></div>