Prof. Dr. Francisco de Souza Oliveira e
Prof. Dr. Rafael da Silva Palácios
Discentes: Elivaldo Rocha
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
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.
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.
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.
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.
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.
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.
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.