Como descobrir quando um gráfico atinge um pico e platôs?

9

Isso pode parecer muito básico, mas tenho um problema: tenho uma fila de dados com um tamanho de janela 300. Novos dados são adicionados em uma extremidade, valores antigos são removidos na outra extremidade.

Espero que os dados da fila permaneçam mais ou menos consistentes, por exemplo: 10,12,15,10,20, depois comece a aumentar acentuadamente: 15,10,20,22,25,26,28,30,32 ... até 150 ou mais. Lá, os dados podem flutuar um pouco, depois caem com uma inclinação semelhante (120,118,116,115 ...) até 20 ou mais.

Estou tentando identificar o ponto de virada nesta série de dados programaticamente, mas meu código detecta picos com mais frequência do que gostaria. Como posso identificar quando o gráfico está subindo, quando atingiu um ponto de virada definitivo e quando começa a cair? Devo tentar olhar para a taxa de variação da taxa de variação?

Alex Stone
fonte
Se você tem uma noção razoável da inclinação e da altura do pico, pode levar em consideração a altura e o tempo que ela está subindo, bem como a inclinação atual? Quantos dados anteriores você tem sobre os picos e você pode usá-los para ajustar-se a um modelo?
Karl
2
Seja qual for o método, você terá que definir adequadamente o que é um pico e o que é um platô. Dois valores 'altos' consecutivos são um pico ou um platô? Que tal cinco? Alguns métodos podem parecer não precisar dessas informações, mas isso está oculto nos bastidores. Como sempre, tudo se resume a definir corretamente seu problema e otimizar seus parâmetros (e / ou algoritmo) para ele.
Nick Sabbe 18/10/11

Respostas:

2

Se você souber que esse é o padrão exato a ser esperado, poderá procurar esse padrão exato, mas perderá outros padrões. Então. Se você sabe que o pico será 150, poderá procurar 2 ou 3 ou 4 ou (quantos forem) valores consecutivos de 150. Mas você diz "mais ou menos" - qual é o tamanho "mais ou menos"? Talvez o pico seja definido como "3 valores consecutivos acima de 130" ou talvez seja "3 de 5 valores consecutivos acima de 140". Isso é para você decidir.

Por outro lado, se você está apenas procurando algum programa geral para detectar picos - bem, isso já foi observado. Existem vários métodos de suavização (por exemplo, loess, splines de vários tipos, médias móveis etc.). Não é um campo em que sou especialista, mas há muita literatura sobre isso.

Peter Flom - Restabelece Monica
fonte
4

Olhe para o SiZer (cruzamentos significativos do ZERo ... ou declives, não me lembro), embora, sem dúvida, seja mais uma ferramenta transversal do que uma série temporal. A idéia é suavizar os dados em diferentes larguras de banda (variando em cerca de três ordens de magnitude) e aplicar alguns testes locais para verificar se a inclinação de uma regressão local é significativamente positiva ou negativa (ou indecisa). Ele produz uma imagem convincente que o ajudaria a determinar quais recursos existem. (Estou surpreso que não exista implementação R, apenas Matlab.)

StasK
fonte