1 Análise Exploratória

Antes de iniciar uma análise de regressão — seja com variáveis quantitativas, qualitativas ou ambas — é fundamental compreender as características do conjunto de dados. Para isso, recomenda-se realizar uma análise exploratória preliminar.

Essa etapa tem como objetivo investigar o comportamento dos dados e verificar a adequação do uso de métodos paramétricos, que são técnicas estatísticas baseadas em pressupostos sobre a distribuição dos dados, geralmente assumindo uma distribuição normal. Caso essas premissas não sejam atendidas, é necessário recorrer a métodos não paramétricos, os quais não dependem de suposições rígidas sobre a distribuição e são mais apropriados para dados com distribuições desconhecidas, assimétricas ou que contenham outliers.

1.1 Importar conjunto de dados

Neste exercício, vamos utilizar um conjunto de dados para analisar a taxa de mortalidade infantil em uma amostra com 64 países em 1980.

library(readxl)

mortalidade_infantil <- read_excel("D:/Documentos/Fabio/OneDrive/Documentos/Universidade/UFSC/Disciplinas/Análise de Dados para RI/Exercicios_ADRI/motalidade infantil.xlsx")

print(mortalidade_infantil)
## # A tibble: 64 × 5
##       MI   TAF PNBpc   TFT Status    
##    <dbl> <dbl> <dbl> <dbl> <chr>     
##  1    12    79  4430  1.69 Developed 
##  2    12    81  4240  1.8  Developed 
##  3    24    93  1730  3.5  Developed 
##  4    27    63 19830  5.23 Developed 
##  5    28    95  4370  2.86 Developed 
##  6    37    88  1730  3.46 Developed 
##  7    41    66  1620  3.91 Developed 
##  8    47    85  3630  4.1  Developed 
##  9    52    83   270  3.25 Developing
## 10    55    55   290  2.36 Developing
## # ℹ 54 more rows

Onde,

\(MI\) é a taxa de mortalidade infantil (número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos);

\(TAF\) é a taxa de alfabetização feminina (em %);

\(PNBpc\) é Produto Nacional Bruto per capita em 1980;

\(TFT\) é a taxa de fecundidade total;

\(Stats\) se refere ao nível, de desenvolvimento do país.

1.2 Rotular as variáveis

Em conjuntos de dados complexos, a codificação de variáveis é uma etapa crucial, especialmente quando se trabalha com análise estatística. Muitos softwares estatísticos não conseguem lidar com variáveis categóricas em seu formato original (como texto). Um exemplo são os modelos de regressão, que exigem variáveis numéricas. A codificação permite que essas variáveis possam ser utilizadas adequadamente nesses modelos.

No entanto, mesmo após a codificação, é perfeitamente possível — e muitas vezes recomendável — rotular as variáveis, ou seja, associar os códigos numéricos aos seus significados originais. Essa prática facilita a compreensão dos dados, reduz o risco de interpretações incorretas, e também contribui para a visualização, documentação e rastreabilidade das informações.

No R, é possível rotular variáveis em um conjunto de dados utilizando o pacote {Hmisc}.

library(Hmisc)

label(mortalidade_infantil$MI) <- "mortalidade infantil: número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos."
label(mortalidade_infantil$TAF) <- "taxa de alfabetização feminina (em %)."
label(mortalidade_infantil$PNBpc) <- "PNB per capita em 1980."
label(mortalidade_infantil$TFT) <- "taxa de fecundidade total, 1980-1985: número médio de filhos por mulher, com base em taxas de fecundidade
segundo a idade, em determinado ano."

