razao dep

Dados

Disponíveis em: https://www.ipardes.pr.gov.br/Pagina/Base-de-Dados-do-Estado

Variável resposta (por município):

  • razao_dep: razão de dependencia

Covariáveis (por município):

  1. populacao: população estimada
  2. pib_pc: pib per capita
  3. gini: índice de gini
  4. prop_idosos: proporção de idosos
  5. natalidade: renda média domiciliar per capita
  6. ipdm: Índice de Desempenho Municipal
  7. renda: Renda média domiciliar per capita
  8. idh: Índice de Desenvolvimento Humano Municipal

Primeiras linhas da base:

kable(head(df))
razao_dep populacao pib_pc gini prop_idosos natalidade gini_renda_pc idh renda ipdm
51.58 7350 30141 0.44 14.92 11.19 0.4424 0.687 533.79 0.7556
52.21 6366 63631 0.53 13.36 11.19 0.5393 0.667 430.79 0.6951
48.22 10325 22674 0.48 11.15 14.95 0.4797 0.660 516.96 0.6148
42.38 122524 15948 0.43 7.15 13.09 0.4402 0.699 629.58 0.6259
48.22 3628 67333 0.58 13.70 11.98 0.5848 0.667 504.11 0.7449
50.42 3095 43224 0.52 12.54 18.66 0.5769 0.678 498.65 0.7570

Análise Descritiva

descritiva <- kable(psych::describe(df, quant = c(.25, .75)))
descritiva
vars n mean sd median trimmed mad min max range skew kurtosis se Q0.25 Q0.75
razao_dep 1 399 4.781391e+01 3.077880e+00 47.8200 4.789009e+01 2.891070e+00 39.3100 56.6500 17.3400 -0.1956089 0.0328813 0.1540868 4.6015e+01 49.8800
populacao 2 399 2.928995e+04 1.060821e+05 9781.0000 1.276305e+04 8.060896e+03 1342.0000 1836535.0000 1835193.0000 13.1551570 211.1002330 5310.7481511 4.9855e+03 18882.5000
pib_pc 3 399 4.308138e+04 1.975808e+04 38431.0000 4.028830e+04 1.496388e+04 13213.0000 170126.0000 156913.0000 1.9707201 6.4621561 989.1413957 2.9765e+04 51827.5000
gini 4 399 4.656892e-01 5.710750e-02 0.4700 4.646729e-01 5.930400e-02 0.3300 0.6600 0.3300 0.2315127 0.0717342 0.0028590 4.3000e-01 0.5000
prop_idosos 5 399 1.286133e+01 2.409878e+00 12.8700 1.287146e+01 2.461116e+00 5.3000 19.8700 14.5700 -0.0564452 -0.1348679 0.1206448 1.1215e+01 14.4900
natalidade 6 399 1.224291e+01 2.036939e+00 12.1900 1.224505e+01 1.942206e+00 3.5600 18.6600 15.1000 -0.0890629 0.4935912 0.1019745 1.0935e+01 13.6050
gini_renda_pc 7 399 4.730075e-01 5.768080e-02 0.4754 4.723751e-01 5.604230e-02 0.3278 0.6383 0.3105 0.1172795 -0.1939912 0.0028877 4.3365e-01 0.5092
idh 8 399 7.019599e-01 3.856590e-02 0.7060 7.039595e-01 3.261720e-02 0.5460 0.8230 0.2770 -0.5552369 0.9380658 0.0019307 6.8100e-01 0.7250
renda 9 399 6.000395e+02 1.478300e+02 581.3500 5.898104e+02 1.204613e+02 274.0500 1536.3900 1262.3400 1.2128961 4.3941051 7.4007580 5.0765e+02 672.1050
ipdm 10 399 7.414358e-01 5.253060e-02 0.7467 7.436065e-01 5.144620e-02 0.4592 0.9013 0.4421 -0.6297050 1.9366117 0.0026298 7.0955e-01 0.7778

;;;Escrever algo

Histograma

Como vimos acima as variáveis população e pib per capita problemas de assimetria, vamos analisar os histogramas dessas variáveis para entender melhor a distribuição dos dados.

par(mfrow = c(1, 2))
hist(df$populacao, main = "Histograma de População", xlab = "População")
hist(df$pib_pc, main = "Histograma de PIB per Capita", xlab = "PIB per Capita")

hist(df$renda, main = "Histograma de PIB per Capita", xlab = "PIB per Capita")
par(mfrow = c(1, 1))

;;; Escrever algo

;;; Justificativa para a transformação

# Criando variáveis transformadas (logaritmo da população e PIB)
df$log_pop <- log(df$populacao)
df$log_pib <- log(df$pib_pc)
df$log_renda <- log(df$renda)

Após a transformação, vamos verificar novamente

