Moving average lowess


LOESS é um dos muitos métodos modernos de modelagem que se baseiam em métodos clássicos, como a regressão linear e não linear dos mínimos quadrados. Métodos de regressão moderna são projetados para lidar com situações em que os procedimentos clássicos não funcionam bem ou não podem ser efetivamente aplicados sem trabalho indevido. O LOESS combina grande parte da simplicidade da regressão linear dos mínimos quadrados com a flexibilidade da regressão não linear. Faz isto montando modelos simples aos subconjuntos localizados dos dados para construir uma função que descreve a parte deterministic da variação nos dados. ponto por ponto. De fato, uma das principais atrações deste método é que o analista de dados não é obrigado a especificar uma função global de qualquer forma para ajustar um modelo para os dados, apenas para ajustar os segmentos dos dados. O trade-off para esses recursos é o aumento da computação. Por ser tão computacionalmente intensivo, o LOESS teria sido praticamente impossível de usar na época em que a regressão dos mínimos quadrados estava sendo desenvolvida. A maioria dos outros métodos modernos de modelagem de processos são semelhantes à LOESS a este respeito. Estes métodos foram conscientemente concebidos para utilizar a nossa capacidade computacional actual para a mais completa vantagem possível para atingir objectivos não facilmente alcançados por abordagens tradicionais. Definição de um LOESS Modelo LOESS, originalmente proposto por Cleveland (1979) e mais desenvolvido por Cleveland e Devlin (1988). Denota especificamente um método que é (de certa forma) mais descritivamente conhecido como regressão polinomial localmente ponderada. Em cada ponto do conjunto de dados, um polinômio de baixo grau é ajustado a um subconjunto dos dados, com valores da variável explicativa próximos ao ponto cuja resposta está sendo estimada. O polinômio é ajustado usando mínimos quadrados ponderados, dando mais peso a pontos próximos ao ponto cuja resposta está sendo estimada e menos peso a pontos mais afastados. O valor da função de regressão para o ponto é então obtido avaliando o polinômio local usando os valores da variável explicativa para esse ponto de dados. O ajuste LOESS está completo depois que os valores das funções de regressão foram computados para cada um dos pontos de dados (n). Muitos dos detalhes deste método, tais como o grau do modelo polinomial e os pesos, são flexíveis. O intervalo de opções para cada parte do método e os padrões padrão são brevemente discutidos a seguir. Subconjuntos localizados de dados Os subconjuntos de dados usados ​​para cada ajuste de mínimos quadrados ponderados em LOESS são determinados pelo algoritmo de vizinhos mais próximo. Uma entrada especificada pelo usuário para o procedimento chamado largura de banda ou parâmetro de suavização determina a quantidade de dados usada para ajustar cada polinômio local. O parâmetro de suavização (q) é um número entre ((d1) / n) e (1), com (d) denotando o grau do polinômio local. O valor de (q) é a proporção de dados utilizados em cada ajuste. O subconjunto de dados usado em cada ajuste de mínimos quadrados ponderados é composto pelos pontos (nq) (arredondado ao próximo maior inteiro) cujos valores das variáveis ​​explicativas estão mais próximos do ponto em que a resposta está sendo estimada. (Q) é chamado de parâmetro de suavização porque controla a flexibilidade da função de regressão LOESS. Valores grandes de (q) produzem as funções mais suaves que se movem menos em resposta a flutuações nos dados. Quanto menor (q), mais próxima será a função de regressão em conformidade com os dados. Utilizar um valor demasiado pequeno do parâmetro de suavização não é desejável, uma vez que a função de regressão acabará por começar a capturar o erro aleatório nos dados. Valores úteis do parâmetro de suavização encontram-se tipicamente na gama de 0,25 a 0,5 para a maioria das aplicações LOESS. Grau de Polinômios Locais Os polinômios locais ajustados a cada subconjunto dos dados são quase sempre de primeiro ou segundo grau que é, ou localmente linear (no sentido de linha reta) ou localmente quadrático. Usando um polinômio de zero graus transforma LOESS em uma média móvel ponderada. Esse modelo local simples pode funcionar bem em algumas situações, mas nem sempre pode aproximar-se suficientemente da função subjacente. Os polinômios de grau mais alto funcionariam em teoria, mas produzem modelos que não estão realmente no espírito de LOESS. LOESS baseia-se nas idéias de que qualquer função pode ser bem aproximada em um bairro pequeno por um polinômio de baixa ordem e que modelos simples podem ser ajustados facilmente aos dados. Os polinômios de alto grau tendem a sobrecarregar os dados em cada subconjunto e são numericamente instáveis, dificultando cálculos precisos. Como mencionado acima, a função de peso dá maior peso aos pontos de dados mais próximos ao ponto de estimação e o menor peso aos pontos de dados que estão mais distantes. O uso dos pesos baseia-se na idéia de que pontos próximos uns dos outros na variável explicativa espaço são mais propensos a estarem relacionados uns aos outros de uma maneira simples do que pontos que estão mais distantes. Seguindo essa lógica, os pontos que provavelmente seguem o modelo local influenciam melhor o parâmetro de modelo local mais estimado. Os pontos que são menos propensos a realmente se conformar ao modelo local têm menor influência nas estimativas dos parâmetros do modelo local. A função de peso tradicional usada para LOESS é a função de peso tri-cubo, w (x) à esquerda (1 - x3) 3 mboxEarl F. Glynn Stowers Instituto de Pesquisa Médica 18 março 2005 Esta TechNote mostra exemplos de loess (local polinomial regressão montagem) Suavização para vários valores quotspanquot. A documentação on-line R (loess) diz que o valor de span padrão é 0,75, mas não dá muita orientação, nem exemplos visuais, de como o valor de extensão afeta a suavização. Além de simplesmente suavizar uma curva, a função R loess pode ser usada para atribuir pontos de dados ausentes. Um exemplo de imputação de dados com loess é mostrado. Vamos tomar uma curva senoidal, adicionar algum quotnoisequot a ele e, em seguida, ver como o parâmetro loess quotspanquot afeta a aparência da curva suavizada. 1. Criar uma curva senoidal e adicionar algum ruído: gt período lt - 120 gt x lt - 1: 120 gt y lt-sin (2pix / period) runif (comprimento (x), - 1,1) 2. Traçar os pontos 3. Aplicar a suavização de loess usando o valor de span padrão de 0.75: gt y. loess lt - 4. Calcule valores suavizados de loess para todos os pontos ao longo da curva: gt y. predict lt - predict (y. loess, data. frame (xx)) 5 6. Utilize a função R quotoptimizequot para encontrar o pico da curva suavizada de loess e plotar esse ponto: gt pico lt - otimizar (função (x, modelo) prever (Modelo, data. frame (xx)), c (min (x), max (x)), máximoTRUE, modely. loess) gt pontos (peakmaximum, peakobjective, pchFILLED. CIRCLElt-19) 7. Repita os passos 1-6 Acima para vários valores de intervalo. Um script foi criado para automatizar isso. Execute este script inserindo a seguinte instrução R: 8. Compare quotnoisequot de uma distribuição uniforme de -1 para 1 (acima) para ruído gaussiano, com média 0 e desvio padrão 1.0 (abaixo): 9. Utiliza loess para imputar pontos de dados . Vamos começar por tomar uma curva seno com o ruído, como calculado acima, mas deixar de fora 15 dos 120 pontos de dados usando Rs quotamamostra função: período gt lt - 120 gt FullList lt - 1: 120 gt x lt - FullList gt quotrandomlyquot fazer 15 de Os pontos quotmissingquot gt MissingList lt - amostra (x, 15) gt xMissingList lt-NA gt Criar curva seno com ruído gt y lt - sin (2pix / period) runif (comprimento (x), - 1,1) 10. Como anteriormente, use as funções loess e predict para obter valores suavizados nos pontos definidos: gt y. loess (gt y. loess), gt y. loess (gt y. loess) Lt - loess (yx, span0.75, data. frame (xx, yy)) gt y. predict lt - predict (y. loess, data. frame (xFullList)) gt Trace a curva suavizada de loess mostrando lacunas para dados perdidos gt (X, y. predict, coli) 11. Use as funções loess e predict para também imputar os valores nos pontos ausentes: gt Mostrar pontos imputados para preencher lacunas gt y. Missing lt - predict (y. loess, data. 12parte o ajuste suavizado de loess e os pontos imputados para vários valores de span: Valores de espaçamento tão pequenos como 0,10 não proporcionam muita suavização e podem resultar em Uma curva quotjerkyquot. Valores de span tão grandes quanto 2,0 fornecem talvez demasiada suavização, pelo menos nos casos mostrados acima. Em geral, o valor padrão de 0.75 funcionou bastante bem em quotfindingquot a curva de seno. Atualizado em 24 de junho de 2005 Neste post, eu providenciarei o código R que implementa a combinação de repetição de quantile com o LOESS mais suave para criar um tipo de 8239quantile LOESS8221 (por exemplo, 8220Local Quantile Regression8221). Este método é útil quando a necessidade surgir para caber robusto e resistente (precisa ser verificado) uma linha suavizada para um quantil (um exemplo para tal caso é fornecido no final deste post). Se você deseja usar a função em seu próprio código, basta executar dentro de seu console R a seguinte linha: Background Eu vim uma cruz esta idéia em um artigo intitulado 8220Alta análise de dados de throughput em genética comportamental 8221 por Anat Sakov, Ilan Golani, Dina Lipkind E meu conselheiro Yoav Benjamini. Do resumo: Nos últimos anos, surgiu uma necessidade crescente em diferentes campos, para o desenvolvimento de sistemas computacionais para análise automatizada de grandes quantidades de dados (alto throughput). Lidar com estrutura de ruído não padronizada e outliers, que poderia ter sido detectado e corrigido na análise manual, deve agora ser incorporado ao sistema com a ajuda de métodos robustos. 8230 usamos uma mistura não padronizada de métodos robustos e resistentes: LOWESS e mediana de execução repetida. A motivação para esta técnica veio de 8220Path data8221 (de ratos), que é propenso a sofrer de ruído e outliers. Durante a progressão um sistema de rastreamento pode perder a pista do animal, inserindo (ocasionalmente muito grande) outliers nos dados. Durante prolongada, e mais ainda durante prisões, outliers são raros, mas o ruído de gravação é grande em relação ao tamanho real do movimento. As implicações estatísticas são que os dois tipos de comportamento requerem diferentes graus de suavização e resistência. Uma complicação adicional é que os dois intercâmbio muitas vezes ao longo de uma sessão. Como resultado, a solução estatística adotada não só precisa suavizar os dados, mas também reconhecer, adaptativamente, quando há prisões. Até onde sabemos, nenhuma técnica de suavização existente ainda tem sido capaz de cumprir esta dupla tarefa. Nós elaboramos as fontes de ruído e propomos uma combinação de LOWESS (Cleveland, 1977) e a mediana de execução repetida (RRM Tukey, 1977) para lidar com esses desafios. Se tudo o que queríamos era realizar média móvel (média de corrida) Sobre os dados, usando R, poderíamos simplesmente usar a função rollmean do pacote zoo. Mas desde que nós quisemos também permitir o alisamento do quantil, nós giramos para usar a função do rollapply. R para a execução de Quantile LOESS Aqui está a função R que implementa o cumento de execução repetido LOESS (com implementação para usar isto com uma implementação simples para usar a média em vez de quantile): Mais sobre a matemática do algoritmo pode ser encontrada no original Artigo. Exemplo: Previsão do cenário de caso 8220worst8221 Níveis de ozônio usando a temperatura O exemplo a seguir usa o conjunto de dados 8220airquality8221 que nos dá 8220Dimensões diárias da qualidade do ar em Nova York, maio a setembro de 1973.8221 Com várias variáveis, vamos apenas olhar para o nível de Ozônio e Temperatura. Uma vez que altos níveis de ozônio reduzem a qualidade do ar que respiramos, eu gostaria de dar uma previsão do nível de ozônio previsto (por exemplo: 95 nível de ozônio) usando a temperatura do mesmo dia. Como você tentaria fazer algo assim? A primeira solução seria usar a função 8220rq8221 do pacote de Regressão de Quantile. Mas se olharmos para os dados, veremos que a montagem de uma linha reta não é adequada para os nossos dados (uma vez que temos uma mudança brusca na inclinação em torno da temperatura de 80 graus). Esta é uma situação em que Quantile LOESS (de 95) pode revelar-se útil. Aqui está o código para produzir o enredo acima. Atualizado: Eu mudei no nome do artigo8217s de LOWESS para LOESS Depois de um e-mail atencioso de Dirk Eddelbuettel eu corri-me de usar LOWESS para LOESS todo o artigo. Aqui está uma explicação para por que eu fiz isso e também por que eu corrigei 8211 Você tem um post intitulado 8216quantile lowess8217 mas você então (corretamente) usa loess. Você entende que existem duas funções lowess () e loess () O primeiro é classificar-de um antecessor, mas ninguém, mas realmente livros antigos ainda fala sobre isso. Google para (talvez) 8216Brian Ripley lowess loess8217 como ele dirigiu esse ponto casa algumas vezes em r-help. Obrigado Dirk, 8230 No que diz respeito ao lowess loess, notei que este é realmente o caso quando eu escrevi o post, mas eu estava em uma situação difícil: Por um lado, LOESS é a abordagem mais moderna (eo que eu usei no script) . Mas, por outro lado, LOWESS é o que os autores do original article8217s usando. Eu acabei decidindo que eu chamaria a maneira que eu fiz, mas depois de ler o que você escreveu, eu percebi que cometi um erro. Eu passei pelo artigo e corrigei o lowess para loess, enquanto também adicionando um parágrafo para explicar o meu raciocínio. Update: sobre o método de ser robusto Após o comentário Nicholas8217s eu fui verificar e veio através de uma linha de ajuda R por Martin Maechler explicando como atualizar meu código de cima para que o sistema será robusto. Martin escreveu (Minhas notas são adicionadas): Um gotcha ao comparar lowess para loess is8211 particularmente se você estivesse acostumado ao fato de que lowess () por padrão é resistente a outliers: lowess () por padrão tem 8220iter 38243 o que significa que ele usa 3 (Também chamado 8220huberizing8221 para Huber (1960)) iterações. Loess (), por outro lado tem um argumento family8217 com valores possíveis 8220gaussian8221 e 8220symmetric8221 (pode ser abreviado) onde o primeiro é o padrão (infelizmente, na minha opinião). I. e. Loess () por padrão não é resistente / robusto, onde lowess () é. 8230 No entanto recomendo usar loess (8230. família 8220sym8221) rotineiramente. Se você achar este código útil, por favor, deixe-me saber sobre ele nos comentários.

Comments

Popular Posts