Teste Pag html

Análise estatística descritiva dos casos suspeitos e confirmados de COVID-19 no Município do Rio de Janeiro
## Pacotes
if(!require(magrittr)){
  install.packages("magrittr", dep = T)
  library("magrittr")
}

if(!require(tidyverse)){
  install.packages("tidyverse", dep = T)
  library("tidyverse")
}

if(!require(ggplot2)){
  install.packages("ggplot2", dep = T)
  library("ggplot2")
}

if(!require(plotly)){
  install.packages("plotly", dep = T)
  library("plotly")
}

if(!require(shiny)){
  install.packages("shiny", dep = T)
  library("shiny")
}
## Carregando as bases de dados
dados <- read.csv2("covid - 2020032517 - anonimizada.csv", na.strings = c("")) # Base com deslocamentos
dados2 <- read.csv2("covid - 2020040612 - anonimizada.csv", na.strings = c(""))
## Tratamento dos dados

### Transformando colunas de datas com objeto de classe Date
dados$ULT_DIA_NO_LOCAL <- as.Date(dados$ULT_DIA_NO_LOCAL, format("%d/%m/%Y"))
dados$DT.IS <- as.Date(dados$DT.IS, format("%d/%m/%Y"))
dados$DT_NOTIFIC <- as.Date(dados$DT_NOTIFIC, format("%d/%m/%Y"))
dados2$DT.IS <- as.Date(dados2$DT.IS, format("%d/%m/%Y"))
dados2$DT_NOTIFIC <- as.Date(dados2$DT_NOTIFIC, format("%d/%m/%Y"))

### Transformando idades expressas em meses em frações de anos
for(i in 1:length(dados$TP_IDADE)){
  if(is.na(dados$TP_IDADE[i])){
    next()
  }
  if(dados$TP_IDADE[i] == "M"){
    dados$IDADE[i] <- dados$IDADE[i]/12 
    dados$TP_IDADE[i] <- "A"
  }
}

for(i in 1:length(dados2$TP_IDADE)){
  if(is.na(dados2$TP_IDADE[i])){
    next()
  }
  if(dados2$TP_IDADE[i] == "M"){
    dados2$IDADE[i] <- dados2$IDADE[i]/12 
    dados2$TP_IDADE[i] <- "A"
  }
}

### Ajustanto as inconformidades em "DESLOCAMENTO"
dados$DESLOCAMENTO<-recode(dados$DESLOCAMENTO,n="N",s="S")
dados$DESLOCAMENTO<-recode(dados$DESLOCAMENTO,"1"="S","2"="N")

### Transformando os sintomas em valores lógicos T or F

#sintomas <- lapply(dados2[,16:29],as.logical)
k <- (which(names(dados2)=="VÔMITO")-which(names(dados2)=="FEBRE"))+1
j <- which(names(dados2)=="FEBRE")-1
for(i in 1:k){
  j <- j+1
  dados2[,j] <- recode(dados2[,j], "1" = T, "2" = F)
}


### Juntanto os Laboratórios Richet
for(i in 1:length(dados2$UNIDADE_NOTIFICADORA)){
  if(is.na(dados2$UNIDADE_NOTIFICADORA[i])){
    next()
  }
  if(dados2$UNIDADE_NOTIFICADORA[i] == "LABORATORIO RICHET BARRA"){
    dados2$UNIDADE_NOTIFICADORA[i] <- "LABORATORIO RICHET"
  }
}

for(i in 1:length(dados2$UNIDADE_NOTIFICADORA)){
  if(is.na(dados2$UNIDADE_NOTIFICADORA[i])){
    next()
  }
  if(dados2$UNIDADE_NOTIFICADORA[i] == "LABORATORIO RICHET BARRA"){
    dados2$UNIDADE_NOTIFICADORA[i] <- "LABORATORIO RICHET"
  }
}


