Introdução

Este relatório apresenta a análise de dados atmosféricos, focando na temperatura do ar e umidade relativa para os anos de 2014 e 2015. Ele foi desenvolvido como parte da disciplina de Estatística Aplicada à Análise de Risco, ministrada na primeira semana pelo professor Rafael. Os dados utilizados foram fornecidos no formato Excel e o objetivo é realizar uma análise completa, incluindo estatísticas descritivas, gráficos de séries temporais, boxplots, testes de normalidade, correlações e regressões lineares.

# Carregar pacotes
library(readxl)
library(ggplot2)
library(dplyr)
library(ggpubr)
library(psych)
library(nortest)
library(Hmisc)
library(qqplotr)
library(ggcorrplot)
library(cowplot)

# definir dirtório de trabalho
setwd("C:/Users/carva/Downloads/Relatorio_Rafael")

df <- read_excel("Dados.xlsx")
head(x = df, 5)
## # A tibble: 5 × 6
##   data_2014           Tar_2014 UR_2014 data_2015           Tar_2015 UR_2015
##   <dttm>                 <dbl>   <dbl> <dttm>                 <dbl>   <dbl>
## 1 2014-01-01 00:00:00     25.4    81.8 2015-01-01 00:00:00     26.4    79.5
## 2 2014-01-02 00:00:00     26.1    79.0 2015-01-02 00:00:00     25.1    84.4
## 3 2014-01-03 00:00:00     25.2    82.7 2015-01-03 00:00:00     26.9    81.3
## 4 2014-01-04 00:00:00     23.6    85.9 2015-01-04 00:00:00     25.4    81.6
## 5 2014-01-05 00:00:00     24.2    84.5 2015-01-05 00:00:00     25.1    82
tail(x = df,5)
## # A tibble: 5 × 6
##   data_2014           Tar_2014 UR_2014 data_2015           Tar_2015 UR_2015
##   <dttm>                 <dbl>   <dbl> <dttm>                 <dbl>   <dbl>
## 1 2014-12-27 00:00:00     26.7    78.4 2015-12-27 00:00:00     25.7    81.2
## 2 2014-12-28 00:00:00     27.0    76.8 2015-12-28 00:00:00     26.8    76.4
## 3 2014-12-29 00:00:00     25.7    83.5 2015-12-29 00:00:00     25.8    80.9
## 4 2014-12-30 00:00:00     25.0    83.1 2015-12-30 00:00:00     24.6    85  
## 5 2014-12-31 00:00:00     22.7    91.8 2015-12-31 00:00:00     26.4    79.7

Resumo Estatístico

Nesta seção, fazemos uma análise estatística descritiva das variáveis Tar_2014, UR_2014, Tar_2015 e UR_2015. Foram calculados diversos parâmetros como a média, mediana, quartis, desvio padrão, assimetria e curtose para termos uma visão completa sobre o comportamento dessas variáveis ao longo do tempo.

# Função para criar um resumo estatístico amigável e completo
create_summary <- function(data, var_name) {
  summary_data <- data %>%
    summarise(
      N = n(),
      Min = min(!!sym(var_name), na.rm = TRUE),
      Q1 = quantile(!!sym(var_name), 0.25, na.rm = TRUE),
      Mediana = median(!!sym(var_name), na.rm = TRUE),
      Media = mean(!!sym(var_name), na.rm = TRUE),
      Q3 = quantile(!!sym(var_name), 0.75, na.rm = TRUE),
      Max = max(!!sym(var_name), na.rm = TRUE),
      Desvio_Padrao = sd(!!sym(var_name), na.rm = TRUE),
      Variancia = var(!!sym(var_name), na.rm = TRUE),
      Assimetria = e1071::skewness(!!sym(var_name), na.rm = TRUE),
      Curtose = e1071::kurtosis(!!sym(var_name), na.rm = TRUE)
    )
  
  return(summary_data)
}

# Resumo estatístico para 2014
summary_tar_2014 <- create_summary(df, "Tar_2014")
summary_ur_2014 <- create_summary(df, "UR_2014")

# Resumo estatístico para 2015
summary_tar_2015 <- create_summary(df, "Tar_2015")
summary_ur_2015 <- create_summary(df, "UR_2015")

