#Careegamento do arquivo base
library(readr)
dados_covid <- vroom::vroom("https://data.brasil.io/dataset/covid19/caso_full.csv.gz")
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
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.
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.
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
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.
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:
Sendo assim em ambos casos os dados são considerados heterogênos.
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.
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(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 ")
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")
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.
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.
Para a verificação se as variáveis seguem a distribuição normal, faz-se necessário a realização de alguns testes.
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.
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.
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.
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.
Universidade Federal Fluminense, marcosmn@id.uff.br↩︎
Universidade Federal Fluminense, steven.ross@uniriotec.br↩︎