describe(mortalidade_infantil)
## mortalidade_infantil 
## 
##  5  Variables      64  Observations
## --------------------------------------------------------------------------------
## MI : mortalidade infantil: número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos 
##        n  missing distinct     Info     Mean  pMedian      Gmd      .05 
##       64        0       57        1    141.5    139.5    87.41    27.15 
##      .10      .25      .50      .75      .90      .95 
##    42.80    82.00   138.50   192.50   240.70   267.95 
## 
## lowest :  12  24  27  28  37, highest: 246 262 269 287 312
## --------------------------------------------------------------------------------
## TAF : taxa de alfabetização feminina (em %) 
##        n  missing distinct     Info     Mean  pMedian      Gmd      .05 
##       64        0       44    0.999    51.19     51.5    30.14    12.60 
##      .10      .25      .50      .75      .90      .95 
##    19.00    29.00    48.00    77.25    86.40    88.00 
## 
## lowest :  9 11 12 16 17, highest: 85 87 88 93 95
## --------------------------------------------------------------------------------
## PNBpc : PNB per capita em 1980 
##        n  missing distinct     Info     Mean  pMedian      Gmd      .05 
##       64        0       52        1     1401      820     1750    191.5 
##      .10      .25      .50      .75      .90      .95 
##    223.0    300.0    620.0   1317.5   2741.0   4350.5 
## 
## lowest :   120   130   140   190   200, highest:  4240  4370  4430  8640 19830
## --------------------------------------------------------------------------------
## TFT : taxa de fecundidade total, 1980-1985: número médio de filhos por mulher, com base em taxas de fecundidade
## segundo a idade, em determinado ano 
##        n  missing distinct     Info     Mean  pMedian      Gmd      .05 
##       64        0       49    0.999     5.55    5.625    1.694    2.918 
##      .10      .25      .50      .75      .90      .95 
##    3.506    4.607    6.040    6.615    7.149    7.268 
## 
## lowest : 1.69 1.8  2.36 2.86 3.25, highest: 7.2  7.28 7.41 8.12 8.49
## --------------------------------------------------------------------------------
## Status 
##        n  missing distinct 
##       64        0        2 
##                                 
## Value       Developed Developing
## Frequency          15         49
## Proportion      0.234      0.766
## --------------------------------------------------------------------------------

Observe que a função describe fornece as estatísticas descritivas para todas as variáveis do conjunto de dados. Trata-se de uma primeira aproximação da natureza dos dados, permitindo uma visão geral de suas principais características.

1.3 Conferir a estrutura do conjunto dados

Outra etapa relevante é verificar se existem valores ausentes (missing) no conjunto de dados. Dados ausentes podem comprometer a qualidade, validade e interpretabilidade dos resultados, pois reduzem a precisão e podem introduzir viés nas análises. Além disso, alguns algoritmos de softwares estatísticos não aceitam dados ausentes, o que pode impedir a execução de determinados modelos.

Para detectar visualmente dados ausentes em um conjunto de dados, pode-se utilizar a função missmap do pacote {Amelia}.

library(Amelia)

missmap(mortalidade_infantil)

Neste exemplo, o conjunto de dados não apresenta dados ausentes.

1.4 Explorar dados com ggplo2

Outra forma de analisar as principais características do conjunto de dados é por meio de recursos gráficos.

Boxplots e histogramas, por exemplo, são úteis para examinar a distribuição dos dados, revelando ao pesquisador assimetrias, multimodalidade, curtose, além da presença de zeros ou dados ausentes.

library(ggplot2)
library(dplyr)

mortalidade_infantil %>%
  ggplot(aes(x = PNBpc)) + 
  geom_histogram(aes(y = ..density..), bins = 20, fill = "grey", color = "black", alpha = 0.5) + 
  stat_function(fun = dnorm, args = list(mean = mean(mortalidade_infantil$PNBpc), sd = sd(mortalidade_infantil$PNBpc)), 
                color = "black", linewidth = 0.5) +
  labs(title = "Histograma do PNB per capita com Curva Normal", x = "PNBpc", y = "Densidade") +
  theme_minimal()

library(ggplot2)

