1 Contextualização

O banco de dados analisado apresenta os resultados da correlação e da regressão simples e multipla, analisando as seguintes variáveis:, taxa de mortalidade por 100 mil por covid-19, população e a renda de todos os distritos da cidade de São Paulo. Desejamos avaliar se a taxa de mortalidade por covid é afetada por indicadores socio-econômicos, e se esse efeito depende da renda e/ou da população.

Os dados sobre o número de mortos por covid abrange os meses de março até setembro de 2020, a base de dados foi disponibiliza pela Prefeitura de São Paulo, já os dados sobre a população e a renda foram extraídos do censo demográfico de 2010.

2 Carregamento dos pacotes

Podemos consultar todos pacotes utilizados para a presente análise.

library(dplyr)                                
library(car)                                
library(rstatix)                                
library(emmeans)
library(ggplot2)
library(knitr)
library(kableExtra)
library(htmltools)
library(prettydoc)
library(rmdformats)
library(hrbrthemes)
library(tufte)
library(tint)
library(tidyverse)
library(corrplot)
library(Hmisc)
library(performance)
library(broom)

3 Leitura e visualização do banco de dados

Segue o banco de dados utilizado para realizarmos as análises de correlação e regressões (simples e múltipla).

3.1 Taxa de mortalidade de covid por 100 mil e população por distrito

Segue a tabela com os dados consolidado.

