#Careegamento do arquivo base
library(readr)
dados_covid <- vroom::vroom("https://data.brasil.io/dataset/covid19/caso_full.csv.gz")

  1. Introdução


O primeiro caso de Covid-19 no Brasil foi notificado em 25/02/20. Desta data até 21 de fevereiro de 2022, foram mais de 51 milhões de casos registrados pelo Ministério da Saúde. Algumas medidas para evitar uma contaminação maior de população foram tomadas, tais como lavar as mãos,cobrir a boca e nariz, evitar a circulação e aglomeração, entre outras medidas.Como em todas as localidades, as empresas foram afetadas, e uma das maiores do país, a Petrobras, também; e para reduzir a possibilidade de contaminação de seus funcionários e terceirizados, inciou um processo de quarentena das pessoas que iriam embarcar e que desembarcavam das plataformas, mantendo-as em hotéis sob rígidos procedimentos de prevenção, conforme pode ser observado na publicação de Fatos e Dados (2020).
Mesmo com todas as medidas, os casos de contaminação da população cresceram, como pode ser observado no gráfico abaixo:
library(tidyverse)
library(RcppRoll)
library(ggplot2)
library(ggthemes)
dados_covid %>% filter(place_type == "state") %>%
group_by(date) %>% summarise(total=sum(new_confirmed)) %>%
mutate(casos = roll_meanr(total, n=7)) %>%
ggplot(aes(x=date, y=casos)) + geom_line(size=1.05) + scale_x_date("", breaks = "1 month", date_labels = "%b %y") +
scale_y_continuous("Nº de casos (em milhares)", breaks = seq(0, 250000, 25000), labels = seq(0, 250, 25)) + labs(title=("COVID-19 no Brasil")) + theme_bw()

library(dplyr)
dados = dados_covid[,-c(2,4,6,7,8,14,17,18)]
dados = dados%>%
  mutate (area = case_when(
    state == 'RJ'~'Sudeste',
    state == 'SP'~'Sudeste',
    state == 'ES'~'Sudeste',
    state == 'MG'~'Sudeste',
    state == 'RS'~'Sul',
    state == 'SC'~'Sul',
    state == 'PR'~'Sul',
    state == 'AC'~'Norte',
    state == 'AM'~'Norte',
    state == 'AP'~'Norte',
    state == 'PA'~'Norte',
    state == 'RO'~'Norte',
    state == 'RR'~'Norte',
    state == 'TO'~'Norte',
    state == 'GO'~'Centro',
    state == 'DF'~'Centro',
    state == 'MT'~'Centro',
    state == 'MS'~'Centro',
    state == 'AL'~'Nordeste',
    state == 'BA'~'Nordeste',
    state == 'CE'~'Nordeste',
    state == 'MA'~'Nordeste',
    state == 'PI'~'Nordeste',
    state == 'PE'~'Nordeste',
    state == 'PB'~'Nordeste',
    state == 'RN'~'Nordeste',
    state == 'SE'~'Nordeste',
    TRUE~NA_character_))
library(kableExtra)
library(dplyr)
library(stats)
library(base)
agregado=aggregate(dados$last_available_confirmed~dados$date,FUN = sum)
names(agregado)=c("Data", "Qtdd")


A título de informação, abaixo apresentamos a tabela de acumulados dos casos de contaminação e de mortes por estado. O percentual de mortes por casos, refere-se a quantidade de vidas perdidas entre as pessoas contaminadas.

library(pacman)
library(kableExtra)
dados = tbl_df(dados)
data_ant = (Sys.Date() - 1)
estados = dados %>% 
    filter(date == data_ant, place_type == "state") %>% 
    group_by(state) %>% 
    summarise(população = estimated_population, #format(estimated_population, big.mark=".")
              casos = last_available_confirmed,
              percasos = round(last_available_confirmed_per_100k_inhabitants/1000,digits=2),
              morte = last_available_deaths,   #format(last_available_deaths, big.mark="."),
              permorte = round(last_available_death_rate*100,digits=2),
              region = area
              ) %>% 
    arrange(-casos) 
kable(head(estados, 27),
      col.names = c("Estados", "População", "Casos","% Casos", "Mortes", "% Mortes dos casos", "Região")) %>% 
    kable_styling(full_width = FALSE, fixed_thead = T, position = "left", bootstrap_options = c("striped","hover","condensed","responsive"))