### Retirando datas de notificação que não fazem sentido (ainda nem chegaram ou de anos atrás)
dados2 <- dados2 %>%
  filter(DT_NOTIFIC <= Sys.Date() & DT_NOTIFIC >= as.Date("01/01/2020", format = format("%d/%m/%Y")))


### Pegando o dia da última notificação
ultima_notific<-ultima_notific <- dados2$DT_NOTIFIC[order(dados2$DT_NOTIFIC, na.last = F)][length(dados2$DT_NOTIFIC)]

ultima_notific <- format(ultima_notific, format = "%d/%m/%Y")

Introdução

Devido ao contexto atual da pandemia do coronavírus (COVID-19), o seguinte texto tem como objetivo apresentar uma análise estatística descritiva dos dados relativos aos casos confirmados e suspeitos no Município do Rio de Janeiro (fonte: Secretaria Municipal de Saúde - RJ1).

Análises

As análises foram realizadas a partir dos relatórios internos que alimentam o Painel Rio COVID-19 (Fonte: Secretaria Municipal de Saúde - RJ). Nesse contexto, faz-se necessário apresentar as informações disponíveis e as limitações dos dados utilizados.

Informações e limitações

Os dados utilizados contêm informações sobre os casos confirmados de COVID-19 notificados entre 27/02/2020 e 07/04/2020. Essas informações incluem: unidade de saúde notificadora e data de notificação do caso, sintomas e data do início dos sintomas, município e bairro de residência ou estadia, área de planejamento (AP) de residência e de onde foi notificado o caso, idade, sexo, hospitalização, internação em unidade de tratamento intensivo (UTI) e necessidade de suporte ventilatório.

Além disso, há informações adicionais quanto a realização de viagens recentes e data de retorno para os casos confirmados e suspeitos notificados até o dia 24/03/2020. Essas informações deixaram de ser relatadas quando as infecções passaram a ser comunitárias.

Em relação às limitações da análise, os seguintes pontos devem ser destacados:

  • A base de dados não está completamente preenchida, havendo informações omitidas em diversos casos suspeitos ou confirmados. Por esse motivo, nem todas as análises apresentam o número total de casos, mas sim o número de casos cujas informações em análise foram preenchidas.
  • Existem informações incoerentes devido ao preenchimento manual (por exemplo, data de início dos sintomas 28 dias após a notificação de suspeita pela unidade de saúde). Essas informações são expurgadas das respectivas análises.
  • As análises quanto à evolução do número de casos ao longo do tempo para os diferentes bairros não condizEM com as evoluções apresentadas no Painel Rio COVID-19. A forma de contabilização utilizada no painel leva em consideração outras fontes de dados, e não aqueles disponibilizados e utilizados nessa análise.

Resultados

Evolução de casos por bairro

Ao todo, 1109 casos foram confirmados, sendo 980 no Município do Rio de Janeiro. Os demais são casos confirmados em outros municípios ou sem informação de localidade. O Gráfico 1 abaixo apresenta a evolução de novos casos por bairro do município (é possível selecionar na legenda apenas os bairros que se deseja analisar). A partir dele é possível visualizar o surgimento de novos casos em diferentes bairros ao longo do tempo, além de destacar a evolução nos bairros da Barra da Tijuca, Botafogo e Leblon, os quais chegaram a apresentar de 7 a 8 casos novos em determinados dias.

## Tratando só dos casos no município
dados2 <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & MUNICIPIO_RESID_ESTADIA == "RIO DE JANEIRO")
p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & BAIRRO_RESID_ESTADIA != "OUTRO PAIS" & BAIRRO_RESID_ESTADIA != "OUTRA CIDADE") %>%
  group_by(DT_NOTIFIC, BAIRRO_RESID_ESTADIA) %>%
  summarize(Qtd = n()) %>%
  arrange(-desc(DT_NOTIFIC)) %>%
  drop_na() %>%
  rename("Bairros" = BAIRRO_RESID_ESTADIA) %>%
  ggplot(aes(x = DT_NOTIFIC, y = Qtd, colour = Bairros)) +
  geom_line(aes(y = Qtd, group = Bairros), colour = "lightgray", size = 0.8) +
  geom_line(size = 1) +
  geom_point() +
  theme_bw() +
  labs(title = "Gráfico 1: Evolução de casos novos por bairro", 
       x = "Dia", y = "Quantidade") +
  ylim(c(0,8))
  