descritivas_log <- kable(psych::describe(df[,-c(2,3)],quant=c(.25,.75)))
descritivas_log
vars n mean sd median trimmed mad min max range skew kurtosis se Q0.25 Q0.75
razao_dep 1 399 47.8139098 3.0778804 47.820000 47.8900935 2.8910700 39.310000 56.650000 17.340000 -0.1956089 0.0328813 0.1540868 46.015000 49.880000
gini 2 399 0.4656892 0.0571075 0.470000 0.4646729 0.0593040 0.330000 0.660000 0.330000 0.2315127 0.0717342 0.0028590 0.430000 0.500000
prop_idosos 3 399 12.8613283 2.4098777 12.870000 12.8714642 2.4611160 5.300000 19.870000 14.570000 -0.0564452 -0.1348679 0.1206448 11.215000 14.490000
natalidade 4 399 12.2429073 2.0369387 12.190000 12.2450467 1.9422060 3.560000 18.660000 15.100000 -0.0890629 0.4935912 0.1019745 10.935000 13.605000
gini_renda_pc 5 399 0.4730075 0.0576808 0.475400 0.4723751 0.0560423 0.327800 0.638300 0.310500 0.1172795 -0.1939912 0.0028877 0.433650 0.509200
idh 6 399 0.7019599 0.0385659 0.706000 0.7039595 0.0326172 0.546000 0.823000 0.277000 -0.5552369 0.9380658 0.0019307 0.681000 0.725000
renda 7 399 600.0395489 147.8300262 581.350000 589.8104361 120.4612500 274.050000 1536.390000 1262.340000 1.2128961 4.3941051 7.4007580 507.650000 672.105000
ipdm 8 399 0.7414358 0.0525306 0.746700 0.7436065 0.0514462 0.459200 0.901300 0.442100 -0.6297050 1.9366117 0.0026298 0.709550 0.777800
log_pop 9 399 9.3274121 1.1111943 9.188197 9.2136506 0.9924579 7.201916 14.423391 7.221475 1.0813543 1.6084961 0.0556293 8.514287 9.845928
log_pib 10 399 10.5855348 0.4021658 10.556620 10.5692511 0.4061473 9.488957 12.044295 2.555338 0.4033601 0.2652028 0.0201335 10.301088 10.855675
log_renda 11 399 6.3685244 0.2381859 6.365353 6.3689812 0.2099528 5.613311 7.337191 1.723880 0.0224492 0.8616387 0.0119242 6.229792 6.510413

;;; Escrever algo

Correlação

Vamos analisar a correlação entre as variáveis transformadas e a variável resposta.

matriz_cor <- cor(df[, -c(2,3)])
matriz_cor
##                  razao_dep         gini  prop_idosos  natalidade gini_renda_pc
## razao_dep      1.000000000  0.009286122  0.677308206 -0.11511023  -0.006796366
## gini           0.009286122  1.000000000 -0.231390860  0.31330213   0.989640146
## prop_idosos    0.677308206 -0.231390860  1.000000000 -0.51989531  -0.251855742
## natalidade    -0.115110226  0.313302127 -0.519895307  1.00000000   0.318848441
## gini_renda_pc -0.006796366  0.989640146 -0.251855742  0.31884844   1.000000000
## idh           -0.270710523 -0.115975323  0.149520252 -0.19776761  -0.124112319
## renda         -0.333524781  0.148955156 -0.023973133 -0.03611589   0.135945284
## ipdm          -0.266481062  0.013166002 -0.017719723 -0.03104015   0.009298058
## log_pop       -0.565719379  0.256161964 -0.496119612  0.20262777   0.270499147
## log_pib       -0.092030849  0.157002715 -0.012018878  0.04051899   0.160096346
## log_renda     -0.313599430  0.102427649  0.006711298 -0.06455538   0.089240883
##                      idh       renda         ipdm     log_pop     log_pib
## razao_dep     -0.2707105 -0.33352478 -0.266481062 -0.56571938 -0.09203085
## gini          -0.1159753  0.14895516  0.013166002  0.25616196  0.15700272
## prop_idosos    0.1495203 -0.02397313 -0.017719723 -0.49611961 -0.01201888
## natalidade    -0.1977676 -0.03611589 -0.031040147  0.20262777  0.04051899
## gini_renda_pc -0.1241123  0.13594528  0.009298058  0.27049915  0.16009635
## idh            1.0000000  0.84545393  0.602394569  0.34547952  0.35647922
## renda          0.8454539  1.00000000  0.579609912  0.53256715  0.32436919
## ipdm           0.6023946  0.57960991  1.000000000  0.27219510  0.47394515
## log_pop        0.3454795  0.53256715  0.272195103  1.00000000  0.05392605
## log_pib        0.3564792  0.32436919  0.473945147  0.05392605  1.00000000
## log_renda      0.8819643  0.97809377  0.585597073  0.49389961  0.33696129
##                  log_renda
## razao_dep     -0.313599430
## gini           0.102427649
## prop_idosos    0.006711298
## natalidade    -0.064555383
## gini_renda_pc  0.089240883
## idh            0.881964341
## renda          0.978093770
## ipdm           0.585597073
## log_pop        0.493899611
## log_pib        0.336961292
## log_renda      1.000000000