Estados População Casos % Casos Mortes % Mortes dos casos Região
SP 46289333 4954240 10.70 163493 3.30 Sudeste
MG 21292666 3120858 14.66 59139 1.89 Sudeste
PR 11516840 2288231 19.87 42105 1.84 Sul
RS 11422973 2111826 18.49 37978 1.80 Sul
RJ 17366189 1967184 11.33 71347 3.63 Sudeste
SC 7252502 1593501 21.97 21243 1.33 Sul
BA 14930634 1489594 9.98 28977 1.95 Nordeste
CE 9187103 1219743 13.28 26133 2.14 Nordeste
GO 7113540 1149491 16.16 25592 2.23 Centro
ES 4064052 1013129 24.93 14053 1.39 Sudeste
PE 9616621 801203 8.33 20992 2.62 Nordeste
PA 8690745 709489 8.16 17716 2.50 Norte
MT 3526220 698159 19.80 14682 2.10 Centro
DF 3055149 677699 22.18 11377 1.68 Centro
AM 4207714 570599 13.56 14098 2.47 Norte
PB 4039277 563676 13.95 10057 1.78 Nordeste
MS 2809394 489240 17.41 10240 2.09 Centro
RN 3534165 472107 13.36 8020 1.70 Nordeste
MA 7114598 408928 5.75 10725 2.62 Nordeste
RO 1796460 364123 20.27 7020 1.93 Norte
PI 3281480 364093 11.10 7619 2.09 Nordeste
SE 2318822 319379 13.77 6230 1.95 Nordeste
TO 1590248 295954 18.61 4093 1.38 Norte
AL 3351543 289311 8.63 6621 2.29 Nordeste
AP 861773 159973 18.56 2098 1.31 Norte
RR 631181 151785 24.05 2125 1.40 Norte
AC 894470 118436 13.24 1962 1.66 Norte


Para buscas mais específicas, apresentamos a tabela abaixo.

library(DT)
datatable(head(estados, 27), colnames = c("Estados", "População", "Casos","% Casos", "Mortes", "% Mortes dos casos", "Região"), caption = 'Pesquisa direcionada' ) #class = 'cell-border stripe'



Aprofundando um pouco mais sobre as ocorrências de casos de contaminação no país, Vamos classificar por regiões do país.

library(dplyr)
porregiao = group_by(estados,region)
porregiao = summarise(porregiao, 
                      População = sum(população),
                      Casos = sum(casos), 
                      Per_Casos = (sum(casos)*100)/sum(população), 
                      Mortes = sum(morte),
                      Per_Mortes = (sum(morte)*100)/sum(casos))
porregiao
# A tibble: 5 x 6
  region   População    Casos Per_Casos Mortes Per_Mortes
  <chr>        <dbl>    <dbl>     <dbl>  <dbl>      <dbl>
1 Centro    16504303  3014589      18.3  61891       2.05
2 Nordeste  57374243  5928034      10.3 125374       2.11
3 Norte     18672591  2370359      12.7  49112       2.07
4 Sudeste   89012240 11055411      12.4 308032       2.79
5 Sul       30192315  5993558      19.9 101326       1.69

  1. Objetivo


Este estudo foi desenvolvido visando analisar a relação entre o crescimento dos casos de contaminação da população com os colaboradores da Petrobras.

Abaixo temos a representação da evolução de contaminações entre as pessoas da empresa.

library(readxl)
Covid_Embarcados <- read_excel("C:/Marcos/! mestrado 2/2021/estatistica/Covid Embarcados.xlsx")
ggplot(Covid_Embarcados,aes(x=Data,y=Quantidade))+geom_line(size=1.05)+ labs(title=("COVID-19 \n na Petrobras")) + theme_bw() + scale_y_continuous("Nº de casos \n (em milhar)", breaks = seq(0, 12000, 1000), labels = seq(0, 12, 1)) 


A ANP apresenta no painel dinâmico que houve redução das pessoas à bordo das instalações petrolíferas, conforme pode ser observado na imagem abaixo.

  1. Metodologia


A metodologia utilizada foi a de pesquisa de bases de dados cujas fontes pudessem ser consideradas válidas. Algumas informações precisaram ser computadas antecipadamente, tal como os dados relativos aos contaminados na Petrobras, pois as informações estão expostas em um painel dinâmico em PowerBi no site da empresa, cuja base não está liberada,

Os dados relacionados à população brasileira foram obtidos no site do Ministério da Saúde.

