Treino de Triangulação de dados climáticos e infecções respiratórias

Author

Paulo Notiço

Published

June 1, 2024


Conteúdo

  • Ciclos
    • for
    • while
  • Condições
    • if
    • ifelse
    • case when
  • funções
  • Correlações
  • Defasagem
    • Correlações defasadas

Desafio para próxima aula

  • Objetivo:
    • Criar uma função que receba os seguintes parâmetros: base de dados, nomes das variáveis.
  • Resultado:
    • Imprimir uma matriz de correlações.

Pacotes

library(tidyverse)
library(scales)
library(zoo)
library(ggplot2)

Base de dados

set.seed(123) # Para reprodutibilidade
# Criando a base de dados fictícia
dados <- data.frame(
  semana = 1:52,
  IRA = round(runif(52, 50, 200),0),
  Pop = round(runif(52, 200, 1000),0),
  Temp_min = round(runif(52, -5, 15), 1), 
  Temp_max = round(runif(52, 10, 30), 1), 
  Humidade = round(runif(52, 30, 90), 1) 
)
# Visualizando as primeiras linhas da base de dados
dados[2:5,-1]=NA # Colocando NA nas linhas 2 a 5   

Verificando dados Omissos

head(dados,2)
  semana IRA Pop Temp_min Temp_max Humidade
1      1  93 839      4.7     21.4     40.2
2      2  NA  NA       NA       NA       NA
paste0("Total de NA = " ,sum(is.na(dados)))
[1] "Total de NA = 20"
paste0("Total de NA (IRA) é " ,sum(is.na(dados$IRA)))
[1] "Total de NA (IRA) é 4"

Operações condicionais (if e if else)

if (condição) { expressão}

if (condição) { expressão caso verdadeiro} else { expressão caso falso}

ifelse (condição , expressão caso verdadeiro, expressão caso falso)

dados=dados %>%  mutate(Estacao= ifelse(semana<26,"verao","inverno"))

dados %>% 
  group_by(Estacao) %>% 
  summarise(Taxa=sum(IRA, na.rm = T)/sum(Pop,na.rm = T)) %>% 
  mutate(Taxa_per=percent(Taxa))
# A tibble: 2 × 3
  Estacao  Taxa Taxa_per
  <chr>   <dbl> <chr>   
1 inverno 0.194 19.4%   
2 verao   0.211 21.1%   

Condições (while)

while (condição) { expressão}

i=1
Media_Temp_min=median(dados$Temp_min, na.rm = T)

while(i<=length(dados$Temp_max)){ 
  if(is.na(dados[i,4])){
    dados[i,4] = Media_Temp_min
  }
  i=i+1
}
head(dados,3)
  semana IRA Pop Temp_min Temp_max Humidade Estacao
1      1  93 839      4.7     21.4     40.2   verao
2      2  NA  NA      3.5       NA       NA   verao
3      3  NA  NA      3.5       NA       NA   verao

Ciclos (for)

for (indice in vector) { expressão}

# Calculando a média dos valores não NA da variável IRA
media_IRA <- mean(dados$IRA, na.rm = TRUE)

# Substituindo NA pela média usando if
for (i in 1:length(dados$IRA)) {
  if (is.na(dados$IRA[i])) {
    dados$IRA[i] <- media_IRA
  } }
head(dados,3)
  semana      IRA Pop Temp_min Temp_max Humidade Estacao
1      1  93.0000 839      4.7     21.4     40.2   verao
2      2 123.3125  NA      3.5       NA       NA   verao
3      3 123.3125  NA      3.5       NA       NA   verao

Ciclos (case when)

case_when {

condição 1 ~ expressão 1,

condição 2 ~ expressão 2,

condição 3 ~ expressão 3,

.default = expressão caso contrário

}

dados=dados %>% mutate(
  Estacao=case_when(
  Estacao == "verao" ~ "Verão",
  .default = "Inverno") )
head(dados, 3)
  semana      IRA Pop Temp_min Temp_max Humidade Estacao