mortalidade_infantil %>%
  ggplot(aes(x = log(PNBpc))) + 
  geom_histogram(aes(y = ..density..), bins = 20, fill = "gray", color = "black", alpha = 0.5) + 
  stat_function(fun = dnorm, args = list(mean = mean(log(mortalidade_infantil$PNBpc)), sd = sd(log(mortalidade_infantil$PNBpc))), 
                color = "black", linewidth = 0.5) +
  labs(title = "Histograma do ln PNB per capita com Curva Normal", x = "PNBpc", y = "Densidade") +
  theme_minimal()

library(ggplot2)

mortalidade_infantil %>%
  ggplot(aes(x = MI)) + 
  geom_histogram(aes(y = ..density..), bins = 20, fill = "grey", color = "black", alpha = 0.5) + 
  stat_function(fun = dnorm, args = list(mean = mean(mortalidade_infantil$MI), sd = sd(mortalidade_infantil$MI)), 
                color = "black", linewidth = 0.5) +
  labs(title = "Histograma da Taxa de Mortalidade Infantil com Curva Normal", x = "PNBpc", y = "Densidade") +
  theme_minimal()

Avaliar a distribuição é fundamental para a escolha dos métodos estatísticos mais adequados, sejam eles paramétricos (que assumem distribuição normal) ou não paramétricos (mais flexíveis quanto a suposições).

Gráficos bivariados ou multivariados — como dispersões com cores e tamanhos variáveis, facetas e gráficos de linha — ajudam a identificar correlações, interações, tendências ao longo do tempo e associações entre grupos.

Gráfico de disperssão

library(ggplot2)

mortalidade_infantil %>%
  ggplot() +
  geom_point(aes(x = PNBpc, y = MI)) +
  theme_minimal()

Gráfico de disperssão segmentado por categoria

mortalidade_infantil %>%
  ggplot() +
  geom_point(aes(x = PNBpc, y = MI, color = Status)) +
  theme_minimal()

Gráfico de disperssão com facetas

mortalidade_infantil %>%
  ggplot() +
  geom_point(aes(x = PNBpc, y = MI, color = Status)) +
  facet_wrap(~ Status) +
  theme_minimal()

A importância da análise exploratória está justamente em identificar padrões inesperados, o que possibilita levantar novas perguntas de pesquisa ou hipóteses que, frequentemente, passam despercebidas em análises puramente numéricas.

2 Análise de regressão com duas variáveis

[inserir explicação]

2.1 Modelo de regressão linear sem transformação

modelo_linear <- lm(MI ~ PNBpc, mortalidade_infantil)

summary(modelo_linear)
## 
## Call:
## lm(formula = MI ~ PNBpc, data = mortalidade_infantil)
## 
## Residuals:
## mortalidade infantil: número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos. 
##      Min       1Q   Median       3Q      Max 
## -113.764  -53.111   -6.685   48.064  157.758 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 157.424441   9.845583  15.989  < 2e-16 ***
## PNBpc        -0.011364   0.003233  -3.516 0.000826 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 69.93 on 62 degrees of freedom
## Multiple R-squared:  0.1662, Adjusted R-squared:  0.1528 
## F-statistic: 12.36 on 1 and 62 DF,  p-value: 0.0008262

Interpretação inicial

[inserir a interpretação]

2.2 Modelo de regressão recíproco

Aplicar a transformação recíproca à variável PNBpc

mortalidade_infantil <- mortalidade_infantil %>%
  mutate(PNBreci = 1/PNBpc)

Gerar um gráfico de disperssão

mortalidade_infantil %>%
  ggplot() +
  geom_point(aes(x = PNBreci, y = MI)) +
  theme_minimal()

Rodar o modelo de regressão linear

modelo_recíproco <- lm(MI ~ PNBreci, mortalidade_infantil)

