Tenho uma série temporal mensal com uma intervenção e gostaria de quantificar o efeito dessa intervenção no resultado. Sei que a série é bastante curta e o efeito ainda não está concluído.
Os dados
cds <- structure(c(2580L, 2263L, 3679L, 3461L, 3645L, 3716L, 3955L, 3362L,
2637L, 2524L, 2084L, 2031L, 2256L, 2401L, 3253L, 2881L,
2555L, 2585L, 3015L, 2608L, 3676L, 5763L, 4626L, 3848L,
4523L, 4186L, 4070L, 4000L, 3498L),
.Dim=c(29L, 1L),
.Dimnames=list(NULL, "CD"),
.Tsp=c(2012, 2014.33333333333, 12), class="ts")
A metodologia
1) A série pré-intervenção (até outubro de 2013) foi utilizada com a auto.arima
função. O modelo sugerido foi ARIMA (1,0,0) com média diferente de zero. O gráfico da ACF parecia bom.
pre <- window(cds, start=c(2012, 01), end=c(2013, 09))
mod.pre <- auto.arima(log(pre))
# Coefficients:
# ar1 intercept
# 0.5821 7.9652
# s.e. 0.1763 0.0810
#
# sigma^2 estimated as 0.02709: log likelihood=7.89
# AIC=-9.77 AICc=-8.36 BIC=-6.64
2) Dado o gráfico da série completa, a resposta de pulso foi escolhida abaixo, com T = outubro de 2013,
que de acordo com cryer e chan podem ser ajustados da seguinte forma com a função arimax:
mod.arimax <- arimax(log(cds), order=c(1, 0, 0),
seasonal=list(order=c(0, 0, 0), frequency=12),
include.mean=TRUE,
xtransf=data.frame(Oct13=1 * (seq(cds) == 22)),
transfer=list(c(1, 1)))
mod.arimax
# Series: log(cds)
# ARIMA(1,0,0) with non-zero mean
#
# Coefficients:
# ar1 intercept Oct13-AR1 Oct13-MA0 Oct13-MA1
# 0.7619 8.0345 -0.4429 0.4261 0.3567
# s.e. 0.1206 0.1090 0.3993 0.1340 0.1557
#
# sigma^2 estimated as 0.02289: log likelihood=12.71
# AIC=-15.42 AICc=-11.61 BIC=-7.22
Os resíduos disso pareceram OK:
O enredo dos dados ajustados e reais:
plot(fitted(mod.arimax), col="red", type="b")
lines(window(log(cds), start=c(2012, 02)), type="b")
As questões
1) Esta metodologia está correta para a análise de intervenção?
2) Posso analisar a estimativa / SE dos componentes da função de transferência e dizer que o efeito da intervenção foi significativo?
3) Como se pode visualizar o efeito da função de transferência (plot it?)
4) Existe uma maneira de estimar quanto a intervenção aumentou a produção após 'x' meses? Eu acho que para isso (e talvez # 3) estou perguntando como trabalhar com uma equação do modelo - se isso fosse regressão linear simples com variáveis dummy (por exemplo) eu poderia executar cenários com e sem a intervenção e medir o impacto - mas não tenho certeza de como trabalhar com esse tipo de modelo.
ADICIONAR
Por solicitação, aqui estão os resíduos das duas parametrizações.
Primeiro do ajuste:
fit <- arimax(log(cds), order=c(1, 0, 0),
xtransf=
data.frame(Oct13a=1 * (seq_along(cds) == 22),
Oct13b=1 * (seq_along(cds) == 22)),
transfer=list(c(0, 0), c(1, 0)))
plot(resid(fit), type="b")
Então, a partir deste ajuste
mod.arimax <- arimax(log(cds), order=c(1, 0, 0),
seasonal=list(order=c(0, 0, 0), frequency=12),
include.mean=TRUE,
xtransf=data.frame(Oct13=1 * (seq(cds) == 22)),
transfer=list(c(1, 1)))
mod.arimax
plot(resid(mod.arimax), type="b")
fonte
Respostas:
Um modelo AR (1) com a intervenção definida na equação dada na pergunta pode ser ajustado como mostrado abaixo. Observe como o argumento
transfer
é definido; você também precisa de uma variável indicadoraxtransf
para cada uma das intervenções (o pulso e a mudança transitória):Você pode testar a significância de cada intervenção observando a estatística t dos coeficientes e . Para maior comodidade, você pode usar a função .ω 1ω0 ω1
coeftest
Nesse caso, o pulso não é significativo no nível de significância de . Seu efeito já pode ser capturado pela mudança transitória.5%
O efeito da intervenção pode ser quantificado da seguinte forma:
Você pode plotar o efeito da intervenção da seguinte maneira:
O efeito é relativamente persistente porque é próximo de (se fosse igual a , observaríamos uma mudança permanente de nível). 1 ω 2 1ω2 1 ω2 1
Numericamente, esses são os aumentos estimados quantificados em cada momento causado pela intervenção em outubro de 2013:
A intervenção aumenta o valor da variável observada em outubro de 2013 em cerca de . Nos períodos subsequentes, o efeito permanece, mas com um peso decrescente.75%
Também poderíamos criar as intervenções manualmente e passá-las para0.9231
stats::arima
regressores externos. As intervenções são um pulso mais uma mudança transitória com o parâmetro e podem ser construídas da seguinte maneira.As mesmas estimativas dos coeficientes acima são obtidas. Aqui, corrigimos para . A matriz é o tipo de variável dummy que você pode precisar para experimentar diferentes cenários. Você também pode definir valores diferentes para e comparar seu efeito. 0,9231 ω 2ω2 0.9231 ω2
xreg
Essas intervenções são equivalentes a um outlier aditivo (AO) e a uma mudança transitória (CT) definida no pacote
tsoutliers
. Você pode usar este pacote para detectar esses efeitos, como mostra a resposta do @forecaster, ou para criar os regressores usados anteriormente. Por exemplo, neste caso:Editar 1
Vi que a equação que você deu pode ser reescrita como:
e pode ser especificado como você fez
transfer=list(c(1, 1))
.Como mostrado abaixo, essa parametrização leva, neste caso, a estimativas de parâmetros que envolvem um efeito diferente em comparação com a parametrização anterior. Isso me lembra o efeito de uma discrepância inovadora, em vez de um pulso, mais uma mudança transitória.
Não estou muito familiarizado com a notação de pacote,
TSA
mas acho que o efeito da intervenção agora pode ser quantificado da seguinte forma:O efeito pode ser descrito agora como um aumento acentuado em outubro de 2013, seguido de uma diminuição na direção oposta; então o efeito da intervenção desaparece rapidamente, alternando efeitos positivos e negativos da queda de peso.
Esse efeito é um tanto peculiar, mas pode ser possível em dados reais. Neste ponto, eu examinaria o contexto dos seus dados e os eventos que podem ter afetado os dados. Por exemplo, houve uma mudança de política, campanha de marketing, descoberta ... que pode explicar a intervenção em outubro de 2013. Nesse caso, é mais sensato que esse evento tenha um efeito sobre os dados como descrito anteriormente ou como descobrimos com a parametrização inicial?
Segundo a AIC, o modelo inicial seria preferido por ser mais baixo ( contra ). O gráfico da série original não sugere uma correspondência clara com as mudanças bruscas envolvidas na medição da segunda variável de intervenção.- 15,42−18.94 −15.42
Sem conhecer o contexto dos dados, eu diria que um modelo AR (1) com uma mudança transitória com o parâmetro seria apropriado para modelar os dados e medir a intervenção.0.9
Editar 2
O valor de determina a rapidez com que o efeito da intervenção cai para zero, então esse é o parâmetro-chave no modelo. Podemos inspecionar isso ajustando o modelo para um intervalo de valores de . Abaixo, o AIC é armazenado para cada um desses modelos.ω 2ω2 ω2
O AIC mais baixo é encontrado para (de acordo com o valor estimado anteriormente). Este parâmetro envolve um efeito relativamente persistente, mas transitório. Podemos concluir que o efeito é temporário, pois com valores superiores a a AIC aumenta (lembre-se de que no limite , a intervenção se torna uma mudança permanente de nível).0,9 ω 2 = 1ω2=0.88 0.9 ω2=1
A intervenção deve ser incluída nas previsões. Obter previsões para períodos que já foram observados é um exercício útil para avaliar o desempenho das previsões. O código abaixo supõe que a série termine em outubro de 2013. As previsões são obtidas incluindo a intervenção com o parâmetro .ω2=0.9
Primeiro, modelo AR (1) com a intervenção como regressor (com o parâmetro ):ω2=0.9
As previsões podem ser obtidas e exibidas da seguinte forma:
As primeiras previsões correspondem relativamente bem aos valores observados (linha pontilhada cinza). As previsões restantes mostram como a série continuará o caminho para a média original. No entanto, os intervalos de confiança são grandes, refletindo a incerteza. Portanto, devemos ter cuidado e revisar o modelo à medida que novos dados são registrados.
fonte
As vezes menos é mais. Com 30 observações em mãos, enviei os dados para o AUTOBOX, um software que ajudei a desenvolver. Submeto a seguinte análise na esperança de obter a recompensa de +200 (apenas brincando!). Plotamos os Valores Reais e Limpados sugerindo visualmente o impacto da "atividade recente". . O modelo que foi desenvolvido automaticamente é mostrado aqui. e aqui . Os resíduos dessa série bastante simples de deslocamento de nível são apresentados aqui . As estatísticas do modelo estão aqui . Em resumo, houve intervenções que poderiam ser identificadas empiricamente, renderizando um processo ARIMA; dois pulsos e uma mudança de nível . O gráfico Real / Ajuste e Previsão destaca ainda mais a análise.
Eu, pelo menos, gostaria de ver o gráfico dos resíduos dos modelos especificados anteriormente e, na minha opinião, modelos potencialmente especificados em excesso.
fonte
Com base em minha postagem semelhante à sua pergunta anterior, usei a função tso no pacote tsoutliers no e ele detectou automaticamente uma mudança temporária em outubro de 2013. Observe que a mudança temporária é diferente do deslocamento da rampa na função de transferência, que é o que você procura. Eu não acho que exista um pacote / função que eu saiba que seria capaz de visualizar a função de transferência. Espero que isso forneça algumas idéias. Não usei a transformação de log, modelei-a diretamente. O pacote tsoutliers pode ser pensado como uma detecção automática de intervenção.R
Abaixo está o código:
Abaixo está a estimativa, houve um aumento de ~ 2356,3 unidades em outubro de 2013 com um erro padrão de ~ 481,8 e, posteriormente, teve um efeito decadente. A função identificou automaticamente AR (1). Eu tive que fazer algumas iterações e fazer a diferença sazonal e não sazonal para 0, o que é refletido no método args.tsmet na função tso.
Abaixo está o gráfico, tsoutlier é o único pacote que eu conheço que pode imprimir mudanças temporárias tão bem em um gráfico.
Esperamos que esta análise tenha respondido às suas 2, 3 e 4 perguntas, embora usando uma metodologia diferente. Especialmente a plotagem e os coeficientes forneceram o efeito dessa intervenção e o que teria acontecido se você não tivesse essa intervenção.
Também espero que alguém possa replicar esse gráfico / análise usando a modelagem da função de transferência em R.
fonte