# Mostrar o resumo de forma clara
cat("\nResumo Estatístico - Temperatura (Tar) 2014:\n")
## 
## Resumo Estatístico - Temperatura (Tar) 2014:
print(summary_tar_2014)
## # A tibble: 1 × 11
##       N   Min    Q1 Mediana Media    Q3   Max Desvio_Padrao Variancia Assimetria
##   <int> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>         <dbl>     <dbl>      <dbl>
## 1   365  19.9  24.6    25.3  25.4  26.2  29.3          1.45      2.11     0.0901
## # ℹ 1 more variable: Curtose <dbl>
cat("\nResumo Estatístico - Umidade Relativa (UR) 2014:\n")
## 
## Resumo Estatístico - Umidade Relativa (UR) 2014:
print(summary_ur_2014)
## # A tibble: 1 × 11
##       N   Min    Q1 Mediana Media    Q3   Max Desvio_Padrao Variancia Assimetria
##   <int> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>         <dbl>     <dbl>      <dbl>
## 1   365  37.1  61.5    76.5  72.0  83.1  91.8          13.7      188.     -0.711
## # ℹ 1 more variable: Curtose <dbl>
cat("\nResumo Estatístico - Temperatura (Tar) 2015:\n")
## 
## Resumo Estatístico - Temperatura (Tar) 2015:
print(summary_tar_2015)
## # A tibble: 1 × 11
##       N   Min    Q1 Mediana Media    Q3   Max Desvio_Padrao Variancia Assimetria
##   <int> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>         <dbl>     <dbl>      <dbl>
## 1   365  21.5  24.9    25.8  25.9  26.8  30.2          1.56      2.42      0.417
## # ℹ 1 more variable: Curtose <dbl>
cat("\nResumo Estatístico - Umidade Relativa (UR) 2015:\n")
## 
## Resumo Estatístico - Umidade Relativa (UR) 2015:
print(summary_ur_2015)
## # A tibble: 1 × 11
##       N   Min    Q1 Mediana Media    Q3   Max Desvio_Padrao Variancia Assimetria
##   <int> <dbl> <dbl>   <dbl> <dbl> <dbl> <dbl>         <dbl>     <dbl>      <dbl>
## 1   365  34.8  61.3    74.8  70.0  81.3  90.8          14.3      203.     -0.732
## # ℹ 1 more variable: Curtose <dbl>

Este resumo permite que observemos os valores extremos e a dispersão dos dados, além de verificar se a distribuição possui alguma tendência à assimetria ou é achatada.

Gráficos de séries temporais diárias

Os gráficos de séries temporais diárias permitem observar como as variáveis de temperatura e umidade relativa variaram ao longo de 2014 e 2015. Cada ponto no gráfico representa o valor diário da variável correspondente.

# Gráficos de séries temporais diárias
temp_2014 <- ggplot(df) + 
  aes(x = data_2014, y = Tar_2014) +
  geom_line(lwd = 1.3, color = "#fc4e08", lty = 5) +
  labs(x = 'Data', y = '[°C]') +
  theme_bw()

um.rel_2014 <- ggplot(df) + 
  aes(x = data_2014, y = UR_2014) +
  geom_line(lwd = 1.3, color = "cyan", lty = 5) +
  labs(x = 'Data', y = '[%]') +
  theme_bw()

# Gráficos de séries temporais diárias
temp_2015 <- ggplot(df) + 
  aes(x = data_2015, y = Tar_2015) +
  geom_line(lwd = 1.3, color = "#fc4e08", lty = 5) +
  labs(x = 'Data', y = '[°C]') +
  theme_bw()

um.rel_2015 <- ggplot(df) + 
  aes(x = data_2015, y = UR_2015) +
  geom_line(lwd = 1.3, color = "cyan", lty = 5) +
  labs(x = 'Data', y = '[%]') +
  theme_bw()


# Layout com título (Gráficos Diários)
plot_com_titulo <- plot_grid(temp_2014, um.rel_2014, temp_2015, um.rel_2015, ncol = 1)
titulo_final <- ggdraw() + 
  draw_label("Diário", fontface = 'bold', x = 0.5, hjust = 0.5, size = 14)
plot_final <- plot_grid(titulo_final, plot_com_titulo, ncol = 1, rel_heights = c(0.1, 1))

# Exibir os gráficos
plot_final

Esses gráficos facilitam a identificação de padrões sazonais ou anomalias nos dados, permitindo uma visualização clara das mudanças ocorridas ao longo dos anos.

Boxplot de temperatura e umidade agrupado por mês

Os boxplots apresentados a seguir mostram a distribuição das variáveis de temperatura e umidade relativa, agrupadas por mês. Isso nos permite visualizar a mediana, os quartis e possíveis outliers ao longo dos diferentes meses de cada ano.

# Extrair o mês das colunas de data
df$mes_2014 <- format(df$data_2014, "%m")
df$mes_2015 <- format(df$data_2015, "%m")