A base de dados do ministérop da saúde apresenta 18 variáveis com 3.657.088 objetos e o arquivo relativo aos petroleiros apresenta 100 objetos com duas variáveis. Estas bases serão concatenadas para que possamos avaliá-las comparativamente.

  1. Estudo


Para podermos avaliar se houve uma relação entre as contaminações ocorridas no país com as contaminações dos funcionários e colaboradores, precisamos unificar as planilhas existentes, neste caso como os dados do funcionários possui uma divulgação semanal, utilizaremos esta base como parâmetro de estudo.

library(dplyr)
mescla = Covid_Embarcados %>% left_join(agregado)
mescla = rename(mescla,Embarcados=Quantidade, População=Qtdd)
library(ggplot2)
(plots=ggplot(mescla, aes(x=Data))
 +geom_line(aes(y=População, colour = "População \n"))
 +scale_x_continuous()
 +geom_line(aes(y=Embarcados, colour = "Embarcados"))
 )+ theme_bw()


Como as quantidades são muito diferentes, vamos utilizar a comparação de percentuais. Na publicação da revista Poder 360, informa que a Petrobras terminou o ano de 2020 com 51.950 funcionários e que possui mais 90.500 terceirizados, perfazendo assim o total de 142.500 colaboradores.A população atual do país é de 211.755.692 pessoas, conforme relatado nos dados anteriores.

mescla["Perc.Embarcados"]=mescla$Embarcados*100/142500
mescla["Perc.População"]=mescla$População*100/211755692


Vamos observar agora o resumo das faixas e dados estatísticos dos percentuais:

summary(mescla)
      Data                       Embarcados      População       
 Min.   :2020-03-21 00:00:00   Min.   :    0   Min.   :    2203  
 1st Qu.:2020-09-09 06:00:00   1st Qu.: 2074   1st Qu.: 8440659  
 Median :2021-03-01 12:00:00   Median : 4540   Median :21339268  
 Mean   :2021-03-01 16:19:12   Mean   : 4220   Mean   :23260977  
 3rd Qu.:2021-08-21 18:00:00   3rd Qu.: 6346   3rd Qu.:40841932  
 Max.   :2022-02-11 00:00:00   Max.   :10325   Max.   :50354234  
 Perc.Embarcados Perc.População    
 Min.   :0.000   Min.   : 0.00104  
 1st Qu.:1.455   1st Qu.: 3.98604  
 Median :3.186   Median :10.07731  
 Mean   :2.961   Mean   :10.98482  
 3rd Qu.:4.454   3rd Qu.:19.28729  
 Max.   :7.246   Max.   :23.77940  

Desvio Padrão


O desvio padrão apresenta o quanto um dado está afastado da média de valores obtidos. Entendemos que quanto menor o valor do desvio padrão, mais homogênea é a amostra. Para o cálculo do erro padrão precisamos dividir o desvio padrão pela raiz quadrada da amostra. Com ele podemos estimar o intervalo de confiança.

Desvio padrão Embarcados:

dpemb=sd(mescla$Perc.Embarcados)
dpemb
[1] 1.718635


A média apresentada na tabela anteriro para este caso foi de 2.961. Aplicado o intervalo de confiança de 95%. Temos os valores:

Erremb=dpemb/sqrt(length(mescla$Perc.Embarcados))
Interemb=Erremb*1.96
Supemb=mean(mescla$Perc.Embarcados)+Interemb
Infemb=mean(mescla$Perc.Embarcados)-Interemb
Supemb
[1] 3.298144
Infemb
[1] 2.624439


Desta forma vemos que os dados não obedecem a uma curva normal e não estão no intervalo de confiança.


Desvio padrão População:

dppop=sd(mescla$Perc.População)
dppop
[1] 7.842593


A média apresentada na tabela anteriro para este caso foi de 10.98421.

Errpop=dppop/sqrt(length(mescla$Perc.População))
Interpop=Errpop*1.96
Suppop=mean(mescla$Perc.População)+Interpop
Infpop=mean(mescla$Perc.População)-Interpop
Suppop
[1] 12.52197
Infpop
[1] 9.44767


Desta forma vemos que os dados não obedecem a uma curva normal e mas estão no intervalo de confiança.


Coeficiente de variação


O coeficiente de variação é a razão entre o desvio padrão e a média. Em geral, o resultado é multiplicado por 100, para que o coeficiente de variação seja expresso em porcentagem.

