Thursday 24 August 2017

Weighted Moving Average Java


Net. sourceforge. openforecast. models Classe WeightedMovingAverageModel Um modelo de previsão média móvel ponderada é baseado em uma série temporal construída artificialmente, na qual o valor para um determinado período de tempo é substituído pela média ponderada desse valor e pelos valores de algum número de tempo anterior Períodos. Como você pode ter adivinhado a partir da descrição, este modelo é mais adequado para dados de séries temporais, isto é, dados que mudam ao longo do tempo. Uma vez que o valor de previsão para um determinado período é uma média ponderada dos períodos anteriores, a previsão sempre parecerá atrasada por aumento ou diminuição nos valores observados (dependentes). Por exemplo, se uma série de dados tiver uma tendência ascendente notável, então uma previsão média móvel ponderada geralmente fornecerá uma subestimação dos valores da variável dependente. O modelo de média móvel ponderada, como o modelo de média móvel, tem uma vantagem em relação a outros modelos de previsão, na medida em que suaviza picos e depressões (ou vales) em um conjunto de observações. No entanto, como o modelo de média móvel, ele também possui várias desvantagens. Em particular, este modelo não produz uma equação real. Portanto, não é tão útil como uma ferramenta de previsão de alcance médio. Ele só pode ser usado de forma confiável para prever alguns períodos no futuro. Desde: 0.4 Autor: Steven R. Gould Campos herdados da classe net. sourceforge. openforecast. models. AbstractForecastingModel WeightedMovingAverageModel () Constrói um novo modelo de previsão média móvel ponderada. WeightedMovingAverageModel (pesos duplos) Constrói um novo modelo de previsão média móvel ponderada, usando os pesos especificados. Previsão (double timeValue) Retorna o valor de previsão da variável dependente para o valor dado da variável de tempo independente. GetForecastType () Retorna um nome de uma ou duas palavras deste tipo de modelo de previsão. GetNumberOfPeriods () Retorna o número atual de períodos usados ​​neste modelo. GetNumberOfPredictors () Retorna o número de preditores usados ​​pelo modelo subjacente. SetWeights (pesos duplos) Define os pesos utilizados por este modelo de previsão média móvel ponderada para os pesos dados. ToString () Isso deve ser substituído para fornecer uma descrição textual do modelo de previsão atual, incluindo, sempre que possível, qualquer parâmetro derivado usado. Métodos herdados da classe net. sourceforge. openforecast. models. AbstractTimeBasedModel WeightedMovingAverageModel Constrói um novo modelo de previsão média móvel ponderada, usando os pesos especificados. Para que um modelo válido seja construído, você deve chamar init e passar um conjunto de dados contendo uma série de pontos de dados com a variável de tempo inicializada para identificar a variável independente. O tamanho da matriz de pesos é usado para determinar o número de observações a serem utilizadas para calcular a média móvel ponderada. Além disso, o período mais recente receberá o peso definido pelo primeiro elemento da matriz, isto é, pesos0. O tamanho da matriz de pesos também é usado para determinar a quantidade de períodos futuros que podem ser efetivamente previstos. Com uma média móvel ponderada de 50 dias, não podemos razoavelmente - com algum grau de precisão - prever mais de 50 dias além do último período para o qual os dados estão disponíveis. Mesmo a previsão próxima ao final deste intervalo provavelmente não será confiável. Nota sobre pesos Em geral, os pesos passados ​​para este construtor devem somar até 1.0. No entanto, como uma conveniência, se a soma dos pesos não for igual a 1,0, esta implementação dimensiona todos os pesos proporcionalmente para que eles somem 1,0. Parâmetros: pesos - um conjunto de pesos a atribuir às observações históricas ao calcular a média móvel ponderada. WeightedMovingAverageModel Constrói um novo modelo de previsão média móvel ponderada, usando a variável nomeada como a variável independente e os pesos especificados. Parâmetros: independentVariable - o nome da variável independente a ser usada neste modelo. Pesos - uma série de pesos para atribuir às observações históricas ao calcular a média móvel ponderada. WeightedMovingAverageModel Constrói um novo modelo de previsão média móvel ponderada. Este construtor destina-se a ser usado apenas por subclasses (portanto, está protegido). Qualquer subclasse usando este construtor deve invocar posteriormente o método (protegido) setWeights para inicializar os pesos a serem usados ​​por este modelo. WeightedMovingAverageModel Constrói um novo modelo de previsão média móvel ponderada usando a variável independente fornecida. Parâmetros: independentVariable - o nome da variável independente a ser usada neste modelo. SetWeights Define os pesos utilizados por este modelo de previsão média móvel ponderada para os pesos dados. Este método destina-se a ser usado apenas por subclasses (portanto, está protegido) e somente em conjunto com o construtor (protegido) de um argumento. Qualquer subclasse usando o construtor de um argumento deve subseqüentemente chamar setWeights antes de invocar o método AbstractTimeBasedModel. init (net. sourceforge. openforecast. DataSet) para inicializar o modelo. Nota sobre pesos Em geral, os pesos passados ​​para este método devem somar até 1.0. No entanto, como uma conveniência, se a soma dos pesos não for igual a 1,0, esta implementação dimensiona todos os pesos proporcionalmente para que eles somem 1,0. Parâmetros: pesos - um conjunto de pesos a atribuir às observações históricas ao calcular a média móvel ponderada. Retorna o valor de previsão da variável dependente para o valor dado da variável de tempo independente. As subclasses devem implementar este método de forma consistente com o modelo de previsão que implementam. As subclasses podem fazer uso dos métodos getForecastValue e getObservedValue para obter previsões e observações anteriores, respectivamente. Especificado por: previsão na classe AbstractTimeBasedModel Parâmetros: timeValue - o valor da variável de tempo para o qual um valor de previsão é necessário. Retorna: o valor de previsão da variável dependente para o tempo determinado. Lances: IllegalArgumentException - se houver dados históricos insuficientes - observações passadas para init - para gerar uma previsão para o valor do tempo determinado. GetNumberOfPredictors Retorna o número de preditores usados ​​pelo modelo subjacente. Retorna: o número de preditores utilizados pelo modelo subjacente. GetNumberOfPeriods Retorna o número atual de períodos usados ​​neste modelo. Especificado por: getNumberOfPeriods na classe AbstractTimeBasedModel Retorna: o número atual de períodos usados ​​neste modelo. GetForecastType Retorna um nome de uma ou duas palavras deste tipo de modelo de previsão. Mantenha isso curto. Uma descrição mais longa deve ser implementada no método toString. Isso deve ser substituído para fornecer uma descrição textual do modelo de previsão atual, incluindo, sempre que possível, qualquer parâmetro derivado usado. Especificado por: toString na interface ForecastingModel Overrides: toString na classe AbstractTimeBasedModel Retorna: uma representação de cadeia do modelo de previsão atual e seus parâmetros. Eu essencialmente tenho uma matriz de valores como este: a matriz acima é simplificada demais, eu estou coletando 1 valor por milissegundo No meu código real e preciso processar a saída em um algoritmo que escrevi para encontrar o pico mais próximo antes de um ponto no tempo. Minha lógica falha porque no meu exemplo acima, 0.36 é o pico real, mas meu algoritmo olhava para trás e veria o último número 0.25 como o pico, pois há uma diminuição para 0,24 antes dele. O objetivo é levar esses valores e aplicar um algoritmo para eles, que os suavizará um pouco para que eu tenha mais valores lineares. (Ie: Id como os meus resultados serem curvy, não jaggedy) Eu fui dito para aplicar um filtro exponencial de média móvel aos meus valores. Como posso fazer isso. É muito difícil para mim ler equações matemáticas, eu ligo muito melhor com o código. Como faço para processar valores na minha matriz, aplicando um cálculo exponencial da média móvel para os fazer sair 8 de fevereiro 12 às 20:27 Para calcular uma média móvel exponencial. Você precisa manter algum estado ao redor e você precisa de um parâmetro de ajuste. Isso exige uma pequena classe (supondo que você esteja usando o Java 5 ou posterior): Instantiate com o parâmetro de decaimento que você deseja (pode ter uma afinação deve estar entre 0 e 1) e depois use a média () para filtrar. Ao ler uma página sobre alguma recorrência matemática, tudo o que você realmente precisa saber ao transformá-lo em código é que os matemáticos gostam de escrever índices em matrizes e seqüências com subíndices. (Contudo, algumas outras notações, o que não ajuda.) No entanto, o EMA é bastante simples, pois você só precisa se lembrar de um valor antigo, não é necessário nenhum arrays de estados complicados. Respondeu 8 de fevereiro às 20:42 TKKocheran: praticamente. Não é bom quando as coisas podem ser simples (Se começar com uma nova seqüência, obtenha uma nova média). Observe que os primeiros termos na seqüência média saltarão em torno de um bit devido a efeitos de limites, mas você obtém aqueles com outras médias móveis também. No entanto, uma boa vantagem é que você pode envolver a lógica média móvel na média e experimentar sem perturbar demais o seu programa. Ndash Donal Fellows 9 de fevereiro às 0:06 Estou tendo dificuldade em entender suas perguntas, mas vou tentar responder de qualquer maneira. 1) Se o seu algoritmo encontrou 0,25 em vez de 0,36, então está errado. É errado porque assume um aumento ou diminuição monotônico (que sempre está subindo ou sempre está descendo). A menos que você tenha TODOS OS seus dados, seus pontos de dados --- como você os apresenta --- são não-lineares. Se você realmente quer encontrar o valor máximo entre dois pontos no tempo, então corte sua matriz de tmin para tmax e encontre o máximo desse subarray. 2) Agora, o conceito de médias móveis é muito simples: imagine que eu tenho a seguinte lista: 1.4, 1.5, 1.4, 1.5, 1.5. Eu posso suavizá-lo tomando a média de dois números: 1.45, 1.45, 1.45, 1.5. Observe que o primeiro número é a média de 1,5 e 1,4 (segundo e primeiro número), a segunda (nova lista) é a média de 1,4 e 1,5 (terceira e segunda lista antiga) a terceira (nova lista) a média de 1,5 e 1,4 (Quarto e terceiro), e assim por diante. Eu poderia ter feito período três ou quatro, ou n. Observe como os dados são muito mais suaves. Uma boa maneira de ver as médias móveis no trabalho é ir para o Google Finance, selecionar um estoque (tente Tesla Motors bastante volátil (TSLA)) e clique em técnicas na parte inferior do gráfico. Selecione a média móvel com um período determinado e uma média móvel exponencial para comparar suas diferenças. A média móvel exponencial é apenas uma outra elaboração deste, mas considera os dados anteriores menos do que os novos dados, é uma maneira de polarizar o alisamento na parte de trás. Leia a entrada da Wikipedia. Então, isso é mais um comentário do que uma resposta, mas a pequena caixa de comentários foi apenas pequena. Boa sorte. Se você estiver tendo problemas com a matemática, você poderia ir com uma média móvel simples em vez de exponencial. Então, a saída que você obtém seria os últimos x termos divididos por x. Pseudocódigo não testado: note que você precisará lidar com as partes de início e fim dos dados, pois claramente você não pode usar os 5 últimos termos quando estiver no seu segundo ponto de dados. Além disso, existem formas mais eficientes de calcular essa média móvel (soma sumária - a mais nova), mas é para obter o conceito do que está acontecendo. Respondeu 8 de fevereiro às 20:41 Sua resposta 2016 Stack Exchange, Inc

No comments:

Post a Comment