summary(modelo_recíproco)
## 
## Call:
## lm(formula = MI ~ PNBreci, data = mortalidade_infantil)
## 
## Residuals:
## mortalidade infantil: número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos. 
##      Min       1Q   Median       3Q      Max 
## -130.806  -36.410    2.871   31.686  132.801 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    81.79      10.83   7.551 2.38e-10 ***
## PNBreci     27273.17    3760.00   7.254 7.82e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 56.33 on 62 degrees of freedom
## Multiple R-squared:  0.4591, Adjusted R-squared:  0.4503 
## F-statistic: 52.61 on 1 and 62 DF,  p-value: 7.821e-10

Apresentando o resultado da análise de regressão

A partir do modelo recíproco, obtemos os seguintes resultados da regressão:

Na medida em que o PNB per capita aumenta indefinidamente, a mortalidade infantil aproxima-se de seu valor assintótico de cerca de 82 óbitos por mil.

Repare que que o valor positivo do coeficiente de (\(1/PNB_{PC}\)) implica que a taxa de variação de mortalidade infantil em relação ao PNB per capita seja negativa. Por quê? O coeficiente angular de uma transformação recíproca é: \(dY/dX = -\beta_{2}(1/X^{2})\), implicando que, se \(\beta_{2}\) for positivo, o coeficiente angular é sempre negativo; e se \(\beta_{2}\) for negativo, o coeficiente angular será sempre positivo.

Gráfico de dispersão com linha de regressão

mortalidade_infantil %>%
  ggplot(aes(x = PNBreci, y = MI)) +
  geom_point(color = "black", alpha = 0.6) +
  geom_smooth(method = "lm", color = "gray", se = FALSE) +
  labs(
    title = "Relação entre Mortalidade Infantil e PNB pc (Recíproco)",
    x = "1/PNB pc",
    y = "Mortalidade Infatil (óbitos por 1.000 nascidos vivos)"
  ) +
  theme_minimal()

Avaliando os resultados da análise de regressão

Qual é a “qualidade” do modelo?

  1. Os sinais dos coeficientes estimados estão de acordo como as expectativas teóricas ou resultados de estudos anteriores?

SIM. Teoricamente, espera-se que uma economia mais rica tenha menores taxas de mortalidade infantil, devido a melhor acesso a cuidados de saúde, saneamento e educação.

O coeficiente estimado de PNBreci (Produto Nacional Bruto per capita recíproco) é positivo, o que sugere que um aumento no PNB per capita está associado a uma queda da taxa de mortalidade infantil.

Portanto, os sinais dos coeficientes estimados estão de acordo com as expectativas teóricas.

  1. Os coeficientes são estatisticamente significantes?

SIM. Sim, ambos os coeficientes (intercepto e PNBreci) apresentam p-valores extremamente baixos (p < 0.001), indicando que são altamente significantes estatisticamente.

Isso significa que há uma forte evidência contra a hipótese nula de que os coeficientes são iguais a zero.

  1. Até que o ponto o modelo de regressão explica as variações do nosso exemplo?

Aproximadamente 46% da variação da taxa de mortalidade infantil pode ser explicada pela variável PNBreci.

Isso sugere que, apesar de haver uma relação, há outros fatores importantes que não foram incluídos no modelo e que influênciam a mortalidade infantil.

  1. O modelo satisfaz as hipóteses do modelo clássico de regressão linear normal?

Para avaliar se o modelo satisfaz as hipóteses do modelo clássico de regressão linear, são necessários testes adicionais.

2.2.1 Testando as hipóteses do modelo

2.2.1.1 Premissa 1: Linearidade nos parâmetros

A expressão regressão “linear” significará sempre uma regressão linear nos parâmetros, ou seja, os parâmetros são elevados apenas à primeira potência.

2.2.1.2 Premissa 2: Independência entre as variáveis X e o termo do Erro

Isso depende do seu desenho amostral. Se os dados foram coletados de maneira independente, essa hipótese é satisfeita.

2.2.1.3 Premissa 3: Termo do erro igual a zero

2.2.1.3.1 Teste t
dados_residuos <- data.frame(valores_ajustados = modelo_recíproco$fitted.values,
                             residuos = modelo_recíproco$residuals)