# Boxplot de temperatura e umidade agrupado por mês para 2014
ggplot(df, aes(x = mes_2014, y = Tar_2014)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Boxplot de Temperatura por Mês - 2014", x = "Mês", y = "Temperatura (Tar_2014)") +
  theme_minimal()

ggplot(df, aes(x = mes_2014, y = UR_2014)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Boxplot de Umidade Relativa por Mês - 2014", x = "Mês", y = "Umidade Relativa (UR_2014)") +
  theme_minimal()

# Boxplot de temperatura e umidade agrupado por mês para 2015
ggplot(df, aes(x = mes_2015, y = Tar_2015)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Boxplot de Temperatura por Mês - 2015", x = "Mês", y = "Temperatura (Tar_2015)") +
  theme_minimal()

ggplot(df, aes(x = mes_2015, y = UR_2015)) +
  geom_boxplot(fill = "lightgreen") +
  labs(title = "Boxplot de Umidade Relativa por Mês - 2015", x = "Mês", y = "Umidade Relativa (UR_2015)") +
  theme_minimal()

Essa representação gráfica é útil para identificar variações mensais nas distribuições, bem como comparar a amplitude das variáveis entre diferentes meses.

Testes de normalidade (Shapiro-Wilk e Anderson-Darling)

Nesta seção, realizamos testes de normalidade para verificar se os dados de temperatura e umidade relativa seguem uma distribuição normal. Usamos dois testes: o Shapiro-Wilk e o Anderson-Darling.

shapiro_2014 <- lapply(df %>% select(Tar_2014, UR_2014), shapiro.test)
ad_2014 <- lapply(df %>% select(Tar_2014, UR_2014), ad.test)

shapiro_2015 <- lapply(df %>% select(Tar_2015, UR_2015), shapiro.test)
ad_2015 <- lapply(df %>% select(Tar_2015, UR_2015), ad.test)

# Função para interpretar o p-valor dos testes de normalidade
interpret_normality <- function(p_value) {
  if (p_value > 0.05) {
    return("Os dados seguem uma distribuição normal.")
  } else {
    return("Os dados não seguem uma distribuição normal.")
  }
}

# Testes de normalidade (Shapiro-Wilk e Anderson-Darling) com interpretação dos resultados
shapiro_2014 <- lapply(df %>% select(Tar_2014, UR_2014), shapiro.test)
ad_2014 <- lapply(df %>% select(Tar_2014, UR_2014), ad.test)

shapiro_2015 <- lapply(df %>% select(Tar_2015, UR_2015), shapiro.test)
ad_2015 <- lapply(df %>% select(Tar_2015, UR_2015), ad.test)

# Exibir resultados com interpretação
for (i in 1:length(shapiro_2014)) {
  cat(names(shapiro_2014)[i], "\n")
  cat("Shapiro-Wilk p-valor:", shapiro_2014[[i]]$p.value, " - ", interpret_normality(shapiro_2014[[i]]$p.value), "\n")
  cat("Anderson-Darling p-valor:", ad_2014[[i]]$p.value, " - ", interpret_normality(ad_2014[[i]]$p.value), "\n\n")
}
## Tar_2014 
## Shapiro-Wilk p-valor: 7.536687e-05  -  Os dados não seguem uma distribuição normal. 
## Anderson-Darling p-valor: 4.4925e-06  -  Os dados não seguem uma distribuição normal. 
## 
## UR_2014 
## Shapiro-Wilk p-valor: 5.799448e-13  -  Os dados não seguem uma distribuição normal. 
## Anderson-Darling p-valor: 6.272277e-24  -  Os dados não seguem uma distribuição normal.
for (i in 1:length(shapiro_2015)) {
  cat(names(shapiro_2015)[i], "\n")
  cat("Shapiro-Wilk p-valor:", shapiro_2015[[i]]$p.value, " - ", interpret_normality(shapiro_2015[[i]]$p.value), "\n")
  cat("Anderson-Darling p-valor:", ad_2015[[i]]$p.value, " - ", interpret_normality(ad_2015[[i]]$p.value), "\n\n")
}
## Tar_2015 
## Shapiro-Wilk p-valor: 0.000109139  -  Os dados não seguem uma distribuição normal. 
## Anderson-Darling p-valor: 5.32059e-06  -  Os dados não seguem uma distribuição normal. 
## 
## UR_2015 
## Shapiro-Wilk p-valor: 3.436065e-13  -  Os dados não seguem uma distribuição normal. 
## Anderson-Darling p-valor: 3.7e-24  -  Os dados não seguem uma distribuição normal.

A normalidade dos dados é um pressuposto importante para muitas análises estatísticas. Esses testes fornecem uma avaliação rigorosa sobre a aderência dos dados a uma distribuição normal.

Função para plotar QQPlot

Além dos testes de normalidade, os QQPlots fornecem uma maneira gráfica de avaliar se os dados seguem uma distribuição normal. Se os pontos no gráfico seguirem aproximadamente a linha reta, podemos concluir que os dados se aproximam de uma distribuição normal.

qq_plot <- function(data, var_name, year) {
  ggplot(data, aes(sample = !!sym(var_name))) +
    stat_qq_point(size = 2) +
    stat_qq_line(color = "red") +
    labs(title = paste("QQ Plot -", var_name, year),
         x = "Teóricos",
         y = "Amostra")
}

# QQPlot para 2014
qq_plot(df, "Tar_2014", 2014)

qq_plot(df, "UR_2014", 2014)

# QQPlot para 2015
qq_plot(df, "Tar_2015", 2015)

qq_plot(df, "UR_2015", 2015)

Estes gráficos ajudam a confirmar visualmente os resultados dos testes de normalidade.

Correlação para os dados diários

Aqui, analisamos as correlações entre as variáveis Tar e UR para ambos os anos. Além de calcular as correlações, também verificamos quais delas são estatisticamente significativas.

cor.data <- round(cor(df[c(2,3,5,6)]), 1)
cor.data
##          Tar_2014 UR_2014 Tar_2015 UR_2015
## Tar_2014      1.0    -0.6      0.4    -0.3
## UR_2014      -0.6     1.0     -0.3     0.8
## Tar_2015      0.4    -0.3      1.0    -0.6
## UR_2015      -0.3     0.8     -0.6     1.0
#Pegando apenas as correlações significativas
p.mat <- cor_pmat(df[c(2,3,5,6)])
p.mat
##              Tar_2014      UR_2014     Tar_2015      UR_2015
## Tar_2014 0.000000e+00 7.268657e-32 4.114602e-19 1.025473e-10
## UR_2014  7.268657e-32 0.000000e+00 4.926276e-08 1.045618e-69
## Tar_2015 4.114602e-19 4.926276e-08 0.000000e+00 2.682147e-35
## UR_2015  1.025473e-10 1.045618e-69 2.682147e-35 0.000000e+00
# Gráfico de correlação diário
meu.plot_diario <- ggcorrplot(cor.data, 
                              hc.order = TRUE,
                              type = "lower",
                              p.mat = p.mat,
                              sig.level = 0.05,
                              insig = "blank",
                              legend.title = "Coeficiente de \n Correlação",
                              lab = TRUE,
                              lab_size = 3,
                              method = "circle",
                              colors = c("firebrick", "white", "dodgerblue4"),
                              title = "Correlação significativa entre Variáveis Atmosféricas (Diário)",
                              ggtheme = theme_bw())

# Exibir o gráfico
meu.plot_diario

A correlação é uma medida importante para entender a relação entre temperatura e umidade relativa, permitindo identificar como essas variáveis se influenciam mutuamente ao longo do tempo.

Regressão linear

Finalmente, aplicamos um modelo de regressão linear simples para verificar a relação entre temperatura e umidade relativa. Os coeficientes de regressão e o valor de R² fornecem uma medida quantitativa da força dessa relação.

lm_2014 <- lm(UR_2014 ~ Tar_2014, data = df)
summary(lm_2014)
## 
## Call:
## lm(formula = UR_2014 ~ Tar_2014, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -32.503  -7.166   4.399   8.523  14.883 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 207.2249    10.4453   19.84   <2e-16 ***
## Tar_2014     -5.3217     0.4104  -12.97   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.36 on 363 degrees of freedom
## Multiple R-squared:  0.3166, Adjusted R-squared:  0.3147 
## F-statistic: 168.2 on 1 and 363 DF,  p-value: < 2.2e-16
# Plotar regressão linear para 2014
ggplot(df, aes(x = Tar_2014, y = UR_2014)) +
  geom_point() +
  geom_smooth(method = "lm", col = "red") +
  labs(title = "Regressão Linear - 2014", x = "Tar_2014", y = "UR_2014") +
  stat_regline_equation(label.x = 25, label.y = 100) +
  stat_cor(aes(label = paste(..rr.label..)), label.x = 25, label.y = 95)

# Regressão linear para 2015
lm_2015 <- lm(UR_2015 ~ Tar_2015, data = df)
summary(lm_2015)
## 
## Call:
## lm(formula = UR_2015 ~ Tar_2015, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -37.650  -5.507   4.660   7.947  16.832 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 209.4890    10.0930   20.76   <2e-16 ***
## Tar_2015     -5.3831     0.3888  -13.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.55 on 363 degrees of freedom
## Multiple R-squared:  0.3456, Adjusted R-squared:  0.3438 
## F-statistic: 191.7 on 1 and 363 DF,  p-value: < 2.2e-16
# Plotar regressão linear para 2015
ggplot(df, aes(x = Tar_2015, y = UR_2015)) +
  geom_point() +
  geom_smooth(method = "lm", col = "red") +
  labs(title = "Regressão Linear - 2015", x = "Tar_2015", y = "UR_2015") +
  stat_regline_equation(label.x = 25, label.y = 100) +
  stat_cor(aes(label = paste(..rr.label..)), label.x = 25, label.y = 95)

A regressão linear nos permite prever a umidade relativa com base nos valores de temperatura e entender como essas duas variáveis se comportam juntas.