Sunday 26 November 2017

Média Móvel Knuth


Estou tentando encontrar uma maneira de calcular uma média cumulativa em movimento sem armazenar a contagem e o total de dados recebidos até agora. Eu criei dois algoritmos, mas ambos precisam armazenar a contagem: dados médios (dados antigos antigos) dados próximos (próxima contagem anterior) próxima contagem nova média antiga média (próximo dado - média anterior) próxima contagem O problema com esses métodos é que a contagem Fica cada vez maior, resultando em perda de precisão na média resultante. O primeiro método usa a contagem antiga e a próxima contagem, que são obviamente separadas. Isso me fez pensar que talvez exista uma maneira de remover a contagem, mas infelizmente não consegui encontrá-la. No entanto, conseguiu-me um pouco mais, resultando no segundo método, mas ainda contagem está presente. É possível, ou estou apenas procurando o impossível, perguntou-se em 28 de setembro às 8: 46. Estou tentando encontrar um algoritmo eficiente e numericamente estável para calcular uma variância de rolamento (por exemplo, uma variação em uma janela de rolamento de 20 períodos). Estou ciente do algoritmo de Welford que calcula de forma eficiente a variância de corrida para um fluxo de números (requer apenas uma passagem), mas não tenho certeza se isso pode ser adaptado para uma janela rolante. Eu também gostaria que a solução evitasse os problemas de precisão discutidos no topo deste artigo. Uma solução em qualquer idioma está bem. Perguntou 28 de fevereiro às 20:46 Eu também enfrento esse problema. Existem algumas ótimas publicações lá fora, no computação da variância cumulativa em execução, como o trabalho de cálculo da corrida de variável de John Cookes, bem como a publicação de explorações digitais, o código Python para variações de amostra e variância populacional, covariância e coeficiente de correlação. Simplesmente não consegui encontrar nenhum que fosse adaptado a uma janela rolante. O post de Desvios Padrão de Corrida por Mensagens Subluminal foi crítico para que a fórmula da janela rolante funcionasse. Jim toma a soma de poder das diferenças quadradas dos valores versus abordagem Welfords de usar a soma das diferenças quadradas da média. Fórmula da seguinte forma: PSA hoje PSA (ontem) (((x hoje x hoje) - x ontem)) n x valor em sua série temporal n número de valores que você analisou até agora. Mas, para converter a Fórmula de Soma de Força Média para uma variedade de janelas, você precisa ajustar a fórmula para o seguinte: PSA hoje PSA ontem ((x hoje x hoje) - (x ontem x ontem) valor nx em sua série temporal n número de Os valores que você analisou até agora. Você também precisará da fórmula Rolling Simple Moving Average: SMA hoje SMA ontem ((x hoje - x hoje - n) valor nx em sua série temporal n período usado para sua janela rolante. A partir daí, você pode calcular o Variação da População Rodando: População Var hoje (PSA hoje n - s SMA hoje SMA hoje) n Ou a Variedade da Amostra de Rolagem: Amostra Var hoje (PSA hoje n - SMA hoje SMA hoje) (n - 1) Eu abordei esse tópico junto com Exemplo de código de Python em uma postagem no blog há alguns anos atrás, Running Variance. Espero que isso ajude. Por favor, note: forneci links para todas as postagens de blog e fórmulas de matemática em Latex (imagens) para esta resposta. Mas, devido à minha baixa reputação ( 10) Estou limitado a apenas 2 hiperlinks e absolutamente nenhuma imagem. Desculpe sobre isso. Espero que isso não remova o conteúdo. É uma abordagem de divisão e conquista que possui atualizações de hora O (log k), onde k é o número de amostras. Deve ser relativamente estável pelas mesmas razões pelas quais a soma em pares e os FFTs são estáveis, mas é um pouco complicado e a constante não é excelente. Suponhamos que tenhamos uma seqüência A de comprimento m com E médio (A) e variância V (A). E uma seqüência B de comprimento n com E médio (B) e variância V (B). Deixe C ser a concatenação de A e B. Nós temos Agora, encha os elementos em uma árvore vermelho-negra, onde cada nó é decorado com média e variância da subárvore enraizada nesse nó. Insira na eliminação direita à esquerda. (Uma vez que só acessou os fins, uma árvore de jogo pode ser O (1) amortizada, mas Im adivinhando amortizado é um problema para sua aplicação.) Se k for conhecido em tempo de compilação, você provavelmente pode desenrolar o estilo FFTW de loop interno . Respondeu Feb 28 11 às 21:53 Na verdade, o algoritmo Welfords pode AFAICT ser facilmente adaptado para calcular variância ponderada. E, ao colocar pesos em -1, você deve efetivamente cancelar os elementos. Eu não verifiquei a matemática se ela permitia pesos negativos, porém, em um primeiro aspecto, eu deveria realizar uma pequena experiência usando ELKI: 14 dígitos de precisão em relação ao algoritmo exato de duas passagens, isso é quase tanto quanto se pode esperar de Duplica. Note-se que Welford vem a algum custo computacional devido às divisões extras - demora cerca de duas vezes o algoritmo exato de duas passagens. Se o tamanho da sua janela for pequeno, pode ser muito mais sensível para realmente recalcular a média e então, em uma segunda passagem, a variância sempre. Eu adicionei esta experiência como teste de unidade para ELKI, você pode ver a fonte completa aqui: elki. dbs. ifi. lmu. debrowserelkitrunktestdelmuifidbselkimathTestSlidingVariance. java também se compara à variância exata de duas passagens. No entanto, em conjuntos de dados distorcidos, o comportamento pode ser diferente. Este conjunto de dados, obviamente, é distribuído uniformemente, mas também tentei uma matriz ordenada e funcionou. Respondeu Jan 5 13 às 13:47 respondido 24 de abril 14 às 18:32 Estou ansioso para ser provado errado sobre isso, mas eu não acho que isso pode ser feito rapidamente. Dito isto, uma grande parte do cálculo é acompanhar o EV sobre a janela, o que pode ser feito com facilidade. Vou deixar com a pergunta: você tem certeza de que precisa de uma função com janela. Se você não estiver trabalhando com janelas muito grandes, provavelmente é melhor usar um algoritmo predefinido bem conhecido. Respondeu em 28 de fevereiro às 20:57 Eu acho que acompanhar suas 20 amostras, Sum (X2 de 1..20) e Sum (X de 1..20) e, em seguida, repetir repetidamente as duas somas em cada iteração não é suficientemente eficiente É possível recalcular a nova variância sem somar, esquadrinhar, etc., todas as amostras de cada vez. Respondeu Feb 28 11 às 21:07 Eu acredito que esta solução é suscetível aos problemas de estabilidade mencionados no link na minha publicação original (johndcookstandarddeviation. html). Em particular, quando os valores de entrada e grande e a diferença são menores do que o resultado, pode ser negativo. Não tenho controle sobre a entrada, então eu preferiria evitar essa abordagem. Ndash Abiel Feb 28 11 às 21:11 Oh, eu vejo. Há algo que você possa dizer sobre a entrada Uso previsto É um problema que você só pode jogar mais bits em (flutuador de 64 bits, aritmética de arbitragem-precisão, etc.) Os erros de arredondamento desaparecem se você conseguir a entrada em figuras significativas, No ndash John Feb 28 11 às 21:16 Jason S: A variância do rolamento é o que é. Pode haver muito acontecendo na transição de 1 milhão para zero, mas essa é a natureza da besta. Isso, e os primeiros 980 dos 1000 1 milhão de valores estão fora da imagem quando a mudança ocorre de qualquer maneira. Meu comentário sugeriu que, se você tivesse números significativos suficientes em seus cálculos, nada disso importaria. Ndash John Feb 28 11 às 21:51 A entrada poderia realmente ser qualquer coisa. A magnitude do valor certamente pode estar nos trilhões e, enquanto os dados originais só terão precisão para alguns pontos decimais, os usuários poderão transformar seus dados (por exemplo dividindo por qualquer escalar) antes de calcular a variância. Ndash Abiel Feb 28 11 às 21:56 Por apenas 20 valores, é trivial adaptar o método exposto aqui (eu não disse rápido, no entanto). Você pode simplesmente pegar uma matriz de 20 dessas classes RunningStat. Os primeiros 20 elementos do fluxo são um pouco especiais, no entanto, uma vez que isso é feito, é muito mais simples: quando um novo elemento chegar, limpe a instância RunningStat atual, adicione o elemento a todas as 20 instâncias e incremente o contador (módulo 20) Que identifica a nova instância completa do RunningStat em qualquer momento, você pode consultar a instância completa atual para obter sua variante em execução. Você obviamente notará que essa abordagem não é realmente escalável. Você também pode notar que existe uma redenção nos números que mantemos (se você for com a classe completa do RunningStat). Uma melhoria óbvia seria manter os 20 minutos Mk e Sk diretamente. Não consigo pensar em uma fórmula melhor usando esse algoritmo particular, tenho medo de que sua formulação recursiva ligue nossas mãos. Respondeu 11 de março às 9: 01 Visão geral dos pontos de vista: gerenciamento de dados Parte 3: gerenciamento de dados sofisticado Podem ser úteis ferramentas analíticas poderosas se você puder trabalhar facilmente com seus dados. EViews fornece a mais ampla gama de ferramentas de gerenciamento de dados disponíveis em qualquer software econométrico. A partir de sua extensa biblioteca de operadores e funções matemáticas, estatísticas, de data, de cadeia e de séries temporais, para suporte abrangente para dados numéricos, de caráter e de data, o EViews oferece os recursos de gerenciamento de dados que você espera do software estatístico moderno. Extensa biblioteca de funções O EViews inclui uma extensa biblioteca de funções para trabalhar com dados. Além das funções matemáticas e trigonométricas padrão, o EViews fornece funções para estatísticas descritivas, estatísticas cumulativas e em movimento, estatísticas por grupo, funções especiais, operações de série temporizada e especializadas, arquivo de trabalho, mapa de valores e cálculos financeiros. EViews também fornece geradores de números aleatórios (Knuth, LEcuyer ou Mersenne-Twister), funções de densidade e funções de distribuição cumulativa para dezoito distribuições diferentes. Isso pode ser usado na geração de novas séries ou no cálculo de expressões escalares e de matrizes. EViews oferece uma extensa biblioteca de funções. Manipulação de expressões sofisticadas As ferramentas poderosas do EViews para o tratamento de expressões significam que você pode usar expressões praticamente em qualquer lugar que você use uma série. Você não precisa criar novas variáveis ​​para trabalhar com o logaritmo de Y, a média móvel de W, ou a proporção de X para Y (ou qualquer outra expressão válida). Em vez disso, você pode usar a expressão no computação estatística descritiva, como parte de uma equação ou especificação do modelo, ou na construção de gráficos. Quando você prevê usar uma equação com uma expressão para a variável dependente, EViews (se possível) permitirá que você preveja a variável dependente subjacente e ajustará o intervalo de confiança estimado em conformidade. Por exemplo, se a variável dependente for especificada como LOG (G), você pode escolher prever o log ou o nível de G, e calcular o intervalo de confiança apropriado, possivelmente assimétrico. Trabalhe diretamente com expressões em lugar de variáveis. Links, fórmulas e valores Os objetos do Maps Link permitem que você crie séries que se liguem a dados contidos em outros arquivos de trabalho ou páginas do arquivo de trabalho. Os links permitem combinar dados em diferentes freqüências ou combinar mesclar em dados de uma página de resumo em uma página individual, de modo que os dados sejam atualizados dinamicamente sempre que os dados subjacentes mudam. Da mesma forma, dentro de um arquivo de trabalho, as fórmulas podem ser atribuídas a séries de dados para que as séries de dados sejam recalculadas automaticamente sempre que os dados subjacentes são modificados. Os rótulos de valor (por exemplo, quotHighquot, quotMedquot, quotLowquot, correspondente a 2, 1, 0) podem ser aplicados em séries numéricas ou alfa para que os dados categóricos possam ser exibidos com rótulos significativos. As funções internas permitem que você trabalhe com os valores subjacentes ou mapeados ao executar cálculos. Os links podem ser usados ​​para conversão de freqüência dinâmica ou combinação de combinações. Estruturas e tipos de dados Os EViews podem lidar com estruturas de dados complexas, incluindo dados datados regulares e irregulares, dados de seção transversal com identificadores de observação e dados de painel datados e não datados. Além dos dados numéricos, um arquivo de trabalho EView também pode conter dados alfanuméricos (seqüência de caracteres) e séries contendo datas, que podem ser manipuladas usando uma extensa biblioteca de funções. O EViews também fornece uma ampla gama de ferramentas para trabalhar com conjuntos de dados (workfiles), dados que incluem a capacidade de combinar séries por critérios complexos de mesclagem de fósforo e procedimentos de arquivo de trabalho para alterar a estrutura de seus dados: junte, adicione, subaquise, redimensione, classifique e Remodelar (apagar e desmarcar). Os arquivos de trabalho EViews podem ser altamente estruturados. Enterprise Edition Suporte para ODBC, FAME TM. DRIBase e Haver Analytics Databases Como parte da EViews Enterprise Edition (uma opção de custo extra sobre EViews Standard Edition), o suporte é fornecido para acesso a dados contidos em bancos de dados relacionais (via drivers ODBC) e em bancos de dados em uma variedade de formatos proprietários usados Por fornecedores comerciais de dados e banco de dados. Open Database Connectivity (ODBC) é um padrão suportado por muitos sistemas de banco de dados relacionais, incluindo Oracle, Microsoft SQL Server e IBM DB2. O EViews permite que você leia ou escreva tabelas inteiras de bancos de dados ODBC ou crie um novo arquivo de trabalho a partir dos resultados de uma consulta SQL. EViews Enterprise Edition também suporta acesso aos bancos de dados do formato FAME TM (baseados em locais e no servidor), bancos de dados DRIPro e DRIBase da Global Insights, bases de dados DLL da Haver Analytics, Datastream, FactSet e economia da Moodys. A interface de banco de dados EViews familiar e fácil de usar foi estendida a esses formatos de dados para que você possa trabalhar com bancos de dados estrangeiros tão facilmente quanto os bancos de dados EView nativos. Conversão de frequência Quando você importa dados de um banco de dados ou de outro arquivo de trabalho ou página do arquivo de trabalho, ele é convertido automaticamente na freqüência do projeto atual. EViews oferece muitas opções para conversão de frequência e inclui suporte para a conversão de dados diários, semanais ou de frequência irregular. A série pode ser atribuída a um método de conversão preferido, permitindo que você use diferentes métodos para diferentes séries sem precisar especificar o método de conversão sempre que uma série é acessada. Você pode até criar links para que a série de dados convertidos em freqüência seja recalculada automaticamente sempre que os dados subjacentes forem modificados. Especifique uma conversão automática específica da série ou selecione um método específico. Para obter informações sobre vendas, envie um e-mail para as vendas. Para obter suporte técnico, envie um e-mail para o Suporte. Inclua seu número de série com toda a correspondência por e-mail. Para obter informações de contato adicionais, consulte nossa página Sobre.

No comments:

Post a Comment