5 de setembro de 2016

Gráfico de linha com duas variáveis no R

Muitas vezes é interessante plotar a série histórica de duas variáveis distintas no mesmo gráfico, para tentar identificar se existe alguma relação entre elas. No entanto, os valores das duas séries podem ter unidades de medida e ordens de grandeza diferentes. A solução neste caso é gerar um gráfico com dois eixos verticais. Assim, utilizamos o eixo esquerdo para representar uma variável e o eixo direito para representar a outra.

O gráfico abaixo relaciona uma série de consumo de energia elétrica (que varia em torno de 1000 a 2000 MW) com uma série de temperaturas (com valores no faixa de 5 a 20ºC), ambas medidas de hora em hora. Esses dados foram retirados da competição GEFCom2012, e referem-se à uma região do estado da Carolina do Norte (EUA). As duas séries foram suavizadas por um processo de médias móveis centradas com janela de tamanho 24, para neutralizar o efeito de sazonalidade diária. Podemos observar que a carga elétrica tende a aumentar quando a temperatura atinge valores muito baixos, pois muitas residências são equipadas com calefatores elétricos. De fato, as previsões de temperatura são muito úteis para prever o consumo de energia elétrica.

Exemplo no R

Criar gráficos deste tipo no R é uma tarefa bem simples, mas requer um pequeno truque. Basicamente, vamos plotar um gráfico com a série histórica da primeira variável. Em seguida, utilizamos o comando par(new = TRUE) para que o próximo gráfico seja sobreposto à figura já existente.

Para exemplificar, vamos utilizar as séries BJsales e BJsales.lead que fazem parte do pacote datasets do R. O intervalo de variação dessas duas séries é bem diferente.

summary(BJsales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   198.6   212.6   220.6   230.0   254.7   263.3
summary(BJsales.lead)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    9.75   10.81   11.40   11.85   13.12   13.87

O código abaixo demonstra como plotar as duas séries na mesma figura, utilizando a biblioteca base do R.

  #Definir as margens da figura
  par (mar = c(4,4,4,4))
  #Plotar a série BJsales
  plot(BJsales)
  #Comando para sobrepor o próximo plot na mesma figura
  par(new = TRUE)
  #Plota a série BJsales.lead (sem inserir os títulos e marcações dos eixos)
  plot(BJsales.lead, col = "blue", xaxt = "n", yaxt = "n", xlab = "", ylab = "")
  #Insere a marcação do eixo para a série BJsales.lead no lado direito
  axis(side = 4)
  #Acrescenta o título do eixo no lado direito
  mtext("BJsales.lead", side = 4, line = 2.5)
  #Adiciona o título do gráfico
  title("BJsales & BJsales.lead")
  #Insere a legenda
  legend("topleft", legend = c("BJsales", "BJsales.lead"), col = c("black", "blue"), lwd = 1)