div(ggplotly(p), align = "center")

O Gráfico 2, por sua vez, apresenta a evolução do número total de casos por bairro. Assim como no Gráfico 1, percebe-se a difusão do vírus pelos bairros ao longo do tempo, destacando-se um crescimento aparentemente exponencial e com maior impacto na Barra da Tijuca e em bairros da Zona Sul. Esse resultado também é reportado no Gráfico 3, o qual apresenta a os bairros com 5 ou mais infectados.

p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & BAIRRO_RESID_ESTADIA != "OUTRO PAIS" & BAIRRO_RESID_ESTADIA != "OUTRA CIDADE") %>%
  drop_na(BAIRRO_RESID_ESTADIA, DT_NOTIFIC) %>%
  rename("Bairros" = BAIRRO_RESID_ESTADIA) %>%
  group_by(DT_NOTIFIC, Bairros) %>%
  summarize(Qtd = n()) %>%
  group_by(Bairros) %>%
  mutate(Acumulado = cumsum(Qtd)) %>%
  ungroup(Bairros) %>%
  ggplot(aes(x=DT_NOTIFIC, y=Acumulado, colour = Bairros)) +
  geom_line(aes(group = Bairros), colour = "lightgray", size = 0.6) +
  geom_line(size = 0.8) +
  geom_point() +
  theme_bw() +
  labs(title = "Gráfico 2: Evolução de casos por bairro", 
       x = "Dia", y = "Quantidade")

div(ggplotly(p), align = "center")
dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & BAIRRO_RESID_ESTADIA != "OUTRO PAIS" & BAIRRO_RESID_ESTADIA != "OUTRA CIDADE") %>%
  drop_na(BAIRRO_RESID_ESTADIA) %>%
  group_by(BAIRRO_RESID_ESTADIA) %>%
  summarise(TOTAL=n()) %>%
  arrange(desc(TOTAL)) %>%
  filter(TOTAL>=5) %>%
  ggplot(aes(x=reorder(BAIRRO_RESID_ESTADIA,TOTAL),y=TOTAL))+
  geom_bar(stat="identity", fill = "lightblue")+
  labs(title = "Gráfico 3: Contaminados por bairro.",
       subtitle = "Município do Rio de Janeiro.",
       x = "Bairro", y = "Quantidade") +
  #scale_x_discrete(labels=levels(as.factor(seq(1,83))))
  geom_text(aes(label=TOTAL),hjust=-0.5,color="Black")+
  theme_minimal()+
  theme(plot.title = element_text(hjust=0.5),
        plot.subtitle = element_text(hjust=0.5)) +
  ylim(c(0,120)) +
  coord_flip()

Idade, gênero e internação

Além de análises de evolução ao longo do tempo e por bairro, também é possível obter dados quanto à maior ou menor incidência e gravidade da doença em relação ao gênero e idade dos infectados. Ao todo, 452 dos confirmados com a doença são mulheres, 442 são homens e 85 não foram informados. Além disso, a idade média dos portadores do vírus é de 49.15 anos.

O Gráfico 4 abaixo relaciona as variáveis gênero e idade e demonstra que todas as faixas de idade estão suscetíveis à doença, desde bebês com meses de idade até pessoas com mais de 90 anos. Entretanto, a maior parte das pessoas infectadas encontram-se na faixa de 30 a 60 anos.

### Teste t para as médias de idade de homems e mulheres contaminados.

Mulher <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & SEXO == "F") %>% 
  drop_na(SEXO, IDADE) %>%
  select(IDADE)

