Coleção series-temporais
Tirar sazonalidade
Estima o efeito de cada período do ciclo por regressão e o subtrai da série, mostrando os efeitos com erro-padrão e p-valor.
O que o bloco faz
series/deseasonalize estima o efeito de cada período do ciclo (cada mês, numa série mensal) por regressão em variáveis indicadoras e subtrai esse efeito da série, deixando a tendência e o resto. O card mostra os efeitos estimados, com erro-padrão e p-valor, como na series/regression. As saídas são out, a série dessazonalizada, e sazonal, o componente removido; somar as duas devolve a série original.
Com Controlar a tendência ligado (o padrão), o ajuste é valor ~ t + periodo, e só o efeito sazonal é removido. Isso importa numa série que cresce: dezembro tem média acima de janeiro só por vir depois, e as indicadoras sozinhas atribuiriam essa diferença à sazonalidade. Desligado, o ajuste é valor ~ periodo, e cada efeito é a média do período menos a média geral, o que só é correto para série sem tendência.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- p-valor
- A probabilidade de obter um resultado tão extremo quanto o observado, ou mais, se a hipótese nula fosse verdadeira. p-valor pequeno indica dados pouco compatíveis com a hipótese nula; ele não é a probabilidade de a hipótese nula ser verdadeira nem mede o tamanho do efeito.
- Independência
- Pressuposto de que o erro de uma observação não informa sobre o de outra. Falha com medidas repetidas no mesmo indivíduo, unidades vizinhas ou dados no tempo, e a sua violação pode distorcer bastante os p-valores e os intervalos.
- Autocorrelação
- A correlação de uma série com ela mesma deslocada no tempo: o valor de hoje parecido com o de ontem. É o padrão que os modelos de séries descrevem, e o que torna inválidos os testes que supõem observações independentes.
- Tendência
- O movimento de longo prazo de uma série, de subida ou de descida, separado das oscilações de curto prazo e da sazonalidade.
- Sazonalidade
- Um padrão que se repete em intervalos fixos do calendário, como mais chuva em janeiro ou mais vendas em dezembro. O período sazonal é o comprimento do ciclo: 12 para dados mensais com ciclo anual.
Quando usar
Para retirar uma sazonalidade fixa e aditiva antes de olhar a tendência ou de aplicar um teste que pede série sem ciclo. Se a amplitude da oscilação cresce com o nível da série, aplique series/transform com log antes. Se a sazonalidade muda ao longo dos anos, a decomposição indicada é a series/stl.
Pressupostos
A sazonalidade é fixa e aditiva: o mesmo efeito por período em todo ciclo, somado ao nível. Sazonalidade que muda com os anos, ou que cresce com o nível, sobra no resto.
Verificar:Gráfico sazonalSubséries sazonaisAmplitude × média
Se falhar: Oscilação que cresce com o nível:
series/transformcomlogantes. Padrão que muda:series/stl.Com Controlar a tendência desligado, a série não tem tendência: senão os períodos do fim do ano parecem maiores só por virem depois.
Verificar:Série no tempoMann-Kendall
Se falhar: Ligue Controlar a tendência, ou use
series/regression.Com Erro = independente (padrão, MQO), os erros da regressão são independentes (sem autocorrelação). Série temporal quase nunca obedece, e o efeito é conhecido: erros-padrão pequenos demais e p-valores otimistas. Com Erro = arma, o erro segue o ARMA(p, q) declarado.
Verificar:ComponenteLjung-BoxCorrelograma (ACF)
Se falhar: Tire o
restocomseries/componente passe noseries/ljung_box. Com autocorrelação, ligue Erro = arma noseries/regression(GLS com erro ARMA; comece por AR(1) e escolha a ordem pelaseries/acfeseries/pacfdo resto); os F domodels/anova_tableviram testes de Wald do GLS. Perto da raiz unitária nem o GLS segura o nível: diferencie. Os testes não paramétricos (series/mann_kendall,series/seasonality_kw) também supõem independência, então não resolvem.Os erros são normais e de variância constante: o F é exato só assim.
Verificar:ComponenteQuantil-quantilShapiro-Wilk
Se falhar: O
restodoseries/componentvira tabela no fio (colunavalor). Variância que cresce com o nível: ajuste no log (series/transform). Sem normalidade:series/mann_kendall(tendência) ouseries/seasonality_kw(sazonalidade).O ciclo declarado (a frequência da série) é o período sazonal verdadeiro, e a série tem pelo menos dois ciclos completos.
Verificar:Gráfico sazonalSubséries sazonaisPeriodicidade (Fisher)
Se falhar: Declare a frequência certa no nó que cria a série (
series/from_table).
Configuração
- Controlar a tendência — inclui
tno ajuste (padrão). - Contraste —
soma_zero(desvio da média do ciclo) oucategoria_base(diferença para o primeiro período). - Excluir termos sazonais — nomes ou números separados por vírgula; os períodos excluídos formam o grupo demais.
- Remover termos sazonais não significativos e Confiança da remoção — remoção para trás; os p-valores finais ficam otimistas.
O bloco não aceita valores faltantes (interpole antes com series/interpolate) e pede série com ciclo, isto é, frequência maior que 1. Com ciclos incompletos, ele avisa.
Exemplo
library(trama)
reg <- tr_registry()
tr_use("trama.series", registry = reg)
tr_flow(reg) |>
tr_add("pax", "series/example") |>
tr_add("log", "series/transform", metodo = "log", from = "pax") |>
tr_add("dessaz", "series/deseasonalize", from = "log") |>
tr_add("efeito", "series/plot", from = "dessaz:sazonal")Como interpretar
Cada efeito estimado é o quanto aquele período fica, em média, acima ou abaixo do nível da série, descontada a tendência. Os p-valores dos efeitos individuais não substituem um teste da sazonalidade como um todo: para o F da sazonalidade, ajuste a series/regression com a mesma fórmula e leia o models/anova_table; sem supor normalidade, use a series/seasonality_kw. A sazonalidade removida é a mesma em todos os anos.
Implementação
stats::lm()versão 4.6.0valor ~ t + periodo(ouvalor ~ periodo), comperiodofator do ciclo e contrastecontr.sumoucontr.treatmentposto no fator; o componente sazonal é a parte do preditor que vem deperiodo, centrada pela média do ciclo.
No código O bloco chama trama.series::tr_series_deseasonalize(), em trama.series/R/regressao.R:444.
A conta é feita nesta chamada:
stats::lm(f, data = dados)
Outras funções de pacotes que o bloco usa (40)
stats::frequency(x)stats::frequency(serie)stats::cycle(serie)stats::tsp(serie)stats::frequency(serie)stats::tsp(serie)stats::start(regressor)stats::end(regressor)stats::window(regressor, start = ts_s[[1]], end = ts_s[[2]])stats::as.formula(txt, env = .tr_series_env_formula())stats::update(f, . ~ . + regressor)stats::frequency(serie)stats::time(serie)stats::frequency(serie)stats::contrasts(x)stats::contr.sum(rot)stats::contrasts(x)stats::contrasts(x)stats::model.matrix(fit)stats::terms(fit)stats::coef(fit)stats::residuals(fit)nlme::corARMA(p = ar, q = ma, form = ~1)nlme::gls(f, data = dados, method = "ML", correlation = cor)stats::coef(fit$modelStruct$corStruct, unconstrained = FALSE)stats::coef(fit)stats::coef(fit)stats::frequency(serie)stats::contrasts(dados$periodo)stats::coef(fit)stats::vcov(fit)stats::pt(-abs(t), gl)stats::coef(fit)stats::cycle(serie)stats::ts(v, start = stats::start(serie), frequency = stats::frequency(serie))stats::start(serie)stats::frequency(serie)stats::fitted(fit)trama.models::tr_models_as_fit(a$fit, if (erro == "arma") "gls" else "lm", rotulo, f, a$dados, "valor", nota = a$aviso %||% "", extra = list(serie_reg = info))stats::tsp(x)
Referências
Livro-texto
- Morettin, P. A.; Toloi, C. M. C. (2006). Análise de séries temporais. 2. ed. São Paulo: Blucher.
- Hyndman, R. J.; Athanasopoulos, G. (2021). Forecasting: Principles and Practice. 3. ed. Melbourne: OTexts. https://otexts.com/fpp3/