CVemb = (dpemb/mean(mescla$Perc.Embarcados))*100
CVemb
[1] 58.03667
CVpop = (dppop/mean(mescla$Perc.População))*100
CVpop
[1] 71.39483

Uma base para análise dos resultados:

  • CV = 0: adimensional, não há variação dos dados;
  • 0 < CV <= 10%: baixa disperção, dados homogêneos;
  • 10% < CV <= 30%: média disperção;
  • CV >30%: alta disperção, dados heterogêneos.


Sendo assim em ambos casos os dados são considerados heterogênos.


Histograma


ampemb=diff(range(mescla$Perc.Embarcados))
Maioremb=max(mescla$Perc.Embarcados)
Menoremb=min(mescla$Perc.Embarcados)
Mediaemb=mean(mescla$Perc.Embarcados)
ampop=diff(range(mescla$Perc.População))
Maiorpop=max(mescla$Perc.População)
Menorpop=min(mescla$Perc.População)
Mediapop=mean(mescla$Perc.População)

quebraemb=(ampemb/20)
hist(mescla$Perc.Embarcados, main="Distribuição Embarcados", xlab = "Valores", ylab = "Frequência", col="red" ,density = 80, angle = 45, breaks = seq(0,(1.1*Maioremb), quebraemb), axes = TRUE, probability = TRUE)
x = 0:(1.1*Maioremb)
y = dnorm(x = x, mean = Mediaemb, sd = dpemb)
lines(x = x, y = y, col = "black", lwd=2)


quebrapop=(ampop/20)
hist(mescla$Perc.População, main="Distribuição População", xlab = "Valores", ylab = "Frequência", col="blue" ,density = 30, angle = 135, breaks = seq(0,(1.1*Maiorpop), quebrapop), axes = TRUE, probability = TRUE)
x = 0:(Maiorpop*1.1)
y = dnorm(x = x, mean = Mediapop, sd = dppop)
lines(x = x, y = y, col = "red", lwd=2)

Conseguimos observar que em ambos os gráfico há a confirmação de que os dados não seguem uma curva normal.



Faixas percentuais


mescla = mescla %>%
 mutate(
  faixa_Percemb = case_when(
    Perc.Embarcados < 5 ~ "1. Aceitável",
    Perc.Embarcados < 10 ~ "2. Sob Controle",
    Perc.Embarcados < 15 ~ "3. Atenção",
    Perc.Embarcados < 20 ~ "4. Risco",
    Perc.Embarcados < 25 ~ "5. Perigo",
        TRUE ~ "8. Calamidade"))

library(reactable)
mescla %>% select(faixa_Percemb) %>% table() %>%
  data.frame() %>% reactable()
mescla = mescla %>%
 mutate(
  faixa_Percpop = case_when(
    Perc.População < 5 ~ "1. Aceitável",
    Perc.População < 10 ~ "2. Sob Controle",
    Perc.População < 15 ~ "3. Atenção",
    Perc.População < 20 ~ "4. Risco",
    Perc.População < 25 ~ "5. Perigo",
        TRUE ~ "8. Calamidade"))

library(reactable)
mescla %>% select(faixa_Percpop) %>% table() %>%
  data.frame() %>% reactable()

Boxplot


boxplot(Perc.Embarcados~faixa_Percemb,
        data = mescla,main="Boxplot Embarcados",
        col=c("green","blue","Yellow","red","purple"), horizontal = T,
        xlab = "Percentuais", ylab = "Faixas ")

boxplot(Perc.População~faixa_Percpop,
        data = mescla,main="Boxplot População",
        col=c("green","blue","Yellow","red","purple"), horizontal = T,
        xlab = "Percentuais", ylab = "Faixas ")


Diagrama de dispersão


plot(mescla$Perc.Embarcados,mescla$Perc.População,
     main="Diagrama de dispersão",
     xlab="% Embarcados",
     ylab="% População",
     col='lightblue',pch=16,
     )
abline(lsfit(mescla$Perc.Embarcados,mescla$Perc.População),col="red")


Correlação


Cálculo da correlação entre as duas variáveis.

A correlação é utilizada para verificar medir a relação entre duas variáveis. Alguns estudos apresentam a tabela a seguir para análise desta correlação.

  • Correlação nula = x=0,00
  • Correlação bem fraca = x <= 0,19,
  • Correlação fraca = 0,20 < x < 0,39,
  • Correlação moderada = 0,40 < x < 0,69,
  • Correlação forte = 0,70 < x < 0,89,
  • Correlação bem forte = 0,90 < x < 1,00,
  • Correlação perfeita = x=1,00