Homem <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & SEXO == "M") %>% 
  drop_na(SEXO, IDADE) %>%
  select(IDADE)

teste <- t.test(x = Homem, y = Mulher, alternative = c("two.sided"), conf.level = 0.95)
teste$p.value

Adicionalmente, há indícios significativos de que a média de idade dos homens contaminados seja superior à das mulheres (o valor p para um teste t da média dos dois grupos é de 7.122913710^{-4}, rejeitando-se a hipótese nula de diferença zero entre as médias sob um intervalo de confiança de 95%).

p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO") %>% 
  drop_na(SEXO, IDADE) %>%
  ggplot(aes(x=SEXO,y=IDADE, colour = SEXO))+
  geom_boxplot(aes(fill = SEXO), alpha = 0.1)+
  geom_jitter(width = 0.03, alpha = 0.5)+
  labs(title = "Gráfico 4: Idade das pessoas contaminadas por gênero.",
       subtitle = "Município do Rio de Janeiro.", 
       x = "Gênero", y = "Idade") +
  theme_bw() +
  theme(legend.position="none") +
  scale_x_discrete(name = "Gênero", breaks = c("F", "M"), labels = c("Feminino", "Masculino"))

div(ggplotly(p), align = "center")
### Teste t para as médias de idade dos internados e não internados na UTI.

Internados <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & UTI == "S") %>% 
  drop_na(UTI, IDADE) %>%
  select(IDADE)

N_internados <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & UTI == "N") %>% 
  drop_na(UTI, IDADE) %>%
  select(IDADE)

teste <- t.test(x = Internados, y = N_internados, alternative = c("two.sided"), conf.level = 0.95)
teste$p.value

O Gráfico 5, por sua vez, relaciona a idade dos pacientes à condição de internação na UTI. Nesse caso, percebe-se que a maior parte das pessoas internadas possuem idade mais avançada, apesar de existirem pessoas contaminadas acima dos 60 anos que não tiveram necessidade de internação na UTI. Nesse caso, o valor p do teste t para a comparação de médias é de 6.980624810^{-10}, rejeitando-se a hipótese nula de diferença zero entre as médias sob um intervalo de confiança de 95%.

p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & UTI != "I") %>% 
  drop_na(UTI, IDADE) %>%
  ggplot(aes(x=UTI,y=IDADE, colour = UTI))+
  geom_boxplot(aes(fill = UTI), alpha = 0.1)+
  geom_jitter(width = 0.03, alpha = 0.5)+
  labs(title = "Gráfico 5: Idade das pessoas contaminadas e internação na UTI.",
       subtitle = "Município do Rio de Janeiro.", 
       x = "Internação na UTI", y = "Idade") +
  theme_bw() +
  theme(legend.position="none") +
  scale_x_discrete(name = "Internação na UTI", 
                   breaks = c("N", "S"), 
                   labels = c("Não internados", "Internados"))

div(ggplotly(p), align = "center")

Avançando nessa discussão, os Gráficos 6 e 7 apresentam as relações entre gênero, idade e internação na UTI ou hospitalização, respectivamente. Em ambos os casos, percebe-se que as pessoas contaminadas supostamente mais graves (internados ou hospitalizados) concentram-se em faixas etárias mais avançadas. Além disso, em ambos os casos, o grupo masculino apresenta uma menor variação de idade entre os internados ou hospitalizados do que o grupo feminino.

sexo <- c("F" = "Feminino", "M" = "Masculino")
p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO" & UTI != "I") %>% 
  drop_na(UTI, SEXO, IDADE) %>%
  ggplot(aes(x=UTI,y=IDADE, colour = UTI))+
  geom_boxplot(aes(fill = UTI), alpha = 0.1)+
  geom_jitter(width = 0.03, alpha = 0.5)+
  facet_wrap(~SEXO,dir = "v", labeller = labeller(SEXO = sexo))+
  labs(title = "Grafico 6: Idade e internação na UTI por gênero.",
       subtitle = "Município do Rio de Janeiro.", 
       x = "UTI", y = "Idade") +
  theme_bw() +
  theme(legend.position="none") +
  scale_x_discrete(name = "Internação na UTI", 
                   breaks = c("N", "S"), 
                   labels = c("Não internados", "Internados")) +
  theme(strip.background = element_rect(color="black", 
                                        fill="lightgray", size=0.5, linetype="solid"))