mean(dados_residuos$residuos)
## [1] -1.776357e-15
t.test(dados_residuos$residuos, mu = 0)
## 
##  One Sample t-test
## 
## data:  dados_residuos$residuos
## t = -2.543e-16, df = 63, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -13.95874  13.95874
## sample estimates:
##     mean of x 
## -1.776357e-15

2.2.1.4 Premissa 4: Homosceadasticidade

Gráfico de resíduos versus valores ajustados

dados_residuos %>%
  ggplot() +
  geom_point(aes(x = valores_ajustados, y = residuos)) +
  geom_hline(yintercept = 0,
             linetype = "dashed",
             color = "red") +
  labs(title = "Gráfico de Resíduos vs Valores Ajustados",
       x = "Valores Ajustados",
       y = "Resíduos")+
  theme_minimal()

dados_residuos %>%
  ggplot() +
  geom_point(aes(x = valores_ajustados, y = scale(residuos))) +
  geom_hline(yintercept = 0,
             linetype = "dashed",
             color = "red") +
  labs(title = "Gráfico de Resíduos vs Valores Ajustados",
       x = "Valores Ajustados",
       y = "Resíduos")+
  theme_minimal()

2.2.1.4.1 Teste de Breusch-Pagan
library(lmtest)

bptest(modelo_recíproco)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_recíproco
## BP = 5.0618, df = 1, p-value = 0.02446

Com base no resultado do teste de Breusch-Pagan, podemos interpretar o seguinte:

O p-valor é 0.02446. Como o p-valor é menor que 0.05, rejeitamos a hipótese nula ((H_0)) de homocedasticidade. Isso sugere que há evidências de heterocedasticidade nos resíduos do modelo.

2.2.1.4.2 Teste White (ou Breush-Pagan Padronizado)
bptest(modelo_recíproco, ~ fitted(modelo_recíproco) + I(fitted(modelo_recíproco)^2))
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_recíproco
## BP = 5.4476, df = 2, p-value = 0.06562

O p-valor é 0.06562. Como o p-valor é maior que 0.05, não rejeitamos a hipótese nula ((H_0)).

Isso significa que não há evidências estatísticas suficientes para afirmar que existe heterocedasticidade no modelo. Ou seja, os resíduos não apresentam variação significativa na sua dispersão, indicando homocedasticidade.

O que fazer com esse resultado? Como não encontramos um problema de heterocedasticidade com o teste de White, podemos considerar que a variância dos resíduos é aproximadamente constante. Isso é uma boa notícia, pois não há necessidade de ajustes como erros padrão robustos, modelos ponderados (WLS) ou transformações das variáveis.

2.2.1.5 Premissa 5: Ausência de autocorrelação do termo do erro

Neste exemplo, como os dados em análise são corte transversal, a verificação da autocorrelação serial não é necessária, pois está associada a dados temporais. [Inserir o teste para verificar a existência de autocorrelação]

2.2.1.6 Premissa 6: Número de observações maior que o número de parâmetros

n_obs <- nrow(mortalidade_infantil) # Conta o número de observações
n_par <- length(coef(modelo_recíproco)) # Conta o número de parâmetros da equação de regressão

if (n_obs > n_par) {
  print("O número de observações é maior que o número de parâmetros.")
} else {
  print("Cuidado! O modelo pode estar sobreajustado")
}
## [1] "O número de observações é maior que o número de parâmetros."

2.2.1.7 Premissa 7: Variabilidade dos valores X

if (var(mortalidade_infantil$PNBreci) > 0) {
  print("A variável independente possui disperssão suficiente.")
} else {
  print("Cuidado! A variável independente não possui disperssão suficiente.")
}
## [1] "A variável independente possui disperssão suficiente."

2.2.1.8 Premissa 8: Normalidade do termo de erro

Histograma dos resíduos

