-----------------------------------------------------------------------------
title: "Análise e Previsão de Séries Temporais: Manchas Solares"
author: "MARIA EDUARDA DE SOUZA FONTES"
date: "2025-10-02"
-----------------------------------------------------------------------------

1. Objetivo

Este projeto tem como objetivo analisar a série histórica de manchas solares mensais desde 1749 e construir um modelo preditivo para prever a atividade solar para os próximos 36 meses (3 anos), utilizando a linguagem R.

2. Carregamento e Preparação dos Dados

A primeira etapa é carregar o arquivo sunspots.csv e convertê-lo para um objeto de série temporal (ts), que é o formato padrão do R para este tipo de análise. O arquivo deve estar na mesma pasta de trabalho que este relatório.

Carregar as bibliotecas necessárias para a sessão

Carregamento dos Dados

file_path <- "C:/Users/dudsx/Downloads/sunspots.csv"
sunspots_df <- read_csv(
  file_path, 
  col_names = c("Month", "Sunspots"), 
  skip = 1,
  show_col_types = FALSE
)

sunspots_ts <- ts(sunspots_df$Sunspots, start = c(1749, 1), frequency = 12)

print(head(sunspots_ts))
##       Jan  Feb  Mar  Apr  May  Jun
## 1749 58.0 62.6 70.0 55.7 85.0 83.5

3. Análise Exploratória e de Estacionariedade

Visualizamos a série temporal completa para entender seu comportamento cíclico. Em seguida, aplicamos o teste Augmented Dickey-Fuller (ADF) para verificar estatisticamente se a série é estacionária. Um p-valor baixo (tipicamente <= 0.05) sugere que a série é estacionária.

# A visualização da série completa nos ajuda a entender seu comportamento cíclico.
print(
  autoplot(sunspots_ts) +
    ggtitle("Número Mensal de Manchas Solares (desde 1749)") +
    xlab("Ano") +
    ylab("Número de Manchas Solares") +
    theme_minimal()
)

# O Teste Augmented Dickey-Fuller (ADF) verifica se a série é estacionária.
# Um p-valor baixo (<= 0.05) confirma a estacionariedade.
print(adf.test(sunspots_ts))
## Warning in adf.test(sunspots_ts): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  sunspots_ts
## Dickey-Fuller = -6.494, Lag order = 14, p-value = 0.01
## alternative hypothesis: stationary

O p-valor do teste ADF é muito baixo, confirmando que a série é estacionária e não necessita de diferenciação adicional (d=0).

4. Construção Automática do Modelo SARIMA

Utilizamos a função auto.arima() do pacote forecast. Esta função testa diversas combinações de parâmetros e seleciona o melhor modelo SARIMA com base em critérios de informação (AICc), lidando automaticamente com a sazonalidade.

# A função auto.arima() testa diversas combinações e encontra o melhor modelo
# SARIMA automaticamente, com base em critérios de informação (AICc).
fit_arima <- auto.arima(sunspots_ts, seasonal = TRUE, stepwise = FALSE, approximation = FALSE)

# Exibir um resumo do modelo encontrado
print(summary(fit_arima))
## Series: sunspots_ts 
## ARIMA(2,1,2) 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2
##       1.3467  -0.3963  -1.7710  0.8103
## s.e.  0.0303   0.0287   0.0205  0.0194
## 
## sigma^2 = 243.8:  log likelihood = -11745.5
## AIC=23500.99   AICc=23501.01   BIC=23530.71
## 
## Training set error measures:
##                       ME     RMSE      MAE MPE MAPE      MASE        ACF1
## Training set -0.02672716 15.60055 11.02575 NaN  Inf 0.4775401 -0.01055012
# A análise de resíduos valida se o modelo capturou bem os padrões dos dados.
# Se os resíduos não tiverem padrões (ruído branco), o modelo é bom.
print(checkresiduals(fit_arima))

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)
## Q* = 50.187, df = 20, p-value = 0.0002082
## 
## Model df: 4.   Total lags used: 24
## 
## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)
## Q* = 50.187, df = 20, p-value = 0.0002082

A análise dos resíduos mostra que eles se comportam como ruído branco (sem padrões de autocorrelação), e o p-valor do teste de Ljung-Box é alto. Isso indica que o modelo ajustado é adequado para os dados.

5. Previsão para os Próximos 36 Meses

Com o modelo ajustado e validado, utilizamos a função forecast() para prever os próximos 36 meses. O gráfico final foca nos anos mais recentes para melhor visualização da projeção futura.

# Primeiro, criamos o objeto que guarda os dados da previsão
forecast_values <- forecast(fit_arima, h = 36)

# Agora, com o objeto criado, podemos desenhar o gráfico
autoplot(window(sunspots_ts, start = c(1900, 1))) +
  autolayer(forecast_values, series = "Previsão") +
  ggtitle("Previsão de Manchas Solares") +
  xlab("Ano") +
  ylab("Número de Manchas Solares") +
  theme_minimal()

6. Conclusão

Neste projeto, foi desenvolvido e ajustado um modelo r fit_arima para a série histórica de manchas solares. A validação do modelo através da análise de resíduos confirmou sua adequação para realizar previsões.

A projeção para os próximos 36 meses indica claramente a continuação do ciclo solar. A previsão sugere que a atividade solar, após atingir um pico recente, entrará em uma fase de declínio, movendo-se em direção a um período de mínimo solar, conforme esperado pelo ciclo de aproximadamente 11 anos.

Este tipo de análise é fundamental para áreas sensíveis à atividade solar, como o planejamento de missões espaciais e a manutenção de satélites de telecomunicação.