div(ggplotly(p), align = "center")
sexo <- c("F" = "Feminino", "M" = "Masculino")
p <- dados2 %>%
  filter(SITUACAO == "CONFIRMADO") %>% 
  drop_na(HOSPITALIZADO, IDADE, SEXO) %>%
  ggplot(aes(x=HOSPITALIZADO,y=IDADE, colour = HOSPITALIZADO))+
  geom_boxplot(aes(fill = HOSPITALIZADO), alpha = 0.1)+
  geom_jitter(width = 0.03, alpha = 0.5)+
  facet_wrap(~SEXO,dir = "v", labeller = labeller(SEXO = sexo))+
  labs(title = "Grafico 7: Idade e hospitalização por gênero.",
       subtitle = "Município do Rio de Janeiro.", 
       x = "Hospitalização", y = "Idade") +
  theme_bw() +
  theme(legend.position="none") +
  scale_x_discrete(name = "Hospitalização", 
                   breaks = c("N", "S"), 
                   labels = c("Não hospitalizados", "Hospitalizados")) +
  theme(strip.background = element_rect(color="black", 
                                        fill="lightgray", size=0.5, linetype="solid"))

div(ggplotly(p), align = "center")

Notificações dos casos

Outro fator importante a se analisar é o número de notificações de casos confirmados por unidades de saúde e o tempo decorrido entre o início dos sintomas e a notificação, apresentados nos Gráficos 8 e 9, respectivamente. Neles, é possível observar a predominância de casos confirmados notificados pelo Hospital Samaritano e pelo Laboratório Richet, além de que as notificações costumam ocorrer em até 5 dias contados a partir da data de início dos sintomas. Entretanto, alguns casos levaram mais de 10 dias para serem notificados.