;;; Escrever algo

Pair plot

ggpairs(df[, -c(2,3)])

Após observar o pair plot, percebemos que a variável gini parece não ter uma relação linear clara com a variável resposta. Vamos analisar mais de perto essa relação.

# Gráfico de dispersão entre gini e razão de dependência
ggplot(df, aes(x = gini, y = razao_dep)) +
  geom_point() +
  labs(title = "Relação entre Gini e Razão de Dependência",
       x = "Índice de Gini",
       y = "Razão de Dependência") +
  theme_minimal()

Como podemos ver, a relação entre o índice de Gini e a razão de dependência não é linear. Então vamos utilizar a variável ipdm, que é o Índice de Desempenho Municipal, para ver se há uma relação mais clara.

# Gráfico de dispersão entre gini_renda_pc e razão de dependência
ggplot(df, aes(x = ipdm, y = razao_dep)) +
  geom_point() +
  labs(       x = "Índice de Desempenho Municipal",
       y = "Razão de Dependência") +
  theme_minimal()

Vamos utilizar a variável ipdm como uma covariável no modelo, pois ela parece ter uma relação mais clara com a razão de dependência.

Ao compararmos os gráficos de dispersão, observamos que a variável log_renda apresenta uma relação mais clara e consistente com a razão de dependência do que log_pib.

# Gráfico de dispersão entre log_pib e razão de dependência
ggplot(df, aes(x = log_pib, y = razao_dep)) +
  geom_point() +
  labs(title = "Razão de Dependência vs. log(PIB per Capita)",
       x = "log(PIB per Capita)",
       y = "Razão de Dependência") +
  theme_minimal()

# Gráfico de dispersão entre log_renda e razão de dependência
ggplot(df, aes(x = log_renda, y = razao_dep)) +
  geom_point() +
  labs(title = "Razão de Dependência vs. log(Renda Média Domiciliar per Capita)",
       x = "log(Renda Média Domiciliar per Capita)",
       y = "Razão de Dependência") +
  theme_minimal()

Ajuste do Modelo de Regressão Linear Múltipla

Vamos ajustar um modelo de regressão linear múltipla utilizando as variáveis transformadas e as covariáveis selecionadas.

ajuste <- lm(razao_dep ~ log_pop  + prop_idosos + natalidade + log_renda + ipdm, data = df)
summary(ajuste)
## 
## Call:
## lm(formula = razao_dep ~ log_pop + prop_idosos + natalidade + 
##     log_renda + ipdm, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.9462 -1.1939 -0.0454  1.2188  6.6161 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 52.00975    2.79483  18.609  < 2e-16 ***
## log_pop     -0.36709    0.11788  -3.114  0.00198 ** 
## prop_idosos  0.97567    0.05329  18.307  < 2e-16 ***
## natalidade   0.44501    0.05366   8.293 1.77e-15 ***
## log_renda   -2.21467    0.56112  -3.947 9.38e-05 ***
## ipdm        -6.29087    2.18856  -2.874  0.00427 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.856 on 393 degrees of freedom
## Multiple R-squared:  0.6408, Adjusted R-squared:  0.6363 
## F-statistic: 140.2 on 5 and 393 DF,  p-value: < 2.2e-16

;;; explicar o summary

Diagnóstico do Ajuste

resid_panel(ajuste, plots = c("resid", "qq", "ls", "cookd"), qqbands = TRUE, nrow = 2)

indica problemas de heterocedasticidade e leve fuga da normal

ncvTest(ajuste)
## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 4.131307, Df = 1, p = 0.042097
shapiro.test(rstudent(ajuste))
## 
##  Shapiro-Wilk normality test
## 
## data:  rstudent(ajuste)
## W = 0.99443, p-value = 0.1561
vif(ajuste)
##     log_pop prop_idosos  natalidade   log_renda        ipdm 
##    1.981898    1.905244    1.379882    2.063200    1.526648
boxcox_resultado <- boxcox(ajuste)

max_likelihood_index <- which.max(boxcox_resultado$y)
lambda_ideal <- boxcox_resultado$x[max_likelihood_index]


max_likelihood_index
## [1] 65
lambda_ideal
## [1] 0.5858586

Como 1 está no intervalo de confiança não vamos fazer nenhuma transformação.

new_data <- data.frame(log_pop = log(100000), log_renda = log(500), ipdm = 0.85, prop_idosos = 15, natalidade = 12)
predict(ajuste, newdata = new_data, interval = "confidence") 
##        fit      lwr      upr
## 1 48.64809 47.68594 49.61024
predict(ajuste, newdata = new_data, interval = "prediction")
##        fit      lwr      upr
## 1 48.64809 44.87392 52.42226