Tuesday 19 December 2017

Stata 11 média móvel


Stata: análise de dados e software estatístico Nicholas J. Cox, Universidade de Durham, Reino Unido Christopher Baum, Boston College egen, ma () e suas limitações Statarsquos comando mais óbvio para o cálculo de médias móveis é a função ma () de egen. Dada uma expressão, ela cria uma média móvel daquela expressão. Por padrão, é tomado como 3. deve ser estranho. No entanto, como a entrada manual indica, egen, ma () não podem ser combinados com varlist:. E, por esse motivo, não é aplicável aos dados do painel. Em qualquer caso, fica fora do conjunto de comandos especificamente escritos para séries temporais veja séries temporais para detalhes. Abordagens alternativas Para calcular as médias móveis para os dados do painel, existem pelo menos duas opções. Ambos dependem do conjunto de dados ter sido o tsset de antemão. Isto vale muito a pena fazer: não só você pode economizar várias vezes especificando a variável do painel e a variável de tempo, mas o Stata se comporta de forma inteligente com quaisquer lacunas nos dados. 1. Escreva sua própria definição usando gerar Usando operadores de séries temporais, como L. e F.. Dê a definição da média móvel como o argumento para uma declaração de geração. Se você fizer isso, você, naturalmente, não está limitado às médias móveis ponderadas (não ponderadas), calculadas por egen, ma (). Por exemplo, as médias móveis de três períodos, igualmente ponderadas, seriam dadas e alguns pesos podem ser facilmente especificados: você pode, é claro, especificar uma expressão como log (myvar) em vez de um nome de variável como myvar. Uma grande vantagem desta abordagem é que a Stata faz automaticamente o que é certo para os dados do painel: os valores avançados e atrasados ​​são elaborados dentro dos painéis, assim como a lógica dita que deveria ser. A desvantagem mais notável é que a linha de comando pode ficar bastante longa se a média móvel envolver vários termos. Outro exemplo é uma média móvel unilateral baseada apenas em valores anteriores. Isso pode ser útil para gerar uma expectativa adaptativa sobre o que uma variável será baseada puramente em informações até à data: o que alguém poderia prever para o período atual com base nos quatro últimos valores, usando um esquema de ponderação fixa (um atraso de 4 períodos pode ser Especialmente comumente usado com timeseries trimestrais.) 2. Use egen, filter () de SSC Use o filtro de função egen () do usuário do pacote egenmore em SSC. No Stata 7 (atualizado após 14 de novembro de 2001), você pode instalar este pacote depois do qual ajuda, além disso, aponta para detalhes no filtro (). Os dois exemplos acima serão renderizados (Nesta comparação, a abordagem de geração é talvez mais transparente, mas veremos um exemplo do oposto em um momento.) Os atrasos são um número. Leva a desvios negativos: neste caso -11 se expande para -1 0 1 ou liderar 1, lag 0, lag 1. Os coeficientes, outro número, multiplicam os itens atrasados ​​ou atrasados ​​correspondentes: neste caso, esses itens são F1.myvar . Myvar e L1.myvar. O efeito da opção de normalização é escalar cada coeficiente pela soma dos coeficientes de modo que o coeficiente de coeficiente (1 1 1) seja equivalente aos coeficientes de 13 13 13 e a normalização de coef (1 2 1) seja equivalente aos coeficientes de 14 12 14 . Você deve especificar não apenas os atrasos, mas também os coeficientes. Como egen, ma () fornece o caso igualmente ponderado, a lógica principal para egen, filter () é suportar o caso pontualmente ponderado, para o qual você deve especificar coeficientes. Também pode-se dizer que obrigar os usuários a especificar coeficientes é uma pressão pequena sobre eles para pensar sobre os coeficientes que eles querem. A principal justificativa para os pesos iguais é, contudo, a simplicidade, mas pesos iguais têm propriedades de domínio de freqüência péssimas, para mencionar apenas uma consideração. O terceiro exemplo acima poderia ser qualquer um dos quais é tão complicado quanto a abordagem de geração. Há casos em que egen, filter () dá uma formulação mais simples do que gerar. Se você quer um filtro binomial de nove séculos, que os climatologistas acham útil, então parece talvez menos horrível do que, e mais fácil de conseguir, do mesmo modo, assim como com a abordagem de geração, egen, filter () funciona corretamente com os dados do painel. Na verdade, como afirmado acima, depende do conjunto de dados ter sido tsset de antemão. Uma dica gráfica Depois de calcular suas médias móveis, você provavelmente vai querer olhar para um gráfico. O comando do usuário com tsgraph é inteligente sobre conjuntos de dados tsset. Instale-o em um Stata 7 atualizado por ssc inst tsgraph. E quanto a subconjunto com se nenhum dos exemplos acima faz uso de restrições if. Na verdade egen, ma () não permitirá se for especificado. Ocasionalmente, as pessoas querem usar se ao calcular médias móveis, mas seu uso é um pouco mais complicado do que normalmente. O que você esperaria de uma média móvel calculada com if. Vamos identificar duas possibilidades: interpretação fraca: não quero ver nenhum resultado para as observações excluídas. Interpretação forte: eu nem quero que você use os valores para as observações excluídas. Aqui está um exemplo concreto. Suponha que, como consequência de alguma condição, as observações 1-42 estão incluídas, mas não as observações 43. Mas a média móvel para 42 dependerá, entre outras coisas, do valor para a observação 43, se a média se estender para trás e para frente e for pelo menos de 3, e dependerá de algumas das observações 44 em algumas circunstâncias. Nosso palpite é que a maioria das pessoas iria para a interpretação fraca, mas se isso é correto, egen, filter () não é compatível se também. Você sempre pode ignorar o que você não quer ou mesmo definir valores indesejados a perder depois, usando a substituição. Uma nota sobre resultados faltantes nas extremidades da série Como as médias móveis são funções de atrasos e ligações, egen, ma () produz ausente onde os atrasos e as derivações não existem, no início e no final da série. Uma opção de nomiss força o cálculo de médias móveis mais curtas e não centradas para as caudas. Em contraste, nem gerar nem egen, filter () faz, ou permite, qualquer coisa especial para evitar resultados perdidos. Se algum dos valores necessários para o cálculo estiver faltando, esse resultado está faltando. Cabe aos usuários decidir se e quais cirurgias corretivas são necessárias para essas observações, presumivelmente depois de analisar o conjunto de dados e considerando qualquer ciência subjacente que possa ser trazida. Movimento: Lowess Trabalhamos com dados do Levantamento de Agregados da Colômbia WFS , Realizado em 1975-76. Eu tabulei a distribuição de idade de todos os membros da família e salvou-o em um arquivo ascci, que agora lemos e traçamos: como você pode ver, a distribuição parece um pouco menos suave do que os dados das Filipinas que estudamos anteriormente. Você pode calcular o índice Myers para esta distribuição. Executar Meios e Linhas. A maneira mais simples de alisar um diagrama de dispersão é usar uma média móvel. Também conhecido como um meio de corrida. A abordagem mais comum é usar uma janela de 2k 1 observações, k à esquerda e k à direita de cada observação. O valor de k é um trade off entre a suavidade da bondade de ajuste. Deve ser tomado um cuidado especial nos extremos da gama. Stata pode calcular os meios de corrida através de lowess com as opções significa e agora. Um problema comum com os meios de execução é o viés. Uma solução é usar pesos que dão mais importância aos vizinhos mais próximos e menos aos mais distantes. Uma função de peso popular é Tukeys tri-cube, definido como w (d) (1-d 3) 3 para d lt 1 e 0 caso contrário, onde d é a distância ao ponto alvo expresso como uma fração da largura de banda. Stata pode fazer este cálculo via lowess com a opção significa se você omite agora. Uma solução ainda melhor é usar linhas em execução. Definimos novamente um bairro para cada ponto, tipicamente os vizinhos mais próximos de cada lado, encaixam uma linha de regressão para os pontos do bairro e, em seguida, usá-lo para prever um valor mais suave para a observação do índice. Isso parece muito trabalho, mas os cálculos podem ser feitos de forma eficiente usando fórmulas de atualização de regressão. Stata pode calcular uma linha em execução via lowess se você omitir o significado, mas incluir o noweight. Melhor ainda é usar linhas de execução ponderadas. Dando mais peso às observações mais próximas, o que é o que o menor não faz. Uma variante segue essa estimativa com algumas iterações para obter uma linha mais robusta. Esta é claramente a melhor técnica da família. Statas lowess usa uma linha de corrida ponderada se você omitir o significado médio e o R imediato implementa o menor pragente através das funções lowess () e o loess mais novo (), que usa uma interface de fórmula com um ou mais preditores e padrões um pouco diferentes. O grau de parâmetro controla o grau do polinômio local o padrão é 2 para quadrática, as alternativas são 1 para linear e 0 para meios de corrida. Ambas as implementações podem usar um estimador robusto, com o número de iterações controladas por um parâmetro iter ou iterações. Digite loess e lowess na consola R para obter mais informações. Em ggplot (), você pode superar um pouco mais suave ao chamar geomsmooth (). A figura abaixo mostra os dados colombianos e um pouco mais suave com uma extensão ou largura de banda igual a 25 dos dados. Você pode querer tentar diferentes malhas para ver como os resultados variam. Previsão de digitação Revisitada O alisamento da distribuição de idade fornece uma maneira melhor de avaliar a preferência de dígito do que a mistura de Myers. Vamos calcular o último dígito da idade e tabulá-lo em toda a gama de dados usando as freqüências observadas e um menor. As frequências brutas mostram evidências de preferência para as idades que terminam em 0 e 5, o que é muito comum, e provavelmente 2 também. Agora usamos o peso suave como as frequências suavizadas mostram que esperamos menos pessoas em dígitos mais altos, mesmo em uma distribuição suave, com mais terminando em 0 do que 9. Agora estamos prontos para calcular uma preferência de índice de dígito, definida como metade do Soma das diferenças absolutas entre frequências observadas e suaves: vemos que precisamos reorganizar 5.5 das observações para eliminar a preferência dos dígitos. Você pode comparar esse resultado com o índice Myers. Copie 2017 Germaacuten Rodriacuteguez, Universidade de Princeton Imagine que você tem dados sobre os preços de muitos produtos. Para cada um dos produtos, você grava informações de preços semanais. Clear set obs 200 gen prodid n Cada produto tem um preço médio único de produção genérica (5) 7 Você tem dados sobre preços semanais por 200 semanas. Expandir 200 bysort prodid: gen tn label var t Week Há também algumas variações sazonais gen seasonal .2sin (pit50), bem como uma tendência de tendência de tempo geral tendência genera t.005 A primeira observação não está correlacionada com qualquer coisa gen price prodprice2.5 tendência Rpoisson (10) 10 se t1 substituir preço prodprice2 tendência sazonal .7pricen-1 .3rpoisson (10) 10 se t2 substituir preço tendência de produção sazonal .5pricen-1 .2pricen-2 .3rpoisson (10) 10 se t3 substituir preço tendência de produção sazonal .3pricen-1 .2pricen-2 .2pricen-3 .3rpoisson (10) 10 se t4 substituir a tendência do preço de produção sazonal .3pricen-1 .175pricen-2 .125pricen-3 .1pricen-4 .3rpoisson (10) 10 se tgt4 Criar Uma globabl para armazenar global twograph forv i 16 global twograph (preço da linha t if prodid i) twoway twograph, legenda (off) título (Tendências de preços verdadeiras para os primeiros seis produtos) Agora vamos imaginar que os dados gerados acima são a verdadeira informação de preço que É fundamentalmente inobservável. Em vez disso, você tem várias coleções de dados por semana em preços que variam por algum erro addativo aleatório. Expandir 3 bysort prodid t: gen prodobs n gen pricecollect price rnormal (). 25 No entanto, a informação de preço que você possui tem algumas entradas que 10 incorretamente foram erradas. Gen entryerror rbinomial (1, .1) gen scalarerror rormal () 1 gener priceobs pricecollect (1entryerrorscalarerror) label var priceobs Preço Gravado Além disso, 35 de seus dados de preço nunca foram coletados gen faltando rbinomial (1, .35) drop if missing1 Create Um globabl para armazenar global twograph forv i 16 global twograph (preço da linha t if prodid i amp prodobs1) twoway twograph, legenda (desligado) título (Tendências de preços observadas para os primeiros seis produtos) mantenha t pricesobs prodid entryerror Estou mantendo o erro de entrada no Conjunto de dados como meio de comparação, embora não fosse observado diretamente. A questão é: você pode agora com esses dados bagunçados recuperar dados de preços que são semelhantes ao original. A primeira coisa que devemos explorar é a duplicação de dados gravados. Scatter priceobs t if prodid 1, title (É fácil ver desvios individuais) É fácil ver desvios individuais, mas não queremos passar por todos os 200 produtos para identificar valores-limite de preço individualmente. Queremos criar um sistema para identificar outliers. Permite gerar uma média por produto e por tempo de produção: média de prêmio egen (priceobs) Permite sinalizar qualquer observação que seja 120 maior do que a média ou 80 inferior à média. Gen flag (pricemean gt priceobs1.2 pricemean lt pricesobs.8) Vamos ver como ele está funcionando: dois (scatter priceobs t if prodid 1) (scatter priceobs t if prodid 1 amp flag1. Msymbol (lgx)). Título (alguns dos outliers podem ser identificados apenas olhando a média) legend (off) corr flag entryerror Nossa bandeira está correlacionada com cerca de 45 com os erros de entrada. Isso é bom, mas podemos fazer melhor. Eu proponho que ao invés de usar apenas o significado que nós construímos uma média móvel de preços e ver como cada entrada se desvia da média. O único problema é que o comando de média móvel requer xtset e isso requer apenas uma entrada por período de tempo. Então, eu digo que restabilizamos a variável de tempo e adicionamos como se gravamos em um horário diferente da semana o número de observação. Precisamos gerar prodobs recentemente, uma vez que não sabemos qual observação falta em cada produto. Bysort prodid t: gen prodobs n gen t2 t4 prodobs xtset define o id do painel de dados do painel e o nível da série temporal. Xtset prodid t2 O comando que usamos é tssmooth. Ele é codificado de tal forma que, especificando ma significa média móvel e a janela diz a Stata quantos períodos de tempo contar e em quanto atrasado na aeração móvel. Esse comando pode demorar um pouco. Tssmooth ma mapriceobspriceobs, janela (23 0 23) 23 está em vigor 5 semanas adiante e 5 semanas atrás O 0 diz stata para não incluir-se nessa média A média móvel dois (scatter priceobs t if prodid 1) (mapriceobs t if prodid 1) (linha pricemean t if prodid 1). Título (A média móvel é menos aceitável para outliers) A média móvel é mais estável do que apenas a média do tempo. Vamos tentar sinalizar usando o limite médio móvel drop flag2 gen flag2 (map tickobs gt priceobs1.2 mapriceobs lt priceobs.8) dois (scatter priceobs t if prodid 1) (scatter priceobs t if prodid 1 amp flag21. Msymbol (lgx)). Título (The Moving Average também pode ser útil) legenda (desligado) corr flag2 entryerror Solte nossa queda de dados com sinalização, se flag21 Reduzir para os preços semanais de colapso de nível, por etiqueta (prodid t) var priceobs Preço médio observado para 16 16 global twograph (scatter Preços obtidos se prodid i) twoway twograph, legend (off) título (Tendências de preços observadas para os primeiros seis produtos) Os dados estão muito melhores, mas ainda temos alguns valores indesejados indesejados. Poderíamos aproveitar as tendências dos produtos cruzados para ajudar a identificar os valores atípicos dentro dos preços dos produtos. Por exemplo, a média do preço médio (preços) é um preço reduzido se o prodid 1 prevê o resid1, o valor residual dos preços se o prodid 2 prevê resid2, os preços residuais residuais aveprice se prodid 3 prevêem resid3, residual twoway (linha resid1 t if prodid 1) (linha Preços se tido 1) (linha resid2 t se prodid 2) (preço da linha t se prodid 2) (linha resid3 t se prodid 3) (preço da linha t se prodid 3). Título (Os resíduos são indicadores claros de outliers) lenda (desligado) Finalmente, deixe-nos soltar observações com resíduos que são maiores que 1,5 desvios-padrão da média. Por exemplo, para o preço de importação de i1200, se o prodid eu prever residtemp, resíduo residual residtemp substituir bandeira ((residtemp-r (média) gtr (sd) 1,5 residtemp-r (média) drop residualtempLit veja como ele está funcionando: dois (scatter priceobs t if Prodid 2) (scatter priceobs t if prodid 2 amp flag1. Msymbol (lgx)). Title (Agora apenas tentando remover alguns outliers finais) lenda (off) Ploting product 1 preço relativo a outliers. Global twograph forv i 16 global twograph (linha Se você estiver com o prodid i) Finalmente, deixe cair a queda outliers se flag Um gráfico final global twograph forv i 16 global twograph (scatter priceobs t if prodid i) twoway twograph, legend (off) title (Tendências de preços observadas para os primeiros seis produtos) Não como Limpa como nosso primeiro gráfico, mas definitivamente melhorou muito. Anúncio 29 de maio de 2017, 08:14 Tenho uma pergunta aparentemente fácil que está me causando alguns problemas. A tabela a seguir é uma parte do meu conjunto de dados, que está em aquisições firmes. Transação de valor É o preço pago para adquirir um certo abeto M, id de adquirente é um id exclusivo para um adquirente, e data é a data de uma aquisição. Gostaria de calcular a média móvel do valor de transação de aquisições de uma empresa feita nos últimos 4 anos. Parece haver dois problemas aqui. A primeira é que a data é registrada em dias, e eu gostaria de ter a média móvel em termos de anos. Em segundo lugar, como você pode ver, nem todas as empresas fizeram vários negócios. Por exemplo, a acquirorid919 não fez nenhuma aquisição no passado. Para esses casos, gostaria que a média móvel reportasse um valor de 0. Após o manual da série temporal e outros tópicos, fiz a seguinte Nota que 1460 corresponde ao número de dias de quatro anos 3654. Esse código, no entanto, gerou um erro Que disse que 1460 está fora da faixa permitida. Você sabe, por acaso, como resolver isso. Parece que tssmooth ma impõe um limite de pouco menos de 1000 por sua opção de janela (). Esta é apenas uma média móvel, mas é bastante taxando sobre uma janela tão longa. Eu estava prestes a anunciar que o tsegen (do SSC) acabou de ser atualizado para superar o limite Statas de 100 operadores de séries temporais únicos em um comando. Este é um exemplo de como usá-lo para gerar sua média móvel. Eu não sei o que você quer dizer, querendo a média móvel em termos de anos. Talvez seja o suficiente para simplesmente colapsar os dados por ano Muito obrigado Robert Esse foi um excelente exemplo. O comando: realmente fiz o que estava esperando. Eu não sabia que tsegen existia. De agora em diante, vou abordá-lo cada vez que trabalho com dados da série temporal. O último pedaço de código que você sugeriu não se aplicou com precisão ao meu caso porque a média que eu estava procurando não era baseada no ano civil, mas sim na 365 que antecedem uma determinada data. Obrigado novamente Última edição por Riccardo Valboni 30 de maio de 2017 às 04:53. Oi, Robert percebi de repente que há um problema quando tento calcular a média móvel por 5 anos. Stata dá um erro que diz que existem muitos elementos no numlist. Mas eu leio os limites de ajuda e diz que o número máximo de elementos em um numlist deve ser 2500. Enquanto durante 5 anos eles são 1825. Você acha que fiz algo errado ou pode ser um bug 30 de maio de 2017, 07:27 Bem, você tropeçou em uma outra limitação obscura associada a números. Uma solução está a caminho do Kit Baum. Entretanto, você pode circular em torno da limitação usando 30 de maio de 2017, solução 10:52 Genius. Funcionou perfeitamente. 05 Jun 2017, 08:08 Uma nova versão do tsegen que corrige o problema mencionado em 4 agora está disponível no SSC. Para atualizar, digite na janela de comando Statas: para instalar o tsegen a partir do zero, digite 05 Jun 2017, 08:58 Robert, graças a você e Nick para criar e manter - tsegen-. É uma ótima solução para muitos dos problemas que são trazidos a este fórum. Minha única preocupação é que é tão útil, se isso atrapalhar, temo que isso deixe o fórum fora de serviço 05 Jun 2017, 09:47 Obrigado pelas amáveis ​​palavras, me dá fuzzies quentes como minha filha diria.

No comments:

Post a Comment