1      1  93.0000 839      4.7     21.4     40.2   Verão
2      2 123.3125  NA      3.5       NA       NA   Verão
3      3 123.3125  NA      3.5       NA       NA   Verão
tail(dados,3)
   semana IRA Pop Temp_min Temp_max Humidade Estacao
50     50 179 466     -0.1     27.6     54.3 Inverno
51     51  57 591     -2.8     17.3     58.3 Inverno
52     52 116 964      2.8     15.8     82.1 Inverno

Funções

function( argumentos ou listas ) { expressão1

expressão2

return(value)

}

substituir_NA_por_media <- function(data, variavel) {
  # Calculando a média dos valores não NA da variável
  media_variavel <- mean(data[[variavel]], na.rm = TRUE)
  
  # Substituindo NA pela média usando if
  for (i in 1:length(data[[variavel]])) {
    if (is.na(data[[variavel]][i])) {
      data[[variavel]][i] <- media_variavel
    }
  }
  
  return(data)
}

Base=substituir_NA_por_media(dados, "Pop")
Base=substituir_NA_por_media(Base, "Temp_min")
Base=substituir_NA_por_media(Base, "Temp_max")
Base=substituir_NA_por_media(Base, "Humidade")

Visualização da nova base

head(Base)
  semana      IRA Pop Temp_min Temp_max Humidade Estacao
1      1  93.0000 839      4.7    21.40 40.20000   Verão
2      2 123.3125 612      3.5    20.85 61.03542   Verão
3      3 123.3125 612      3.5    20.85 61.03542   Verão
4      4 123.3125 612      3.5    20.85 61.03542   Verão
5      5 123.3125 612      3.5    20.85 61.03542   Verão
6      6  57.0000 803     -2.1    17.10 70.50000   Verão
# Se a opção é eliminar 
# Base = na.omit(Base)
sum(is.na(Base))
[1] 0

Correlações

cor(dados$IRA,dados$Temp_min, method = "pearson")
[1] -0.01733183
cor(dados$IRA,dados$Temp_min, method = "spearman")
[1] 0.005617498
plot(dados$IRA,dados$Temp_min, xlab="Incidência de IRA", ylab="Temperatura mínima (ºC)", main="Investigando uma possivel correlação")

Suavização

dados=dados %>% mutate(
IRA_M1=rollmean(IRA, k=1, fill=NA, align='center'),
IRA_M2=rollmean(IRA, k=2, fill=NA, align='center'),
IRA_M3=rollmean(IRA, k=3, fill=NA, align='center'))

dados %>% 
ggplot()+
  geom_line(aes(x=semana, y=IRA, col="Original"))+
  geom_line(aes(x=semana, y=IRA_M1, col="lag 1"), lty=2)+
  geom_line(aes(x=semana, y=IRA_M2, col="lag 2"), lty=2)+
  geom_line(aes(x=semana, y=IRA_M3, col="lag 3"), lty=2)+
  labs(x="Semana epidemiológica",y="casos de IRA",col="Defasagem")
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_line()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_line()`).

Defasagem

Dados passados em atraso temporal de 2 semanas é chamado defasagem de ordem 2.

dados$Temp_min_lag1=lag(dados$Temp_min,1)
dados$Temp_min_lag2=lag(dados$Temp_min,2)
dados$Temp_min_lag3=lag(dados$Temp_min,3)
head(dados %>% select(Temp_min,Temp_min_lag1,Temp_min_lag2,Temp_min_lag3))
  Temp_min Temp_min_lag1 Temp_min_lag2 Temp_min_lag3
1      4.7            NA            NA            NA
2      3.5           4.7            NA            NA
3      3.5           3.5           4.7            NA
4      3.5           3.5           3.5           4.7
5      3.5           3.5           3.5           3.5
6     -2.1           3.5           3.5           3.5

Correlações defasadas

dados=na.omit(dados)
cor(dados$IRA,dados$Temp_min_lag1)
[1] 0.0657845
cor(dados$IRA,dados$Temp_min_lag2)
[1] 0.08559559
cor(dados$IRA,dados$Temp_min_lag3)
[1] 0.1004605