covid_hab <- read.csv("covid_total_hab_taxa.csv")
glimpse(covid_hab)
## Rows: 96
## Columns: 6
## $ ds_codigo        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...
## $ Codigo           <int> 355030801, 355030802, 355030803, 355030804, 355030...
## $ Distrito         <chr> "Água Rasa", "Alto de Pinheiros", "Anhanguera", "A...
## $ Obitos           <int> 167, 64, 66, 183, 232, 28, 88, 110, 56, 71, 447, 7...
## $ Residentes       <int> 84963, 43117, 65859, 89622, 105269, 14383, 69460, ...
## $ Taxa_por_100_mil <int> 197, 148, 100, 204, 220, 195, 127, 244, 165, 243, ...
kable(head(covid_hab, 6), col.names = c("ds codigo", "Código", "Distrito","Óbitos",  "População", "Taxa de mortalidade por 100 mil")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive"))
ds codigo Código Distrito Óbitos População Taxa de mortalidade por 100 mil
1 355030801 Água Rasa 167 84963 197
2 355030802 Alto de Pinheiros 64 43117 148
3 355030803 Anhanguera 66 65859 100
4 355030804 Aricanduva 183 89622 204
5 355030805 Artur Alvim 232 105269 220
6 355030806 Barra Funda 28 14383 195


O banco contém 96 distritos.

3.2 Taxa de mortalidade de covid por 100 mil e Classes socio-econômicas

Segue a tabela com os dados consolidado.

covid_renda <- read.csv("renda_ibge_covid_classeseconomicas.csv")
glimpse(covid_renda)
## Rows: 96
## Columns: 12
## $ codigo          <int> 355030801, 355030802, 355030803, 355030804, 3550308...
## $ distrito        <chr> "Água Rasa", "Alto de Pinheiros", "Anhanguera", "Ar...
## $ obitos          <int> 167, 64, 66, 183, 232, 28, 88, 110, 56, 71, 447, 71...
## $ residente       <int> 84963, 43117, 65859, 89622, 105269, 14383, 69460, 4...
## $ taxa_por_100mil <dbl> 196.6, 148.4, 100.2, 204.2, 220.4, 194.7, 126.7, 24...
## $ sem_renda       <int> 28652, 15408, 19437, 27661, 33712, 5623, 29967, 143...
## $ E               <int> 2100, 919, 707, 1341, 1074, 186, 1113, 564, 1184, 4...
## $ D               <int> 4165, 703, 6257, 6543, 7962, 503, 2633, 1902, 2019,...
## $ C               <int> 8258, 1805, 8884, 10327, 14027, 1189, 7299, 4305, 3...
## $ B               <int> 7469, 2756, 2978, 6550, 8364, 1338, 8443, 4035, 266...
## $ A               <int> 4747, 3550, 534, 2402, 2027, 1339, 6265, 2604, 1273...
## $ Total           <int> 1910, 5661, 75, 475, 258, 1066, 4008, 910, 280, 202...
kable(head(covid_renda, 6), col.names = c("Código", "Distrito", "Óbitos", "População", "Taxa de mortalidade por 100 mil", "Sem renda", "E", "D", "C", "B", "A", "Total")) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Código Distrito Óbitos População Taxa de mortalidade por 100 mil Sem renda E D C B A Total
355030801 Água Rasa 167 84963 196.6 28652 2100 4165 8258 7469 4747 1910
355030802 Alto de Pinheiros 64 43117 148.4 15408 919 703 1805 2756 3550 5661
355030803 Anhanguera 66 65859 100.2 19437 707 6257 8884 2978 534 75
355030804 Aricanduva 183 89622 204.2 27661 1341 6543 10327 6550 2402 475
355030805 Artur Alvim 232 105269 220.4 33712 1074 7962 14027 8364 2027 258
355030806 Barra Funda 28 14383 194.7 5623 186 503 1189 1338 1339 1066


O banco contém 96 distritos.

4 Correlação

4.1 Diagrama

O Diagrama de dispersão nos mostra se há correlação entre as variáveis analisados, ou seja, é uma medida do relacionamento linear entre duas variáveis. Abaixo segue, o diagrama das variáveis taxa de mortalidade por 100 mil versus população por distrito.

ggplot(covid_hab, aes(x = Residentes, y = Taxa_por_100_mil)) +
  geom_point() +
  theme_bw() + 
  labs(title= "taxa de mortalidade por 100 mil versus População - Covid-19", x = "População", y = "Taxa de mortalidade por 100 mil")

Podemos notar que há correlação negativa entre as duas variáveis, ou seja, as variáveis são negativamente relacionais quando maior a população, menor a taxa de mortalidade.
O gráfico de dispersão abaixo, nos mostra se há correlação entre as variáveis: taxa de mortalidade por 100 mil e a população sem renda.

ggplot(covid_renda, aes(x = sem_renda , y = taxa_por_100mil)) +
  geom_point() +
  theme_bw() +
  labs(title= "Taxa de mortalidade por 100 mil versus Sem renda - Covid-19", x = "Sem renda", y = "taxa mortalidade por 100 mil")

Podemos identicar uma correlação negativa entre as duas variáveis.
Entretanto, será necessário utilizar a correlação de Pearson para determinamos o grau da correlação.

4.2 Correlação de Pearson

É uma media padronizada da correlação entre variáveis

4.2.1 Taxa de mortalidade por 100 mil versus População por distrito

cor.test(x = covid_hab$Residentes, 
         y = covid_hab$Taxa_por_100_mil,
         method = "pearson",
         alternative = "two.sided",
         conf.level = 0.95)
## 
##  Pearson's product-moment correlation
## 
## data:  covid_hab$Residentes and covid_hab$Taxa_por_100_mil
## t = -2.5208, df = 94, p-value = 0.01339
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.43040384 -0.05386247
## sample estimates:
##        cor 
## -0.2516311

O coeficiente de correlaçao nos mostra uma correlação negativa, a saber, -0.2516311 e o teste de significância nos permite rejeitar a hipótese nula.

4.2.2 Taxa de mortalidade por 100 mil versus Sem renda por distrito

cor.test(x = covid_renda$sem_renda, 
         y = covid_renda$taxa_por_100mil,
         method = "pearson",
         alternative = "two.sided",
         conf.level = 0.95)
## 
##  Pearson's product-moment correlation
## 
## data:  covid_renda$sem_renda and covid_renda$taxa_por_100mil
## t = -2.6224, df = 94, p-value = 0.01019
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.4386216 -0.0639577
## sample estimates:
##        cor 
## -0.2610957

O coeficiente de correlaçao nos mostra uma correlação negativa, a saber, -0.2610957 e o teste de significância nos permite rejeitar a hipótese nula.

5 Regressão Simples

5.1 Taxa mortalidade de 100 mil versus residentes

A regressão simples entre as variáveis Taxa mortalidade de 100 mil versus População.

modelo_1 <- lm(formula = covid_hab$Taxa_por_100_mil ~ covid_hab$Residentes, data = covid_hab, na.action = na.exclude)
summary(modelo_1)
## 
## Call:
## lm(formula = covid_hab$Taxa_por_100_mil ~ covid_hab$Residentes, 
##     data = covid_hab, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -75.485 -17.001  -0.868  22.057  66.230 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           1.827e+02  5.933e+00  30.798   <2e-16 ***
## covid_hab$Residentes -1.098e-04  4.357e-05  -2.521   0.0134 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 29.57 on 94 degrees of freedom
## Multiple R-squared:  0.06332,    Adjusted R-squared:  0.05335 
## F-statistic: 6.354 on 1 and 94 DF,  p-value: 0.01339

análise da regressão simples

b0 intercepto y (onde a linha corta o eixo y) –> b0 = 1.827e+02 ou 0,01827 (valor que Y assume quando X = 0).

b1 inclinação da reta de regressão –> Mudança na variável de saída (Y) para cada alteração de uma unidade no previsor (X).

b1 -1.098e-04 ou -0,0001098 –> Em média, um aumento de 1 habitante, está relacionado a um diminuição de -0,0001098 na taxa de mortos por 100 mil por covid.

Esta variável preditora (habitantes) faz diferença na representação da variação da taxa de mortos por 100 mil?

Para isso, b1 deve ser diferente de zero!!! O teste t nos informa se podemos rejeitar ou não, a hipótese nula de que b1 = zero

Calcula-se o valor t dividindo o b1 pelo seu erro padrão (Std. Error) = -0,0001098/0,0004357 = -2.521

A probabilidade de se obter um valor igual ou maior do que esse valor t, dado que a hipótese nula é verdadeira é muito pequena (pr(>|t|)) –> p-valor < 0,001 (para ser mais preciso, menor do que 0.0134). Ou seja, *rejeita-se a hipótese nula!

Concluímos que a população tem uma contribuição significativa (p < 0.0134) na explicação da variação da taxa de mortos por 100 mil de covid-19.

O mesmo teste é aplicado para analisar a significância do b0.

H0 : b0 = zero

Também nesse caso o p-valor < 0.01339.

Coeficiente de determinação (R^2): 0.05335

Nos informa que nosso modelo consegue explicar 5,3% da variação da taxa de morte por 100 mil por covi-19. Devem existir muitos fatores que podem explicar esta variação, mas nosso modelo, que inclui somente a população, pode explicar 5,3% dela. No entento, 94,7% da variação da taxa de mortalidade não pode ser explicado pela variação da população.

O teste F é uma medida do quanto o modelo melhorou na previsão de valores comparado como o nível de não precisão do modelo.

Estatística F = 6.354, que é significativa até mesmo ao nível de significância x > 0,05.

Esse resultado nos informa que existe uma probabilidade menor do que 0,13% de que valor F tão alto tenha ocorrido apenas por acaso. Ou seja, pode-se concluir que nosso modelo de regressão representa melhor a taxa de mortalidade se tivéssemos usados apenas o valor médio das mortes por covid por distrito.

Lembrando que o critério de Fisher é de 0.05 (nível de significância). Ou seja, o resultado reflete um efeito genuíno, não é fruto do acaso.

par(mfrow = c(2,2))
plot(modelo_1)

Gráfico de dispersão com a linha.

plot(x = covid_hab$Residentes, 
     y = covid_hab$Taxa_por_100_mil,
     xlab = "População residente",
     ylab = "Taxa mortalidade por 100 mil")
abline(modelo_1, col = "red") 

A regressão simples entre as variáveis entre taxa mortalidade de 100 mil versus população sem renda.

5.2 Taxa mortalidade de 100 mil versus população sem renda

Gráfico de dispersão com a linha.

mod_2 <- lm(formula = covid_renda$taxa_por_100mil ~ covid_renda$sem_renda, data = covid_renda, na.action = na.exclude)
summary(mod_2)
## 
## Call:
## lm(formula = covid_renda$taxa_por_100mil ~ covid_renda$sem_renda, 
##     data = covid_renda, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -76.692 -17.710  -0.563  21.416  65.181 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            1.846e+02  6.383e+00  28.920   <2e-16 ***
## covid_renda$sem_renda -3.963e-04  1.511e-04  -2.622   0.0102 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 29.53 on 94 degrees of freedom
## Multiple R-squared:  0.06817,    Adjusted R-squared:  0.05826 
## F-statistic: 6.877 on 1 and 94 DF,  p-value: 0.01019

análise da regressão simples

b0 intercepto y (onde a linha corta o eixo y) –> b0 = ou (valor que Y assume quando X = 0).

b1 inclinação da reta de regressão –> Mudança na variável de saída (Y) para cada alteração de uma unidade no previsor (X).

b1 ou –> Em média, um aumento de 1 habitante, está relacionado a um diminuição de na taxa de mortos por 100 mil por covid.

Esta variável preditora (habitantes) faz diferença na representação da variação da taxa de mortos por 100 mil?

par(mfrow = c(2,2))
plot(mod_2)

plot(x = covid_renda$sem_renda, 
     y = covid_renda$taxa_por_100mil,
     xlab = "População sem renda",
     ylab = "Taxa de mortalidade por 100 mil")
abline(mod_2, col = "red") 

6 Regressão Linear Múltipla

6.1 Taxa mortalidade de 100 mil versus classes socio-econômicas

modelo_3 <- lm(formula = taxa_por_100mil ~ A + B + C + D + E + sem_renda, data = covid_renda, na.action = na.exclude)
summary(modelo_3)
## 
## Call:
## lm(formula = taxa_por_100mil ~ A + B + C + D + E + sem_renda, 
##     data = covid_renda, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -62.463 -17.196  -1.006  20.748  62.852 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.766e+02  6.818e+00  25.909  < 2e-16 ***
## A           -3.586e-04  7.871e-03  -0.046  0.96377    
## B            1.407e-02  4.860e-03   2.896  0.00476 ** 
## C           -1.604e-03  6.335e-03  -0.253  0.80076    
## D            5.236e-03  4.580e-03   1.143  0.25601    
## E            8.990e-03  8.683e-03   1.035  0.30329    
## sem_renda   -4.145e-03  2.786e-03  -1.488  0.14036    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26.55 on 89 degrees of freedom
## Multiple R-squared:  0.2868, Adjusted R-squared:  0.2387 
## F-statistic: 5.965 on 6 and 89 DF,  p-value: 2.851e-05
par(mfrow = c(2,2))
plot(modelo_3)