dados_residuos %>%
  ggplot(aes(x = residuos)) +
    geom_histogram(binwidth = 10, fill = "grey", color = "black", alpha = 0.5) +
    labs(title = "Histograma de Resíduos", x = "Resíduos", y = "Frequência") +
    theme_minimal()

Gráfico Q-Q dos resíduos

dados_residuos %>%
  ggplot(aes(sample = residuos)) +
  stat_qq() +
  stat_qq_line(color = "red") +
  labs(title = "Gráfico QQ dos Resíduos", x = "Quantis Teóricos", y = "Quantis dos Resíduos") +
  theme_minimal()

2.2.1.8.1 Testes de Normalidade dos resíduos
2.2.1.8.1.1 Shapiro-Wilk
library(stats)
shapiro_recíproco <- shapiro.test(dados_residuos$residuos)
print(shapiro_recíproco)
## 
##  Shapiro-Wilk normality test
## 
## data:  dados_residuos$residuos
## W = 0.98692, p-value = 0.7341

A estatística W tem valor 0.98692. Esse valor próximo de 1 sugere que os resíduos têm um comportamento próximo ao de uma distribuição normal.

O p-valor é 0.7341, bastante alto.

Como o p-valor é maior que 0.05, não rejeitamos (\(H_{0}\): os resíduos seguem uma distribuição normal).

Isso significa que não há evidências estatísticas de que os resíduos violem a normalidade, ou seja, podemos considerá-los aproximadamente normais.

2.2.1.8.1.2 Anderson-Darling
library(nortest)

ad_recíproco <- ad.test(dados_residuos$residuos)
print(ad_recíproco)
## 
##  Anderson-Darling normality test
## 
## data:  dados_residuos$residuos
## A = 0.31081, p-value = 0.5446

A estatística A tem valor 0.31081. Valores menores sugerem que os resíduos estão mais próximos de uma distribuição normal. O p-valor é 0.5446, relativamente alto. Como o p-valor é maior que 0.05, não rejeitamos (\(H_{0}\): Os resíduos seguem uma distribuição normal). Isso significa que não há evidências estatísticas suficientes para afirmar que os resíduos violam a normalidade, ou seja, podemos considerá-los aproximadamente normais.

Ambos os testes reforçam a conclusão de que os resíduos não apresentam desvios significativos de normalidade.

2.2.1.8.1.3 Jarque-Bera
library(tseries)

JB_recíproco <- jarque.bera.test(dados_residuos$residuos)
print(JB_recíproco)
## 
##  Jarque Bera Test
## 
## data:  dados_residuos$residuos
## X-squared = 0.33394, df = 2, p-value = 0.8462

A estatística X² tem valor 0.33394. Os graus de liberdade (df) são 2. O p-valor é 0.8462, maior que 0.05. Como o p-valor é alto (> 0.05), não rejeitamos (H_0: Os resíduos seguem uma distribuição normal.).

Isso significa que não há evidências estatísticas para afirmar que os resíduos violam a normalidade, ou seja, podemos considerá-los aproximadamente normais.

O Jarque-Bera reforça a ideia de que os resíduos são normais do ponto de vista da assimetria e curtose Como a normalidade parece estar atendida, não necessidade de ajustes no modelo.

3 Análise de regressão múltipla

3.1 Modelo de regressão múltipla

Especificar o modelo de regressão

modelo_linear_multi <- lm(MI ~ PNBpc + TAF, mortalidade_infantil)

Visualizar o resumo do modelo linear

summary(modelo_linear_multi)
## 
## Call:
## lm(formula = MI ~ PNBpc + TAF, data = mortalidade_infantil)
## 
## Residuals:
## mortalidade infantil: número anual de óbitos de crianças menores de 5 anos por 1.000 nascidos vivos. 
##     Min      1Q  Median      3Q     Max 
## -84.267 -24.363   0.709  19.455  96.803 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 263.641586  11.593179  22.741  < 2e-16 ***
## PNBpc        -0.005647   0.002003  -2.819  0.00649 ** 
## TAF          -2.231586   0.209947 -10.629 1.64e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 41.75 on 61 degrees of freedom
## Multiple R-squared:  0.7077, Adjusted R-squared:  0.6981 
## F-statistic: 73.83 on 2 and 61 DF,  p-value: < 2.2e-16