dados2 %>%
  drop_na(UNIDADE_NOTIFICADORA) %>%
  group_by(UNIDADE_NOTIFICADORA) %>%
  summarise(TOTAL=n()) %>%
  filter(TOTAL>=5) %>% 
  ggplot(aes(x=reorder(UNIDADE_NOTIFICADORA,TOTAL),y=TOTAL))+
  geom_bar(stat="identity", fill = "lightblue")+
  ggtitle("Gráfico 8: Infectados notificados
                por unidade.")+
  xlab("Unidade")+
  ylab("Quantidade")+
  ylim(c(0, 140)) +
  geom_text(aes(label=TOTAL),hjust=-0.5,color="Black", size = 4)+
  theme(plot.title = element_text(hjust=0.5)) +
  theme_minimal() +
  coord_flip()

p <- dados2 %>%
  mutate(Tempo_notific = DT_NOTIFIC - DT.IS) %>%
  filter(Tempo_notific >= 0) %>%
  group_by(Tempo_notific) %>%
  summarise(Qtd = n()) %>%
  ggplot(aes(x = Tempo_notific, y=Qtd)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  theme_bw() +
  labs(title = "Gráfico 9: Tempo entre início dos sintomas e notificação pela unidade",
       y = "Quantidade de pessoas com sintomas",
       x = "Dias") +
  xlim(c(0,20))

div(ggplotly(p), align = "center")

Disseminação local e importada

Uma análise adicional da evolução dos casos consiste na identificação de transmissão local e de casos importados, ou seja, a separação entre os infectados que viajaram dos que permaneceram no país. Essa análise pode ser feita através dos Gráficos 10 e 11, os quais apresentam os casos novos e o total de casos por dia, respectivamente.

A partir do Gráfico 10, observa-se o início da contaminação a partir de pessoas que retornaram do exterior recentemente e, poucos dias depois, a notificação de casos de pessoas que não realizaram viagens. Esse tempo entre as “ondas” de contaminação é melhor observado no Gráfico 11, sendo 4 dias o tempo entre o registro do primeiro caso importado e o primeiro caso local de contaminação.

Ressalta-se que, a partir do momento em que a contaminação se tornou comunitária, os dados referentes às viagens deixaram de ser notificados. O último dia com informação referente à deslocamento foi 24/03/2020.

p <- dados %>%
  filter(SITUACAO == "CONFIRMADO") %>%
  group_by(DESLOCAMENTO,DT_NOTIFIC) %>%
  summarise(Qtd=n()) %>%
  drop_na() %>%
  rename("Viagem" = DESLOCAMENTO) %>%
  ggplot(aes(x=DT_NOTIFIC, y=Qtd, colour = Viagem)) +
  geom_line(size = 1.5) +
  geom_point(size = 2.5) +
  labs(title = "Gráfico 10: Novos casos locais e importados.",
       subtitle = "Município do Rio de Janeiro.",
       x = "Data de notificação", 
       y = "Quantidade de confirmados no dia") +
  theme_bw() +
  scale_x_date(breaks=function(x)seq.Date(from=min(x),to=max(x),by="2 days"))+
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_colour_discrete(name="Viagem",
                    breaks=c("S", "N"),
                    labels=c("SIM", "NÃO"))
div(ggplotly(p), align = "center")
p <- dados %>%
  filter(SITUACAO == "CONFIRMADO") %>%
  group_by(DESLOCAMENTO,DT_NOTIFIC) %>%
  summarise(Qtd=n()) %>%
  drop_na() %>%
  mutate(Acumulado = cumsum(Qtd)) %>%
  rename("Viagem" = DESLOCAMENTO) %>%
  ggplot(aes(x=DT_NOTIFIC, y=Acumulado, colour = Viagem)) +
  geom_line(size = 1.5) +
  geom_point(size = 2.5) +
  labs(title = "Gráfico 11: Total de casos locais e importados.",
       subtitle = "Município do Rio de Janeiro.",
       x = "Data de notificação", 
       y = "Total de confirmados") +
  theme_bw() +
  scale_x_date(breaks=function(x)seq.Date(from=min(x),to=max(x),by="2 days"))+
  #scale_y_continuous(limits=c(0,80),breaks=seq(0,100,5))+
  #geom_text(aes(label=Acumulado),vjust=0,color="Black") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_colour_discrete(name="Viagem",
                        breaks=c("S", "N"),
                        labels=c("SIM", "NÃO"))

div(ggplotly(p), align = "center")

Sintomas predominantes

Como última análise, o Gráfico 12 abaixo destaca os sintomas predominantes em pessoas contaminadas, sendo os principais a febre e a tosse. Apenas 44 casos confirmados necessitaram de ventilador. No entanto, o número de casos sem informação quanto ao uso de ventilador (675) impossibilita qualquer inferência.

SINTOMAS <- dados2[,16:29]
SINTOMAS <- colSums(SINTOMAS, na.rm = T)

data.frame("SINTOMAS" = names(SINTOMAS), "Qtd" = SINTOMAS) %>%
  ggplot(aes(x = reorder(SINTOMAS,Qtd), y = Qtd)) +
  geom_bar(stat = "identity", fill = "lightblue") +
  labs(title = "Gráfico 12: Frequência dos sintomas.",
       subtitle = "Município do Rio de Janeiro.",
       x = "Sintomas",
       y = "Quantidade") +
  theme_bw() +
  ylim(c(0,230)) +
  geom_text(aes(label=Qtd),hjust=-0.5,color="Black", size = 4)+
  coord_flip()


  1. Relatórios internos que alimentam o Painel Rio COVID-19, disponível em https://experience.arcgis.com/experience/38efc69787a346959c931568bd9e2cc4