Lembrando que ela pode ser positiva ou negativa.

cor(mescla$Perc.Embarcados,mescla$Perc.População)
[1] 0.973393

Neste caso, identificamos as amostras com uma correlação positiva e bem forte.


Teste de normalidade


Para a verificação se as variáveis seguem a distribuição normal, faz-se necessário a realização de alguns testes.

Teste de Shapiro-Wilk.


Para confirmar que a amostra possui uma distribuição normal, o teste de Shapiro-Wilk deve ter como resultado a hipótese nula, logo o valor de p-valor deve ser maior que 0,05.

Critérios do teste;
H0: os dados seguem uma distribuição normal
H1: os dados NÃO seguem uma distribuição normal
alpha = 0.05

Interpretação dos resultados:
se p-valor < alpha -> rejeita H0
se p-valor > alpha -> não rejeita H0

Teste base embarcados:

shapiro.test(mescla$Perc.Embarcados)

    Shapiro-Wilk normality test

data:  mescla$Perc.Embarcados
W = 0.93499, p-value = 9.662e-05


Teste base população:

shapiro.test(mescla$Perc.População)

    Shapiro-Wilk normality test

data:  mescla$Perc.População
W = 0.89704, p-value = 1.029e-06


Em ambos casos os valores encontrados rejeitam a hipótese de seguir a distribuição normal.Confirmando que ainda não foram finalizadas as coletas de dados, pois entramos em uma terceira onda de casos no início deste ano.

Faz-se necessário realizar o teste de correlação entre as duas variáveis através do teste de Spearman.

Teste de Spearman.


Critérios do teste;
H0: Coeficiente de correlação rho igual a zero
H1: Coeficiente de correlação rho diferente de zero
alpha = 0,05

Interpretação dos resultados:
se p-valor < alpha -> rejeita H0
se p-valor > alpha -> não rejeita H0

cor.test(mescla$Perc.Embarcados,mescla$Perc.População, method = "spearman")

    Spearman's rank correlation rho

data:  mescla$Perc.Embarcados and mescla$Perc.População
S = 0, p-value < 2.2e-16
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho 
  1 

Identificamos que há a correlação entre as variáveis pois o valor p-valor é menor que alpha. Ratificando assim a informação do teste de correlação realizado anteriormente.

  1. Conclusão


Pode-se observar que o efeito das contaminações segue uma mesma correlação, mesmo que a empresa tenha tomado providências mais rigorosas com os colaboradores do que a população tenha seguido. O ritmo das contaminações seguiu em uma velocidade menor, mas possui as mesmas características que o ocorrido na população do país.

Como oportunidades para estudos futuros temos primeiramente a necessidade de uma base de dados com a mesma temporalidade, também podemos reduzir os ruídos de interpretação visto que em algumas regiões do país a quantidade de funcionários da empresa seja baixo e a utilização destes dados nas comparações pode distorcer as análises; a curva de contaminação afetou a quantidade de funcionários na empresa, refletindo na quantidade de pessoas à bordo, conforme informado pela ANP no painél dinâmico.

  1. Referências

Ministério da Saúde Disponível em: < https://opendatasus.saude.gov.br/datasetf > Acesso em: 20 de fevereiro de 2022.

Fatos e DadosPetrobras – Disponível em: https://petrobras.com.br/fatos-e-dados/adotamos-novas-medidas-em-plataformas-para-prevencao-ao-novo-coronavirus.htm Acesso em: 20 de fevereiro de 2022.

painel dinâmico Disponível em: https://app.powerbi.com/view?r=eyJrIjoiNGI3YThhYzQtNDIwMi00OTE5LTg2OTktYTc2N2UyZWYwZDQzIiwidCI6IjQ0OTlmNGZmLTI0YTYtNGI0Mi1iN2VmLTEyNGFmY2FkYzkxMyJ9 Acesso em: 20 de fevereiro de 2022.

Poder360 Disponível em: https://www.poder360.com.br/economia/petrobras-encerra-2020-com-quadro-de-funcionarios-104-menor/ Acesso em: 20 de fevereiro de 2022.


  1. Universidade Federal Fluminense, ↩︎

  2. Universidade Federal Fluminense, ↩︎