Para a presente análise, será explorada a descrição de relações entre pares de variáveis numéricas.
library(tidyverse)
library(here)
theme_set(theme_bw())
# SEMPRE read_csv NUNCA read.csv
clima_tudo = read_csv(
here("data/tempo-jp-cg-pt.csv"),
col_types = cols(
.default = col_double(),
cidade = col_character(),
semana = col_date(format = ""),
ano = col_integer(),
mes = col_integer()
)
)
clima = clima_tudo %>%
filter(ano == 2019)
clima %>%
slice(1:8)
## # A tibble: 8 x 11
## cidade semana temp_max temp_media temp_min vento_medio vento_max umidade
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Campina… 2019-01-06 32.1 25.6 19.6 3.57 4.6 74.9
## 2 Campina… 2019-01-13 33.5 27.1 20 3.29 4.5 69
## 3 Campina… 2019-01-20 33.3 26.7 19.6 4.01 6.5 72.5
## 4 Campina… 2019-01-27 32.4 26.4 19.6 3.53 5 75.0
## 5 Campina… 2019-02-03 32.2 25.3 19.5 2.95 4.8 83
## 6 Campina… 2019-02-10 31.1 25.6 20.1 3.17 5 84.1
## 7 Campina… 2019-02-17 31.6 25.9 20.5 2.89 4.1 79.2
## 8 Campina… 2019-02-24 31.1 25.9 20.5 3.63 4.8 76.8
## # … with 3 more variables: chuva <dbl>, ano <int>, mes <int>
Para garantir que não estamos lidando com dados faltantes, é importante garantir se há a presença destes no nosso dataset.
sum(is.na(clima_tudo$temp_media))
## [1] 70
sum(is.na(clima_tudo$chuva))
## [1] 0
Agora sabendo que temos 70 dados faltantes em relação à temperatura média e nenhum em relação à chuva, é válido descobrir de quais anos esses dados faltantes se tratam.
clima_tudo %>%
group_by(ano) %>%
filter(is.na(temp_media)) %>%
count(ano)
## # A tibble: 4 x 2
## # Groups: ano [4]
## ano n
## <int> <int>
## 1 2016 1
## 2 2017 2
## 3 2020 41
## 4 2021 26
Considerando que os dados faltantes se concentram nos anos de 2020 e 2021, estes não serão incluídos na nossa análise. 2016 e 2017 seguirão inclusos, pois a falta de dados não afeta consideravelmente a nossa análise.
clima_temp <- clima_tudo %>%
filter(ano <= 2019, ano >= 2010, !is.na(temp_media)) %>%
mutate(temp_anterior = lag(temp_media, n = 1)) %>%
filter(!is.na(temp_anterior))
O que queremos entender nessa nova análise em relação aos climas das cidades de Campina Grande, João Pessoa e Patos é, inicialmente, a relação entre temperaturas de uma semana e a semana passada. Para tal, representamos essa relação através de um gráfico de dispersão.
clima_temp %>%
ggplot(aes(x = temp_media, y = temp_anterior)) +
geom_point(color = "salmon", alpha = 0.7) +
facet_wrap(~ cidade, ncol = 1) +
labs(
x = "Temperatura média (°C)",
y = "Temperatura média da semana anterior(°C)"
) +
geom_hline(yintercept = mean(clima_temp$temp_media), color = "gray") +
geom_vline(xintercept = mean(clima_temp$temp_anterior), color = "gray")
É possível perceber visualmente que a associação entre as duas variáveis de temperatura nas 3 cidades se trata de um formato linear. Por isso, para entendermos mais sobre essa correlação, poderemos trabalhar com o coeficiente de correlação linear de Pearson.
clima_temp %>%
summarise(correlacao = cor(temp_media, temp_anterior, method = "pearson"))
## # A tibble: 1 x 1
## correlacao
## <dbl>
## 1 0.941
Através desse resultado, temos então uma correlação forte e positiva, dado seu valor de 0.94, muito próximo de 1. É interessante notar que temos somente alguns poucos pontos que fogem à tendência, sendo essas ocorrências mais perceptíveis na cidade de Campina Grande e um ponto mais extremo em Patos.
Agora a nossa intenção é a de estudar a relação, nas 3 cidades, entre a temperatura e as chuvas (nas semanas em que ocorreram). Também foi gerado um gráfico de dispersão para o pontapé inicial dessa análise.
clima_temp %>%
filter(chuva > 0) %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(color = "steelblue", alpha = 0.7) +
facet_wrap(~ cidade, ncol = 1) +
labs(
x = "Temperatura média (°C)",
y = "Chuva (mm)"
) +
geom_hline(yintercept = mean(clima_temp$chuva), color = "gray") +
geom_vline(xintercept = mean(clima_temp$temp_media), color = "gray")
Diante desse gráfico, vemos uma grande concentração de pontos nos valores muito próximos a 0 (zero), não sendo possível observar tão claramente uma relação linear. Tendo isso em vista, outros coeficientes de correlação serão considerados: os de Spearman e Kendall. Abaixo, o gráfico gerado com a escala de log para o eixo de chuva, para conseguirmos visualizar melhor esses pontos que se concentraram nos valores mais baixos.
clima_temp %>%
filter(chuva > 0) %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(color = "steelblue", alpha = 0.7) +
facet_wrap(~ cidade, ncol = 1) +
labs(
x = "Temperatura média (°C)",
y = "Chuva (mm)"
) +
geom_hline(yintercept = mean(clima_temp$chuva), color = "gray") +
geom_vline(xintercept = mean(clima_temp$temp_media), color = "gray") +
scale_y_log10()
Pouco podemos inferir a partir dessa visualização, dado que não há um formato claro e nem mesmo pontos que fogem à tendência, dado que não existe uma tendência. O que podemos visualizar é que, nos casos de João Pessoa e Patos, a pouca ocorrência de chuvas se concentra em valores mais altos de temperatura (acima dos 25°C) em comparação à Campina Grande (abaixo dos 25°C).
clima_temp %>%
filter(chuva > 0) %>%
summarise(spearman = cor(temp_media, chuva, method = "spearman"),
kendall = cor(temp_media, chuva, method = "kendall"), )
## # A tibble: 1 x 2
## spearman kendall
## <dbl> <dbl>
## 1 -0.0823 -0.0562
Agora, considerando os coeficientes de correlação de Spearman e Kendall, temos que a correlação é negativa e fraca, dado seus valores mais próximos de 0 que de -1.
Nessa seção bônus, buscamos fazer o mesmo tipo de análise da primeira seção, buscando estudar a relação entre uma semana e a semana anterior, mas dessa vez em relação às chuvas.
clima_temp <- clima_temp %>%
mutate(chuva_anterior = lag(chuva, n = 1)) %>%
filter(!is.na(chuva_anterior))
clima_temp %>%
ggplot(aes(x = chuva, y = chuva_anterior)) +
geom_point(color = "palevioletred2", alpha = 0.7) +
facet_wrap(~ cidade, ncol = 1) +
labs(
x = "Chuva (mm)",
y = "Chuva da semana anterior (mm)"
) +
geom_hline(yintercept = mean(clima_temp$chuva), color = "gray") +
geom_vline(xintercept = mean(clima_temp$chuva_anterior), color = "gray")
Lembrando que, por estarmos lidando com os baixos valores de chuvas, os pontos se concentram muito próximos de 0 (zero) e, por isso, será gerado o gráfico em escala de log para os eixos X e Y. Visualmente temos um formato não-linear, logo os coeficientes trabalhados serão os de Spearman e Kendall.
clima_temp %>%
ggplot(aes(x = chuva, y = chuva_anterior)) +
geom_point(color = "palevioletred2", alpha = 0.7) +
facet_wrap(~ cidade, ncol = 1) +
labs(
x = "Chuva (mm)",
y = "Chuva da semana anterior (mm)"
) +
scale_x_log10() +
scale_y_log10() +
geom_hline(yintercept = mean(clima_temp$chuva), color = "gray") +
geom_vline(xintercept = mean(clima_temp$chuva_anterior), color = "gray")
## Warning: Transformation introduced infinite values in continuous x-axis
## Warning: Transformation introduced infinite values in continuous y-axis
Nesse novo gráfico, temos mais uma vez a certeza de não estarmos lidando com um formato linear. Não temos pontos extremos, considerando o quanto eles estão espalhados. É interessante perceber que, enquanto na primeira seção observamos uma forte correlação entre as temperaturas da semana e da semana anterior, em relação à chuva já não temos o mesmo tipo de observação.
clima_temp %>%
summarise(spearman = cor(chuva, chuva_anterior, method = "spearman"),
kendall = cor(chuva, chuva_anterior, method = "kendall"), )
## # A tibble: 1 x 2
## spearman kendall
## <dbl> <dbl>
## 1 0.561 0.411
Diante dos resultados dos coeficientes de Spearman e Kendall, temos uma correlação positiva e fraca, dado que seus valores estão mais próximos de 0 (zero) do que de 1.