3.1.1 Testando as hipóteses do modelo

3.1.1.1 Premissa 1: Linearidade nos parâmetros

A expressão regressão “linear” significará sempre uma regressão linear nos parâmetros, ou seja, os parâmetros são elevados apenas à primeira potência.

3.1.1.2 Premissa 2: Independência entre as variáveis X e o termo do Erro

Isso depende do seu desenho amostral. Se os dados foram coletados de maneira independente, essa hipótese é satisfeita.

3.1.1.3 Premissa 3: Termo do erro igual a zero

dados_residuos_multi <- data.frame(valores_ajustados = modelo_linear_multi$fitted.values, residuos = modelo_linear_multi$residuals)

Calcular a média do termo do erro

mean(dados_residuos_multi$residuos)
## [1] 1.969779e-15

Comparar a média do termo do erro com um valor limite

if (abs(mean(dados_residuos_multi$residuos)) < 0.001) {
  print("O termo do erro está próximo de zero.")
} else {
  print("Cuidado! O termos do erro não está próximo de zero.")
}
## [1] "O termo do erro está próximo de zero."
3.1.1.3.1 Teste t para média igual a zero
t.test(dados_residuos_multi$residuos, mu = 0)
## 
##  One Sample t-test
## 
## data:  dados_residuos_multi$residuos
## t = 3.836e-16, df = 63, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -10.26143  10.26143
## sample estimates:
##    mean of x 
## 1.969779e-15

O teste t de uma amostra verifica se a média de uma variável (no caso, os resíduos do modelo) é estatisticamente diferente de zero.

Resultados do teste: O p-valor é 1, que é extremamente alto. Como o p-valor > 0.05, não rejeitamos a hipótese nula (H_0: A média da variável resíduos é igual a zero). Isso significa que não há evidências estatísticas para afirmar que a média dos resíduos é diferente de zero—ou seja, os resíduos podem ser considerados com média igual a zero, o que é desejável na regressão linear clássica. Portanto, a premissa de que os resíduos têm média zero parece estar atendida.

3.1.1.4 Premissa 4: Homosceadasticidade

Gráfico de resíduos versus valores ajustados

dados_residuos_multi %>%
  ggplot() +
  geom_point(aes(x = valores_ajustados, y = scale(residuos))) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "red") +
  labs(title = "Gráfico de Resíduos vs Valores Ajustados", x = "Valores Ajustados", y = "Resíduos")+
  theme_minimal()

3.1.1.4.1 Teste de Breusch-Pagan
bptest(modelo_linear_multi)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_linear_multi
## BP = 1.5916, df = 2, p-value = 0.4512

