-----------------------------------------------------------------------------
title: "Análise e Previsão de Séries Temporais: Manchas Solares"
author: "MARIA EDUARDA DE SOUZA FONTES"
date: "2025-10-02"
-----------------------------------------------------------------------------
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.
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
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).
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.
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()
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.