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.
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)
Segue o banco de dados utilizado para realizarmos as análises de correlação e regressões (simples e múltipla).
Segue a tabela com os dados consolidado.
## 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.
Segue a tabela com os dados consolidado.
## 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.
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.
É uma media padronizada da correlação entre variáveis
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.
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.
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.
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.
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?
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")
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