Com base no resultado do teste de Breusch-Pagan, podemos interpretar o seguinte: O p-valor é 0.4512. Como o p-valor é maior que 0.05, não rejeitamos a hipótese nula ((H_0: Os resíduos têm variância constante (homocedasticidade)). Isso sugere que não há evidências de heterocedasticidade nos resíduos do modelo. Portanto, o modelo parece satisfazer a premissa de variância constante dos erros.

3.1.1.4.2 Teste White (ou Breush-Pagan Padronizado)
bptest(modelo_linear_multi, ~ fitted(modelo_linear_multi) + I(fitted(modelo_linear_multi)^2))
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_linear_multi
## BP = 2.2386, df = 2, p-value = 0.3265

O p-valor é 0.3265. Como o p-valor é maior que 0.05, não rejeitamos a hipótese nula ((H_0)). Isso significa que não há evidências estatísticas suficientes para afirmar que existe heterocedasticidade no modelo. Ou seja, os resíduos não apresentam variação significativa na sua dispersão, indicando homocedasticidade.

3.1.1.5 Premissa 5: Ausência de autocorrelação do termo do erro

Neste exemplo, como os dados em análise são corte transversal, a verificação da autocorrelação serial não é necessária, pois está associada a dados temporais.

[inser qual é o teste apropriado para verficar autocorrelação]

3.1.1.6 Premissa 6: Número de observações maior que o número de parâmetros

n_obs <- nrow(mortalidade_infantil) # Conta o número de observações
n_par <- length(coef(modelo_recíproco)) # Conta o número de parâmetros da equação de regressão

if (n_obs > n_par) {
  print("O número de observações é maior que o número de parâmetros.")
} else {
  print("Cuidado! O modelo pode estar sobreajustado")
}
## [1] "O número de observações é maior que o número de parâmetros."

3.1.1.7 Premissa 7: Variabilidade dos valores X

if (var(mortalidade_infantil$PNBpc) > 0) {
  print("A variável independente possui disperssão suficiente.")
} else {
  print("Cuidado! A variável independente não possui disperssão suficiente.")
}
## [1] "A variável independente possui disperssão suficiente."
if (var(mortalidade_infantil$TAF) > 0) {
  print("A variável independente possui disperssão suficiente.")
} else {
  print("Cuidado! A variável independente não possui disperssão suficiente.")
}
## [1] "A variável independente possui disperssão suficiente."

3.1.1.8 Premissa 8: Normalidade do termo de erro

Histograma dos resíduos

dados_residuos_multi %>%
  ggplot(aes(x = residuos)) +
  geom_histogram(binwidth = 10, fill = "blue", color = "black", alpha = 0.7) +
  labs(title = "Histograma de Resíduos", x = "Resíduos", y = "Frequência") +
  theme_minimal()

3.1.1.8.1 Testes de normalidade dos resíduos
3.1.1.8.1.1 Shapiro-Wilk
shapiro_multi <- shapiro.test(dados_residuos_multi$residuos)
print(shapiro_multi)
## 
##  Shapiro-Wilk normality test
## 
## data:  dados_residuos_multi$residuos
## W = 0.98222, p-value = 0.4845
3.1.1.8.1.2 Anderson-Darling
ad_multi <- ad.test(dados_residuos_multi$residuos)
print(ad_multi)
## 
##  Anderson-Darling normality test
## 
## data:  dados_residuos_multi$residuos
## A = 0.32986, p-value = 0.5088
3.1.1.8.1.3 Jarque-Bera
JB_multi <- jarque.bera.test(dados_residuos_multi$residuos)
print(JB_multi)
## 
##  Jarque Bera Test
## 
## data:  dados_residuos_multi$residuos
## X-squared = 0.5594, df = 2, p-value = 0.756

3.1.1.9 Premissa 9: ausência de multicolineariedade

Calcular o Valor de inflação de variância

library(car)

vif(modelo_linear_multi)
##    PNBpc      TAF 
## 1.077712 1.077712

Como os valores de VIF estão próximos de 1, não há preocupação com multicolinearidade entre PNBpc e TAF. Isso indica que essas variáveis são estatisticamente independentes e não afetam a estabilidade dos coeficientes da regressão.

3.1.1.10 Premissa 10: ausência de viés de especificação

3.1.1.10.1 Teste Ramsey RESET
resettest(modelo_linear_multi)
## 
##  RESET test
## 
## data:  modelo_linear_multi
## RESET = 1.5786, df1 = 2, df2 = 59, p-value = 0.2149

Estatístico RESET = 1.5786; Graus de liberdade: df1 = 2, df2 = 59; p-valor = 0.2149. Como o p-valor é maior que 0.05, não rejeitamos (H_0: O modelo está corretamente especificado (não há erro de especificação). Isso significa que não há evidências estatísticas de erro na especificação do modelo, ou seja, a forma funcional escolhida parece ser adequada.