Monday 21 August 2017

Stata 11 Moving Average


() E suas limitações O comando mais óbvio de Statarsquos para calcular médias móveis é a função ma () de egen. Dada uma expressão, cria uma média móvel - period dessa expressão. Por padrão, é tomado como 3. deve ser ímpar. No entanto, como a entrada manual indica, egen, ma () não pode ser combinado com varlist:. E, por esse motivo, não é aplicável aos dados do painel. Em qualquer caso, ele está fora do conjunto de comandos especificamente escrito para séries de tempo ver série de tempo para obter detalhes. Abordagens alternativas Para calcular médias móveis para dados de painel, existem pelo menos duas opções. Ambos dependem do conjunto de dados ter sido tsset previamente. Isto vale muito a pena fazer: não só você pode salvar a si mesmo repetidamente especificando variável de painel e variável de tempo, mas Stata se comporta inteligentemente dado quaisquer lacunas nos dados. 1. Escreva sua própria definição usando generate Usando operadores de séries temporais como L. e F.. Dar a definição da média móvel como o argumento para uma declaração de geração. Se você fizer isso, você não estará, naturalmente, limitado às médias móveis ponderadas (não ponderadas) centradas calculadas por egen, ma (). Por exemplo, as médias móveis ponderadas de três períodos seriam dadas por e alguns pesos podem ser facilmente especificados: Você pode, naturalmente, especificar uma expressão como log (myvar) em vez de um nome de variável como myvar. Uma grande vantagem dessa abordagem é que a Stata faz automaticamente a coisa certa para os dados do painel: os valores iniciais e retardatários são elaborados nos painéis, exatamente como a lógica determina que eles devam 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 poderia ser útil para gerar uma expectativa adaptativa de 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 últimos quatro valores, usando um esquema de ponderação fixo Especialmente comumente usado com timeseries trimestrais.) 2. Use egen, filter () de SSC Use o filtro de função egen escrito pelo usuário () do pacote egenmore em SSC. No Stata 7 (atualizado após 14 de novembro de 2001), você pode instalar este pacote após o qual a ajuda egenmore aponta para detalhes sobre filter (). Os dois exemplos acima seriam renderizados (nesta comparação, a abordagem de gerar é talvez mais transparente, mas veremos um exemplo do oposto em um momento). Os retornos são um numlist. Sendo os retornos negativos: neste caso, -1/1 se expande para -1 0 1 ou chumbo 1, atraso 0, atraso 1. Os coeficientes, outro número, multiplicam os correspondentes itens atrasados ​​ou principais: 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 para que o coeficiente (1 1 1) normalize seja equivalente a coeficientes de 1/3 1/3 1/3 e o coeficiente (1 2 1) normalize seja equivalente A coeficientes de 1/4 1/2 1/4. Você deve especificar não só os atrasos, mas também os coeficientes. Como egen, ma () fornece o caso igualmente ponderado, a razão principal para egen, filter () é suportar o caso desigualmente ponderado, para o qual você deve especificar coeficientes. Poderia também ser dito que obrigando os usuários a especificar coeficientes é uma pequena pressão extra sobre eles para pensar sobre quais coeficientes eles querem. A principal justificativa para pesos iguais é, suponhamos, simplicidade, mas pesos iguais têm propriedades de domínio de frequência ruim, para mencionar apenas uma consideração. O terceiro exemplo acima pode ser qualquer um dos quais é quase tão complicado quanto a abordagem gerar. Há casos em que egen, filter () dá uma formulação mais simples do que gerar. Se você quer um filtro binomial de nove períodos, que os climatologistas acham útil, então parece talvez menos horrível do que, e mais fácil de obter do que, assim como com a abordagem de geração, egen, filter () funciona corretamente com os dados do painel. Na verdade, como dito acima, depende do conjunto de dados ter sido tsset previamente. Uma dica gráfica Depois de calcular suas médias móveis, você provavelmente vai querer olhar para um gráfico. O comando tsgraph escrito pelo usuário é inteligente sobre conjuntos de dados tsset. Instale-o em um STATAT 7 atualizado por ssc inst tsgraph. Que sobre subconjunto com se nenhum dos exemplos acima fazer uso de se restrições. Na verdade egen, ma () não permitirá se a ser 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: Fraca interpretação: Eu 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 como uma conseqüência de alguma condição if, as observações 1-42 são incluídas, mas não observações 43 sobre. 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 a frente e for de comprimento pelo menos 3, e dependerá também de algumas das observações 44 em diante em algumas circunstâncias. Nossa suposição é que a maioria de povos iria para a interpretação fraca, mas se aquele está correto, egen, filter () não suporta se qualquer um. Você sempre pode ignorar o que você donrsquot deseja ou mesmo definir valores indesejados para desaparecer depois usando replace. Uma nota sobre resultados faltando nas extremidades da série Como as médias móveis são funções de defasagens e derivações, egen, ma () produz faltando onde os atrasos e as derivações não existem, no início e no final da série. Uma opção nomiss força o cálculo de médias móveis mais curtas e não centralizadas para as caudas. Em contrapartida, nem gerar nem egen, filter () faz, ou permite, nada de especial para evitar resultados em falta. Se algum dos valores necessários para o cálculo está faltando, então esse resultado está faltando. Cabe aos usuários decidir se e o que a cirurgia corretiva é necessária para essas observações, presumivelmente depois de olhar para o conjunto de dados e considerar qualquer ciência subjacente que pode ser levado a suportar. Imagine que você tem dados sobre os preços de muitos produtos. Para cada um dos produtos que você grava informações de preços semanais. Claro set obs 200 gen prodid n Cada produto tem um preço médio único gen prodprice rpoisson (5) / 7 Você tem dados sobre os preços semanais por 200 semanas. Além de uma tendência geral do tempo tendência do gênero t.005 A primeira observação não está correlacionada com qualquer coisa preço do produto 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 prodprice tendência sazonal .5pricen-1 .2pricen-2 .3rpoisson (10) / 10 se t3 Substituir preço prodprice tendência sazonal .3pricen-1 .2pricen-2 .2pricen-3 .3rpoisson (10) / 10 se t4 substituir preço prodprice tendência sazonal .3pricen-1 .175pricen-2 .125pricen-3 .1pricen-4 .3rpoisson ( 10) / 10 if tgt4 Criar um globabl para armazenar twograph global forv i 1/6 twograph global (preço de linha t se prodid i) twograph twoway, legend (off) title (Verdadeira tendência de preços para os primeiros seis produtos) Agora vamos imaginar que o Acima dados gerados é a verdadeira informação de preços que é fundamentalmente inobservável. Em vez disso você tem várias coleções de dados por semana sobre os preços que cada variam por algum erro addative aleatório. Expandir 3 bysort prodid t: gen prodobs n gen preço pricecollect rnormal () 25 No entanto, as informações de preço que você tem tem algumas entradas que 10 foram erroneamente digitado errado. (1, .35) drop if missing1 Criar (1, .35) dropdown (1, .35) Um globabl para armazenar twograph global forv i 1/6 twograph global (priceobs tinha linha se prodid i amp prodobs1) Twop twoway, legenda (off) título (Observou tendências de preços para os primeiros seis produtos) keep t priceobs prodid entryerror Estou mantendo erro de entrada No conjunto de dados como um meio de comparação, embora ele não seria diretamente observado. A questão é: você pode agora com este dados confusos recuperar dados de preços que é semelhante ao original A primeira coisa que devemos explorar é a duplicação de dados gravados. (É fácil ver os desvios individuais) É fácil ver desvios individuais, mas não queremos percorrer todos os 200 produtos para identificar individualmente os valores de preço. Nós queremos vir acima com um sistema para identificar outliers. Vamos gerar uma média por produto e tempo byproducto t: egen médio pricemean (priceobs) Permite sinalizar qualquer observação que é 120 maior do que a média ou 80 menos do que a média. Vamos ver como ele está funcionando: dois (scatter priceobs t se prodid 1) /// (scatter priceobs t se prodid 1 amp flag1. Msymbol (lgx)) // /. Title (Alguns dos outliers podem ser identificados apenas olhando para a média) legend (off) corr flag entryerror Nossa bandeira é correlacionada cerca de 45 com os erros de entrada. Isso é bom, mas podemos fazer melhor. Proponho que em vez de usar apenas a média que nós construímos uma média móvel de preços e ver como cada entrada desvia da média. O único problema é que o comando de média móvel requer xtset e que requer apenas uma entrada por período de tempo. Então, eu digo que nós redimensionamos a variável de tempo e adicionamos como se registrada em um horário diferente da semana o número de observação. Precisamos de gerar recentemente prodobs, uma vez que não sabemos qual observação está faltando em cada produto. Bysort prodid t: prodobs gen gen t2 t4 prodobs xtset define o painel painel de dados id e nível de série de tempo. Xtset prodid t2 O comando que vamos usar é tssmooth É codificado de tal forma que especificando ma significa média móvel ea janela diz a Stata quantos períodos de tempo contam adiante e quantos atrás no aerage móvel. Esse comando pode demorar um pouco. Tssmooth ma mapriceobspriceobs, janela (23 0 23) 23 está em vigor 5 semanas à frente e 5 semanas atrás O 0 diz stata não incluir inself nessa média A média móvel dois (scatter priceobs t se prodid 1) /// T se prodid 1) /// (linha pricemean t se prodid 1) ///. A média móvel é mais estável do que apenas a média do tempo. Vamos tentar sinalizar usando a média móvel drop drop flag2 flag2 (mapriceobs gt priceobs1.2 mapriceobs lt priceobs.8) dois (scatter priceobs t se prodid 1) /// (scatter priceobs t se prodid 1 amp flag21. Msymbol (lgx) ) ///. Title (A Média Móvel também pode ser útil) legenda (desligado) corr flag2 entryerror Drop nossa queda de dados marcados se flag21 Colapso para o nível semanal colapso priceobs, por (prodid t) label var priceobs Preço médio observado forv i 1/6 global twograph (Scatter priceobs t se prodid i) twograph twoway, legend (off) title (observado tendências de preços para os primeiros seis produtos) Os dados estão procurando muito melhor, mas ainda temos claramente alguns outliers indesejados. Poderíamos aproveitar as tendências cruzadas de produtos para ajudar a identificar valores atípicos dentro dos preços dos produtos. (Por exemplo, por exemplo, por exemplo, por exemplo, por exemplo, por exemplo, por exemplo, por exemplo, por exemplo, por exemplo) / (Linha de preços t se prodid 2) /// (line resid3 t se prodid 3) /// (linha priceobs t se prodid 1) /// (linha resid2 t se prodid 2) Pródigo 3). Título (Os resíduos são indicadores claros de outliers) legenda (desligado) Finalmente, vamos deixar cair observações com resíduos que são maiores que 1,5 desvios padrão da média. (S) 1.5 residtemp-r (média) drop residtemp Vamos ver como ele está funcionando: two (scatter) Priceobs t se prodid 2) /// (scatter priceobs t se prodid 2 amp flag1. Msymbol (lgx)) title (agora apenas tentando remover alguns outliers finais) legenda (desligado) Plotting produto 1 preço relativo a outliers. Global twograph forv i 1/6 twograph global (linha priceobs t se prodid i) Finalmente caindo os outliers gota se flag Um gráfico final global twograph forv i 1/6 twograph global (scatter priceobs t se prodid i) twoway twograph, legend (off ) Título (Observou as tendências de preços para os primeiros seis produtos) Não tão limpo quanto o nosso primeiro gráfico, mas definitivamente muito melhorado. Anunciante Caro Stata lista comunidade, tenho vindo a calcular uma média móvel ponderada no excel, mas estou certo de que há um mais eficiente ( E menos propenso a erros) forma de fazer isso no conselho Stata sobre o assunto será como sempre muito apreciado. Eu tive um olhar em goo. gl/PkW4mI amp goo. gl/Jg27wd. Onde Nick Cox propôs: Eu tenho um conjunto de dados de registro múltiplo por assunto cada sujeito (quotidquot) foi observado anualmente (quotdurationquot) a partir de 1998 - 2010 a. k.a. Existem 50 sujeitos. Quotyearfailurequot especifica o ano em que a variável dependente (quotfailurequot) foi codificada quot1 quotfailurequot binário (dependente) variável quotv1 numérico covariate quotv1yearfailurequot valor de quotv1quot para um determinado assunto, quando quotfailurequot foi codificado como quot1. O valor de v1yearfailure corresponde ao tempo quando a variável quotfailurequot foi codificada quot1. A fórmula que eu quero usar para calcular a média móvel ponderada é a seguinte: abswma1v1 ABS ((MostRecent quotv1yearfailurequot média de quotv1yearfailurequot anterior / 2 v1) Observe que nos anos 1998, 2000, 2004 e 2010, mais de um sujeitos experimentaram o evento (Aka as falhas ligadas), eu quero que eles contribuam com a média de v1yearfailure. I computou isso no excel (quotaveragetiesquot) e colocou a média resultante na última célula dos eventos ligados, por exemplo, assuntos 2, 37 amp 47 Experimentou o evento em 1998. A média de seus valores correspondentes (v1failure) foi colocado em quotaverageties, a fim de calcular a média móvel ponderada absoluta para um sujeito (identificado com var quotid1), em Excel I manualmente calculado uma média móvel de quotv1earfailurequot in Uma variável denominada quotwma1, da seguinte forma: no ano de 1996, atribuímos arbitrariamente 0 em 1997, o valor da falha no ano anterior (1996), ou seja, 35.22383 em 1998, o valor da falha no ano anterior (1996-1997), ou seja, 35.22383 em 1999, o valor da falha anual nos anos anteriores (1996-1998), no entanto, em 1998, três sujeitos experimentaram o evento, portanto, a fórmula seria (1 ano de falha em 1996, em 1997) (média de 1 ano de falha em 1998) , Ou seja, os três eventos ligados a partir de 1998 contribuem como média da falha do ano em 1998 em 2000, o valor da falha anual nos anos anteriores (1996-1999) os três eventos ligados a partir de 1998 continuam a contribuir como média da falha no ano 1998: Em 1996 (média da falha de 1 ano em 1998) / 2 (falha de 1 ano em 1999) / 2 em 2001: (1 ano de falha em 1996 (média de quintessência de 1998) Anos 2002-2004: mesmo valor em 2001, porque não houve eventos (falha 0 durante este período) v1a falha no ano 2005: (v1 falha em 1996 (média de falha de um ano em 1998) (v1 falha em 1999) ) / 4 (média da falha no ano de 2004) / 2 falha no ano de 2006: igual à de 2005, porque não houve falha no ano de 2005 no ano de 2007: (falha média em 1996 (média de falha de 1998) ) (Média da falha de 1 ano em 2000) (média de falha de 1 ano em 2004) / 5 falha de 1 ano em 2006/2 falha de 1 ano nos anos de 2008 a 2011: as fórmulas seguem a mesma lógica acima, omitidas para economizar espaço. Finalmente, subtrai v1 de wma1 e então obtive seu valor absoluto. A variável que eu estou apontando é abswma1v1 (o primeiro valor de quotwma1v1quot foi arbitrariamente definido como 0) abaixo, a planilha que eu tenho usado para calcular esta variável em Excel Dear Stata lista comunidade, tenho vindo a calcular uma média móvel ponderada no excel, Mas estou certo de que há uma forma mais eficiente (e menos propenso a erros) para fazer isso no Stata conselhos sobre o assunto será como sempre muito apreciado. Eu tive um olhar em goo. gl/PkW4mI amp goo. gl/Jg27wd. Onde Nick Cox propôs: Eu tenho um conjunto de dados de registro múltiplo por assunto cada sujeito (quotidquot) foi observado anualmente (quotdurationquot) a partir de 1998 - 2010 a. k.a. Existem 50 sujeitos. Quotyearfailurequot especifica o ano em que a variável dependente (quotfailurequot) foi codificada quot1 quotfailurequot binário (dependente) variável quotv1 numérico covariate quotv1yearfailurequot valor de quotv1quot para um determinado assunto, quando quotfailurequot foi codificado como quot1. O valor de v1yearfailure corresponde ao tempo quando a variável quotfailurequot foi codificada quot1. A fórmula que eu quero usar para calcular a média móvel ponderada é a seguinte: abswma1v1 ABS ((MostRecent quotv1yearfailurequot média de quotv1yearfailurequot anterior / 2 v1) Observe que nos anos 1998, 2000, 2004 e 2010, mais de um sujeitos experimentaram o evento (Aka as falhas ligadas), eu quero que eles contribuam com a média de v1yearfailure. I computou isso no excel (quotaveragetiesquot) e colocou a média resultante na última célula dos eventos ligados, por exemplo, assuntos 2, 37 amp 47 Experimentou o evento em 1998. A média de seus valores correspondentes (v1failure) foi colocado em quotaverageties, a fim de calcular a média móvel ponderada absoluta para um sujeito (identificado com var quotid1), em Excel I manualmente calculado uma média móvel de quotv1earfailurequot in Uma variável denominada quotwma1, da seguinte forma: no ano de 1996, atribuímos arbitrariamente 0 em 1997, o valor da falha no ano anterior (1996), ou seja, 35.22383 em 1998, o valor da falha no ano anterior (1996-1997), ou seja, 35.22383 em 1999, o valor da falha anual nos anos anteriores (1996-1998), no entanto, em 1998, três sujeitos experimentaram o evento, portanto, a fórmula seria (1 ano de falha em 1996, em 1997) (média de 1 ano de falha em 1998) , Ou seja, os três eventos ligados a partir de 1998 contribuem como média da falha do ano em 1998 em 2000, o valor da falha anual nos anos anteriores (1996-1999) os três eventos ligados a partir de 1998 continuam a contribuir como média da falha no ano 1998: Em 1996 (média da falha de 1 ano em 1998) / 2 (falha de 1 ano em 1999) / 2 em 2001: (1 ano de falha em 1996 (média de quintessência de 1998) Anos 2002-2004: mesmo valor em 2001, porque não houve eventos (falha 0 durante este período) v1a falha no ano 2005: (v1 falha em 1996 (média de falha de um ano em 1998) (v1 falha em 1999) ) / 4 (média da falha no ano de 2004) / 2 falha no ano de 2006: igual à de 2005, porque não houve falha no ano de 2005 no ano de 2007: (falha média em 1996 (média de falha de 1998) ) (Média da falha de 1 ano em 2000) (média de falha de 1 ano em 2004) / 5 falha de 1 ano em 2006/2 falha de 1 ano nos anos de 2008 a 2011: as fórmulas seguem a mesma lógica acima, omitidas para economizar espaço. Finalmente, subtrai v1 de wma1 e então obtive seu valor absoluto. A variável que eu estou apontando é abswma1v1 (o primeiro valor de quotwma1v1quot foi arbitrariamente definido como 0) abaixo, a planilha que eu tenho usado para calcular esta variável em excel ATTACHCONFIGn1357362 / ATTACH Para clareza, deixe-me resumir o que estou tentando fazer: Eu quero capturar em uma variável (chamada absolutedistance) o valor absoluto da distância de uma variável numérica (chamada v1) entre um determinado sujeito (identificado com var id total de 50 sujeitos) em um dado ano (identificado com var duração total 13 anos ) Que é susceptível a ficar doente (para experimentar o evento, capturado pelo dependente / resultado binário var chamado doente codificado 1 quando um sujeito experimenta o evento em um determinado ano, 0 caso contrário) eo valor de v1 de todos os assuntos que tem Doentes (sujeitos que já tiveram o evento). O valor para os sujeitos que adoeceram anteriormente é o valor dos sujeitos de v1 no momento de experimentar o evento (no ano em que os pacientes ficaram doentes). O valor de v1 no momento de adoecer é uma média móvel ponderada em que o sujeito mais recente a cair doente tem o mesmo peso que todos os outros sujeitos doentes. Assim, para cada ano no conjunto de dados, eu desejo calcular a distância (absolutedistance) para cada sujeito saudável usando a seguinte fórmula: doente pode ser experimentado mais de uma vez, mas por simplicidade, vamos nos concentrar em um conjunto de dados onde estamos Interessado no tempo até o primeiro doente (obs. Após o primeiro evento seria censurado direito e caiu da análise os dados serão analisados ​​com técnicas de sobrevivência / duração). Agora, as coisas ficam mais complicadas quando consideramos que alguns sujeitos experimentaram o evento (ficou doente) no mesmo ano (vamos identificá-los como laços). Contribuem para a média de v1 de todos os outros sujeitos que adoeceram antes com a média de v1 desses laços. Por exemplo. Três temas ficaram doentes no ano 2000. Esses laços contribuirão para a média de v1 de todos os outros sujeitos que adoeceram antes do ano de 2001 em diante com a média de v1 dessas três disciplinas no ano 2000. Agradeço comentários sobre isso. Última edição por Victor Cruz 21 Set 2016, 01:37. 26 Set 2016, 02:11 Trabalhou, Robert Picard. Muito obrigado No entanto, eu não descrevi com precisão os meus dados, então eu entendo porque meu objetivo pode parecer confuso. Abaixo, a maneira que eu usaria Roberts tipo e comandos eficazes para calcular quotwquot (a média móvel ponderada). Gostaria de receber sugestões sobre como melhorar a minha forma bastante complicada de usar Roberts cmds em meus dados (novamente, Roberts sugestão foi absolutamente preciso, é o meu mau que eu descrever os meus dados com precisão). O objetivo é capturar em uma variável (chamada absolutedistance) o valor absoluto da distância de uma variável numérica (chamada v1) entre um determinado sujeito (var id total 50 sujeitos) em um dado ano (var year total 13 anos) que é Suscetível a ficar doente (para experimentar o evento, capturado por var falha codificado 1 quando um sujeito experimenta o evento em um determinado ano, 0 caso contrário) eo valor de v1 de todos os sujeitos que adoeceram (sujeitos que já experimentaram o evento ). Este é o dado de 5 assuntos. O valor para os sujeitos que anteriormente adoeceram é o valor dos sujeitos de v1 no momento de experimentar o evento (no ano em que os sujeitos ficaram doentes). O valor de v1 no momento de adoecer é uma média móvel ponderada em que o sujeito mais recente a cair doente tem o mesmo peso que todos os outros sujeitos doentes. Assim, para cada ano no conjunto de dados, desejo calcular a distância (absolutedistance) para cada sujeito saudável usando a seguinte fórmula (de meu post anterior): ATTACHCONFIGn1357416 / ATTACH Para obter as primeiras 4 colunas do meu post anterior, Eu só pedi Stata para manter o valor de quotv1quot e ano de assuntos que experimentou o evento e renomear em conformidade. Dado que a média móvel ponderada (chamada quotwma1quot por mim no post anterior, quotwquot por Robert) seria a mesma para todos os sujeitos, o que eu poderia fazer com Roberts comandos acima é quotmergequot (quotpastedquot , Para o qual eu tive que mudar os nomes dos vars ano - mudou para duração - e id - mudou para id1) o quotv1 quando falhou dataquot com o obs de apenas um sujeito do quot5 assuntos dataquot, que iria acabar No conjunto de dados que Robert usou para sua solução amável: Seguindo as instruções de Roberts, pode-se acabar com quotwquot (a média móvel ponderada) para o sujeito um, o que seria o mesmo para todos os anos para todos os sujeitos (acho que vou ter que Colar quotwquot manualmente em excel e, em seguida, mesclá-lo para o original. dta com obs para 50) Uma vez na. Dta dos 50 assuntos, eu subtraia quotwquot de quotv1quot, obter o valor absoluto dessa diferença e que seria. Última edição por Victor Cruz 26 Set 2016, 02:14.

No comments:

Post a Comment