Moving Average Panel Data Stata


Esta estrutura de dados é completamente imprópria para a finalidade. Assumindo um id identificador você precisa remodelar. por exemplo. Em seguida, uma média móvel é fácil. Use tssmooth ou simplesmente gere. por exemplo. Mais sobre por que sua estrutura de dados é bastante imprópria: não só o cálculo de uma média móvel precisa de um loop (não necessariamente envolvendo egen), mas você estaria criando várias novas variáveis ​​extras. Usá-los em qualquer análise subseqüente seria algo entre estranho e impossível. EDIT III dar um loop de amostra, enquanto não se deslocando da minha posição que é má técnica. Eu não vejo uma razão por trás de sua convenção de nomenclatura em que P1947 é um meio para 1943-1945 Eu suponho que é apenas um erro de digitação. Vamos supor que temos dados para 1913-2012. Por meio de 3 anos, perdemos um ano em cada extremidade. Isso poderia ser escrito de forma mais concisa, à custa de uma enxurrada de macros dentro de macros. Usando pesos desiguais é fácil, como acima. A única razão para usar o egen é que ele não desiste se houver faltas, o que o acima fará. Por uma questão de exaustividade, note que é fácil lidar com falhas sem recorrer a egen. E o denominador Se todos os valores estiverem em falta, este reduz-se a 0/0, ou em falta. Caso contrário, se algum valor estiver faltando, adicionamos 0 ao numerador e 0 ao denominador, que é o mesmo que ignorá-lo. Naturalmente, o código é tolerável como acima para médias de 3 anos, mas para esse caso ou para a média durante mais anos, que iria substituir as linhas acima por um loop, que é o que egen does. Stata: Análise de Dados e Software Estatístico Nicholas J , 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 do 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 dados de 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 quer ou mesmo definir valores indesejados para desaparecer depois usando substituir. 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 estiver 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 trazida para bear. Stata para pesquisadores: Trabalhando com grupos Esta é a sexta parte da Stata Para a série de pesquisadores. Para obter uma lista de tópicos cobertos por esta série, consulte a Introdução. Se você é novo no Stata, recomendamos a leitura dos artigos em ordem. Tarefas que requerem trabalho com grupos são comuns e podem variar desde o muito simples (quotCalculate o mpg médio dos carros domésticos e os carros estrangeiros separadamente) para o muito complexo (quotModel desempenho do aluno em um teste padronizado, levando em conta que os alunos são Agrupados em classes que são agrupadas em escolas que são agrupadas em distritos. Felizmente, trabalhar com grupos é uma das maiores forças da Statas. Neste artigo discutiremos bem ferramentas para trabalhar com grupos e, ao mesmo tempo, tentaremos dar-lhe mais experiência usando a sintaxe Statas para obter resultados úteis. Na próxima seção (Dados Hierárquicos) bem introduzir um quadro teórico para pensar sobre os dados agrupados, mas fará mais sentido se você tiver alguma experiência trabalhando com grupos em primeiro lugar. Bem, comece por passar por algumas ferramentas básicas que são usadas para trabalhar com grupos, e alguns truques para usá-los. Ao fazer isso, use um dos conjuntos de dados de exemplo para esta série, households. dta. Certifique-se de que você copiou esses arquivos de X: SSCC TutorialsStataResearch ou baixou-os. E colocá-los em um local conveniente como U: StataResearch. Certifique-se de que o diretório de trabalho atual está definido para esse local: (ou onde quer que você os coloque). Em seguida, inicie um arquivo do: limpar todos os registros de captura fechar definir mais fora do log usando groups1.log, substituir Youll deseja executar o seu arquivo fazer com freqüência nesta seção. Considere manter uma janela do navegador de dados aberta para que você possa facilmente ver o que o arquivo faz para seus dados. Este conjunto de dados contém informações sobre vinte pessoas fictícias que vivem em seis famílias diferentes. Esta estrutura de dados é uma das mais comuns encontradas no SSCC. Uma variável que pode exigir explicação é rel2head. Ou quotrelationship ao chefe de família. quot É uma variável categórica que assume três valores, com rótulos de valor aplicados. Digite a lista de rótulos para vê-los. Isso é típico dos dados do mundo real (exceto que dados reais geralmente têm muitos tipos mais de relações). A ferramenta mais importante para trabalhar com grupos é por. Lembre-se que se você colocar por varlist. Antes de um comando, Stata irá primeiro dividir os dados configurados em um grupo para cada valor da variável por (ou cada combinação única das variáveis ​​se houver mais de um) e, em seguida, executar o comando separadamente para cada grupo. Para uma análise mais aprofundada, consulte a seção sobre em Uso e Sintaxe. Aqui estão alguns exemplos de coisas que você pode fazer com. Calculando estatísticas sumárias sobre grupos Encontre a idade média dos adultos em cada agregado: por agregado: soma de idade se idade 18 (Você poderia obter os mesmos resultados mais compacta com tabulação casa se agegt18, soma (idade) Nova variável: por família: egen casaIncometotal (renda) Note que o resultado familiar é o mesmo para todos os indivíduos que vivem em um determinado agregado familiar. Isso é porque é uma característica da casa, não o indivíduo. Bem, fale mais sobre essa distinção em Dados Hierárquicos. Identificar as características de um grupo Criar um indicador para saber se um agregado familiar tem filhos ou não, independentemente do número: filho gen (agelt18) por agregado: egen hasChildrenmax (criança) Se o agregado familiar não tiver filhos, o valor máximo do filho será zero. Se tiver algum, o máximo será um. Neste caso, é provável que a criança seja uma variável útil por direito próprio. Mas se você não precisar dele, você poderia fazer todo o processo em uma linha com: por casa: egen hasChildrenmax (agelt18) Agora, em vez de encontrar o máximo de uma variável, você está encontrando o máximo de uma expressão, mas o resultado é o mesmo : O máximo será um para todo o agregado se o agregado tiver quaisquer filhos e zero em contrário. Contando as Observações que Atendem a uma Condição Encontre o número de crianças em cada casa: por família: egen numChildrentotal (criança) Aqui nós aproveitamos o fato de que o total de uma variável de indicador é o número de observações para as quais a variável de indicador é verdadeira. Novamente, total (criança) poderia ter sido total (agelt18). Resultado Espalhamento Suponha que precisamos armazenar a idade média dos adultos em cada família como uma variável. O ponto de partida óbvio seria: por família: egen meanAdultAgemean (idade) se agegt18 No entanto, meanAdultAge recebe um ausente para todas as crianças no conjunto de dados. Isso ocorre porque a condição if faz duas coisas neste comando: ele controla quais observações são usadas no cálculo da média a ser armazenada em meanAdultAge. Mas também quais as observações que a média é armazenada dentro Se precisamos das famílias meanAdultAge estar disponível em todas as observações para essa casa (e nós costumamos fazer), então precisamos quotspreadquot o resultado para as outras observações. Por família: egen tempmean (meanAdultAge) drop meanAdultAge rename temp meanAdultAge Todas as observações em cada família que têm um valor para meanAdultAge têm o mesmo valor. Assim, a função mean () retorna esse valor 8212, mas o faz para todas as observações na casa. (Lembre-se de que quando mean () encontra valores ausentes, essencialmente ignora-los e calcula a média dos valores não-faltantes.) Assim, a variável temp contém o valor adequado de meanAdultAge para todas as observações, adultos e crianças. Em seguida, soltamos a variável meanAdultAge antiga e renomeamos temp meanAdultAge. Se planejar com antecedência podemos salvar uma linha de código em comparação com o acima: por casa: egen tempmean (idade) se agegt18 pelo agregado: egen meanAdultAgemean (temp) drop temp Isto às vezes é chamado quotspreadingquot um resultado: se você pode encontrar o direito Resposta para algumas das observações em um grupo, você pode então espalhar para fora para os outros. Você poderia fazer a propagação com qualquer uma das várias funções egen: min (). Max (). Etc, mas mean () é talvez o mais intuitivo. Exercícios Crie uma variável de indicador para domicílios sem filhos usando a variável numChildren que você criou anteriormente. Defenda sua escolha ou não usar no processo. (Solução) Encontre a idade do adulto mais jovem em cada família no momento em que seu primeiro filho nasceu. (Sugestão: esta é uma característica do agregado familiar, não um indivíduo.) (Solução) Encontre o rendimento familiar médio das pessoas em famílias monoparentais e famílias com dois pais. (Solução) n e N A maioria dos comandos Stata são realmente loops: fazer algo para observação um, então fazê-lo para observação dois e assim por diante. Como Stata funciona através deste loop, ele acompanha a observação que está trabalhando com uma variável interna chamada n. Você pode usar esta variável em seus comandos: listará somente a observação cinco, porque a condição n5 é somente verdadeira quando Stata está trabalhando com a observação cinco. N torna-se ainda mais útil quando combinado com por. Suponha que você quis listar a primeira observação em cada casa: por família: l se n1 Acontece que a primeira observação é o chefe de família em todos os casos, o que não é incomum. Mas e se em vez de ter rel2head você só conhecia o chefe de família por sua localização na casa Então youd tem que ter muito cuidado com a classificação. Statas padrão algoritmo de classificação não é quotstable, quot significado que se você classificar por casa pode alterar a ordem de observações dentro da casa. Se a ordem das observações for importante, você deve adicionar a opção estável a qualquer tipo de comando. Dessa forma, Stata usará um algoritmo de classificação diferente que será mais lento, mas não alterará a ordem das observações dentro de um grupo. Mas tendo feito isso você sempre pode identificar o chefe de família com uma combinação de por casa: e se n1. Outra variável interna, N. contém o número de observações no conjunto de dados. É também o número de observação da última observação. Você pode usá-lo em comandos como n: por família: l if nN Esta lista a última observação em cada família. Criando identificadores dentro do grupo Muitas vezes você vai querer ter um identificador dentro do grupo para que você possa sempre dizer qual é a observação que, mesmo depois de uma classificação equivocada. Neste caso, o identificador dentro do grupo poderia logicamente ser chamado de pessoa: por família: gen personn A variável pessoa corresponderá ao número de observação da pessoa dentro de sua família na ordem de classificação atual. Se você queria um identificador único global, execute o comando acima sem por agregado. Encontrando o tamanho de um grupo como n. N honra por grupos. Assim, N contém o número de observações no grupo por grupo que está sendo trabalhado atualmente. Considere o comando: Ao executá-lo, Stata olha para uma observação de cada vez e define newIncome para essa observação igual à renda para a mesma observação. Os subscritos permitem que você olhe para o valor de uma variável para qualquer observação que você deseja. Tente: renda1 significa valor de renda para a observação 1. Assim, o novo Ingresso2 será de 60.000 para todas as observações (não que isso seja um resultado útil). Distribuição de Características de uma Observação Especial Considere tentar identificar os agregados familiares chefiados por mulheres: por agregado familiar: gen femininoHeadfemale1 Uma vez que a primeira pessoa em cada casa é a cabeça, o agregado tem uma cabeça feminina se e somente se a primeira pessoa é do sexo feminino. E se o chefe de família fosse o último em vez do primeiro Apenas mude-o para: pelo agregado familiar: gen femaleHeadfemaleN E se os chefes de família não estavam em qualquer lugar particular dentro do lar Use classificar para torná-los a primeira pessoa no agregado: sort rel2head casa Por agregado familiar: gen femaleHeadfemale1 E se o código para quothead de householdquot werent o menor valor de rel2head. O que vem a seguir sempre funcionará: gen isHead (rel2head1) classificar a família isHead por agregado familiar: gen femaleHeadfemaleN E se algumas famílias não têm uma cabeça, e você precisa de femaleHead para estar ausente para essas famílias Faça o acima, mas adicione uma condição if ao último Este método geral funcionará sempre que você precisar selecionar as características de uma linha especial dentro de um grupo (o respondente a uma pesquisa, o mês em que uma disciplina se formou, etc.): Criar Uma variável de indicador que é uma para a linha especial e zero para todas as outras linhas Ordenar pela ID de grupo ea nova variável de indicador A linha especial será a última e pode ser acessada com N desde que você comece com por Se você quiser o especial A observação é a primeira e não a última, você pode usar gsort (generalized sort): gsort household - isHead Com gsort você pode colocar um sinal de menos na frente de um nome de variável e as observações serão classificadas em ordem decrescente por essa variável em vez de ascendente . Verificando se uma variável varia dentro de um grupo A variável householdIncome deve ter o mesmo valor para todos os indivíduos dentro de um agregado familiar. Você pode verificar isso com: sort household householdIncome by household: afirmar householdIncome1householdIncomeN Porque as observações dentro de uma casa são classificadas por householdIncome. O menor valor será o primeiro e o maior valor será o último. Se o primeiro eo último valores forem iguais, então você sabe que todos os valores são os mesmos. Exercícios Como você pode verificar se cada família tem um e um só chefe de família (Solução) Crie uma variável de indicador para saber se o valor de uma família de idade varia. Use-o para navegar apenas as famílias cuja idade varia. (Solução) Cálculos baseados em vizinhanças de observações Os subíndices podem conter expressões matemáticas, incluindo n e N. Inicie um novo arquivo do que carrega o conjunto de dados chamado escolas. Isso contém números de inscrição para dez escolas fictícias (e não terrivelmente plausíveis). Bem definir um grupo de alunos como todos os pares em sua série, a nota acima dela, ea nota abaixo dela. Para encontrar o tamanho de cada grupo de pares de notas, digite o seguinte: por escola: gen peerGroupstudentsstudentsn1studentsn-1 O resultado está faltando para o grau um, porque ele não tem uma nota antes dele, e para o grau doze, porque ele não tem uma nota após ele. Assim, os alunos n-1 ou studentsn1 dar valores em falta para eles. Felizmente Stata apenas retorna um valor faltante em tais casos ao invés de dar um quotindex fora do erro boundsquot ou algo semelhante. O que aconteceria se algumas escolas não tivessem uma observação para alguns graus (Solução) Implementar uma definição estendida de peerGroup onde os pares dos alunos do primeiro grau E os alunos do primeiro e segundo graus, e os pares do décimo segundo graders são os alunos do décimo primeiro e décimo segundo (ou seja, preencher os valores faltantes). (Solução) Os dados do Painel de Dados do Painel, ou dados com múltiplos indivíduos observados várias vezes, podem ser tratados como dados agrupados mesmo que um quotgroupquot neste caso seja um indivíduo. (É por isso que introduzimos terminologia mais geral em Dados Hierárquicos.) Iniciar outro arquivo do que carrega um conjunto de dados chamado de emprego. Este consiste em cinco pessoas observadas por vinte meses, com cada status de emprego de pessoas registradas a cada mês. Identificação de feitiços Uma pessoa típica neste painel é empregada por um tempo, depois desempregada por um tempo, etc. Cada período de emprego contínuo ou desemprego é chamado de quotado e uma primeira tarefa comum com tais dados é identificar as magias. Comece por identificar os meses que iniciam uma nova magia, ou seja, os meses em que o status de uma pessoa é diferente do que era no mês anterior: por pessoa: início de carreira (empregado desempregado) Para o primeiro mês em que uma pessoa é observada, A quantidade empregada n-1 não existe e está assim ausente. Desde empregado nunca está faltando (como você verificaria isso) isso garante que o primeiro mês uma pessoa é observada é marcado como o início de uma nova magia. Em seguida vem algo que você deve adicionar ao seu saco de truques: por pessoa: gen spellsum (start) A função sum () encontra somas correntes, ou seja, a soma de uma variável para todas as observações até e incluindo a observação atual. Desde start é um sempre que uma mágica começa e zero de outra forma, sum (start) para uma observação é o número de feitiços que começaram até esse ponto8212 e que serve como um mágico esplêndido ID. Uma vez que você identificou as magias, você pode tratá-las como grupos. No entanto, estas identificações mágicas só fazem sentido no contexto de uma pessoa (cada pessoa tem a sua própria magia número um). Assim, o próprio por é por pessoa feitiço. Ea primeira vez que você usá-lo terá de dizer bysort. Mas tudo o que você aprendeu ainda se aplica. Por exemplo, encontrar a duração de um feitiço é exatamente como encontrar o tamanho de um agregado familiar: bysort spell: gen duraçãoN Exercícios Pense no comando: por pessoa: gen start (employedemployedn-1) O que aconteceria se omitido o por . (Solução) Crie variáveis ​​que contenham o mês de início, o ano de início, o mês de fim eo ano de fim de cada período. (Solução) Encontre o comprimento médio da magia para cada pessoa. Certifique-se de que a média é calculada sobre feitiços, e não meses. (Solução) Última revisão: 1/4 / 2016Announcement 04 Nov 2014, 19:36 Caros todos, Estou trabalhando com um conjunto de dados de painel desequilibrado onde o painel var é o número do fundo eo tempo var é o mês. Assim, eu estou trabalhando com séries de tempo mensais, mas com lacunas. O que eu quero é calcular a taxa de Sharpe de 3 anos e também o jensens alfa de 3 anos para cada fundo. Então, se eu estou no ano de 1992 eu gostaria de calcular a relação de Sharpe para aquele ano usando as observações mensais dos anos 1992 1991 1990. Para fazer isso eu preciso a média e sd dos retornos excedentes de cada fundo durante esse período. Além disso, eu gostaria de estimar o Jensens Alpha executando o modelo CAPM usando novamente as observações mensais dos anos 1992 1991 1990. Para fazer isso eu poderia usar o comando statsby e usar os coeficientes de uma regressão em execução durante esse período. I haved tentou acessar muitos comandos como rollreg, movavg, ma etc e também alguns moradores com foreach / forvalues ​​mas não podem utilizá-los como eu não tenho um painel equilibrado e eu não quero eliminar fundos porque eu poderia ter um ou dois lacunas. Este é um exemplo do meu dataset o ano mês mktrf smb hml umd ExcessR s ---------------------------------- ----------------------------------------- 2 1997 1. 2 1997 2 -. 0049 -0,0261 0,0469 -0,0204. 2 1997 3 -0,0503 -,0032 0,0386 0,0094 -0,0181431 2 1997 4 0,0404 -,0519 -0,0102 0,0489 0,0117428 2 1997 5 0,0674 0,0483-0438-0519 0,0372053 ---- -------------------------------------------------- --------------------- 2 1997 6 .041 .015 .0072 .0259 .0310222 2 1997 7 .0733 -.0252 -.0013 .0384 .0402394 2 1997 8 -.0415 .0734 .0137 -.0252 -0292168 2 1997 9 .0535 .0268 -.0025 .0145 .0381404 2 1998 1 .0015 -.0094 -.0207 .001 .0056473 ------ -------------------------------------------------- ------------------- 2 1998 2 .0703 .0032 -.0086 -.011 .0395531 2 1998 3 .0476 -.0099 .0123 .0214 .0277491 2 1998 4 .0073 .0048 .0027 .0078 .0005439 2 1998 5 -.0307 -.0354 .0412 .0189 -.0093562 2 1998 6 .0318 -.0315 -.0222 .0726 .002362 -------- -------------------------------------------------- ----------------- 2 1998 7 -.0246 -.0492 -.0115 .0371 -.0232616 2 1998 8-.I608 -.0575 .0524 .0187 -.091043 2 1998 9 .0615 -.0015 -.0388 -.0063 .0222817 2 1998 10 .0713 -0.32 -.0277 -.0535 .0311223 2 1998 11 .061 .0114 -.0343 .0118 .0300834 ---- -------------------------------------------------- --------------------- 2 1998 12 .0616 -.003 -0,047 .0904 .0168859 7 1994 1 .0287 .0014 .021 .0001 .0183894 7 1994 2 -0,0256 0,0272 -0,0141 -,0026 -0,0170168 7 1994 3 -0,0478-0096,0134 -0,132 -0,0656004 7 1994 4,0068-0091,0169 0,0041 -,0032034 - -------------------------------------------------- ----------------------- 7 1994 5 .0058 -0.0201 .0018 -.0216 -.0093189 7 1994 6 -.0303 -.0048 .0168 -0083 -0506594 7 1994 7 .0282 -0,0178 0,0098 .0019 .0199595 7 1994 8 .0401 .0145 -.0347 .0154 .0419298 7 1994 9 -.0231 .0268 -.0181 .0131 -.0135341 -------------------------------------------------- ------------------------- 7 1994 10 .0134 -0.022 -.0236 .0145 .0129598 7 ​​1994 11 -.0404 -.0017 - .0005 -.0019 -.0433825 7 1994 12 .0086 .0005 .0026 .035 .0152948 05 Nov 2014, 11:35 Muito obrigado por suas postagens. Quanto à relação sharpe este é o código que eu escrevi e resolvo meu problema. Gen MeanVWExcRetGr. Class crspfundno ryear mês forval i1990 (1) 2013 local mi-2 por crspfundno. Egen Meanimean (VWExcRetGr) se ryearlti amp ryeargtm substituir MeanVWExcRetGrMeani if ​​ryeari Não é perfeito, mas eu tenho os meus meios em uma coluna agora, então cada ano eu tenho o mesmo valor de rolling mean dentro das minhas observações mensais (egen). Estou dizendo que não é perfeito, porque dentro dos comandos eu não especificar que eu quero média dos valores apenas no caso que eu tenho 3 anos de observações. Assim, também calcula a média no caso em que tenho 2 anos de observações. A boa notícia é que eu posso eliminar-me essas observações. Eu posto o acima, porque eu quero que você entenda o que eu preciso exatamente. Eu quero ter o alfa e beta, cada um em uma coluna para que eu possa usá-los para regredir-los em outras variáveis. Por conseguinte, no ano de 1995 para o fundo nº 100, que tem 11 observações mensais, por exemplo, quero que a produção alfa da regressão capm / 4 factor capm de 3 anos (1995,1994,1993) seja repetida no 11 linhas-células da coluna alfa. O mesmo se aplica para beta. Eu apliquei o código Mata com algumas alterações egen g group (crspfundno) gen alpha. Mata mata stview (crspfundno. Quotcrspfundno quot) stview (st. quotryearquot) Stview stview stview stview stview stview stview stview (g. (P) i) para (opi, 2 ogtpi, 1 o-) y J (1,1 ,.) XJ (1,5) ,.) B. Para (para tgtpi, 1 t-) se (ir, 1 gt, 1 amp ryearo, 1-ryeart, 1 lt 2) yy VWExcRetGrt, 1 XX (mktrft, 1, smbt, 1, hmlt, 1, umdt, 1 , 1) yy (2..rows (y)) ,. XX (2..vertos (X)) ,. Se (linhas (y) gt6) b invsym (cross (X, X)) cross (X, y) alphao, 1 b5,1 final, mas o resultado é este e não inclui beta também. Pode por favor ajudar-me fundar ano g alfa 5487 2001 1 478 -.0045781 5487 2001 2 478 -.0049922 5487 2001 3 478 -.0044039 5487 2001 4 478 -.0058963 5487 2001 5 478 -.0057021 5487 2001 6 478 - .0037893 5487 2001 7 478 -.0046226 5487 2001 8 478 -.0027665 5487 2001 9 478 -.0037288 5487 2002 1 478 .0009866 5487 2002 2 478 .0019246 5487 2002 3 478 .0019994 5487 2002 4 478 .002021 5487 2002 5 478 .0019815 5487 2002 7 478 .0037848 5487 2002 8 478 .0035144 5487 2002 9 478 .003802 5487 2002 10 478 .0012915 5487 2002 11 478 .0016832 5487 2002 12 478 .0015888 Não sei se Eu entendo você. No entanto, repetindo o conselho no tópico ao qual eu o referi anteriormente sobre não usar o código Mata enquanto o código Stata está disponível, aqui está um código adaptado a partir desse thread que fará a regressão em rotação. Levará muito tempo se você tiver um grande conjunto de dados. Deixe-me saber se você leva muito tempo. Eu recomendo que você verifique os resultados. 06 Nov 2014, 08:51 Para Abraham: Realmente rápido código Mata. I apenas necessário 1 minutos em vez de 2 horas. Além disso, ele funciona melhor, uma vez que dá volta valores faltantes se eu tiver apenas um ano de observação. Muito obrigado. Uma última pergunta. Se eu precisar da regressão capm, isso significa que apenas VWExcRetGr e mktrf, mas não o smb hml umd, é assim que o código deve ser como gen Alpha. Gen bMktrf. mata mata claras stview (crspfundno. quotcrspfundnoquot) stview (ryear. quotryearquot) stview (VWExcRetGr. quotVWExcRetGrquot) stview (mktrf. quotmktrfquot) stview (Alpha. quotAlphaquot) stview (bMktrf. quotbMktrfquot) p panelsetup (crspfundno, 1) para (iltrows i1 (P) i) para (opi, 1 oltpi, 2 o) y VWExcRetGro, 1 X (mktrfo, 1, 1) b. for (tpi, 1 tltpi, 2 t) se (a crspfundnoo amp, 1 crspfundnot, 1 amp (ryearo, 1 - ryeart, 1 lt 2) amp ryearo, 1 gt ryeart, 1) VWExcRetGrt aa, 1 XX (mktrft, 1 1) if (linhas (y) gt6) b invsym (cruz (X, X)) cruzar (X, y) Alphao, 1 b2,1 bMktrfo, 1 b1,1 No seu código, você calcula o desvio padrão por país e Indústria (usando resumir) mas, em seguida, substituir esse valor em SDx de outros coutries (no loop interno). É isso que você quer fazer Eu escrevi o código Mata assumindo que você deseja calcular o desvio padrão por país e indústria. Se você quiser calcular por país e indústria que você precisa adicionar: Aqui está o código Mata (ele calcula o desvio padrão também quando a janela é inferior a 4 anos): Anúncio É o meu primeiro post e vou tentar ser tão claro que possível. O link para o banco de dados principal está no final da postagem. Contexto Estou usando o Stata / SE 12.0 no Windows 10. Eu comecei com o Stata há apenas algumas semanas e estou tentando aprender por conta própria para uma atribuição devido em poucos dias agora (porque cada tabela ou figura me levou dias e Dias): a replicação do papel exige que as pessoas nascidas nos últimos trimestres tenham mais educação em média do que as que nasceram no primeiro Devido às leis de escolaridade obrigatória. Os primeiros números desenham um gráfico do número médio de anos de educação (variável EDUC) para todas as pessoas nascidas de um determinado ano (variável YOB para o ano de nascimento) durante um determinado trimestre (QOB). Há uma tendência geral de aumento e para detrend os dados, eles usam uma média móvel (figura IV), que é onde eu tenho sido bloqueado para os últimos 5 dias. Problema No banco de dados, existem 27 variáveis ​​entre as quais v4 renomeado EDUC, v27 renomeado YOB (ano de nascimento) e v18 renomeado QOB (trimestre de nascimento). O que é necessário para a média móvel é, para cada conjunto de pessoas nascidas no ano c e trimestre j, calculando o número médio de anos de educação não para este ano e trimestre, mas para o trimestre imediatamente anterior, 2 quartos antes, um quarto Mais tarde e 2 quartos mais tarde (explicado p. 985 do papel). Por exemplo, se eu olhar para os homens nascidos entre 1930 e 1939 como nesta figura (figura IV do artigo: onedrive. live/redirresi. Ntphoto2cpng), eu preciso começar com a coorte nascida em 1930, 3º trimestre e calcular a Número médio de anos de escolaridade dos nascidos em 1930, 2º trimestre (nascido um quarto antes da dada coorte), mesmo para os nascidos em 1930, 1º trimestre (nascido 2 trimestres antes da coorte), mesmo para os nascidos em 1930, 4º trimestre (um quarto após a coorte), e o mesmo para os nascidos em 1931, 1º trimestre (2 trimestres após a coorte). Em seguida, a média móvel é obtida adicionando esses 4 valores e dividindo por 4. Todo esse processo deve ser repetido para cada coorte entre 1930, 3º trimestre e 1939, 2º trimestre. Do-File Para o do-file (onedrive. live/redirresid6919D329B3BF1EF23227ampauthkeyAO2cxEN AGpZMgsMampithintfile2cdo), eu comecei com o modelo das outras figuras e tentei usar loop foreach e muitas outras coisas (não me lembro das mensagens de erro / não sabia que estava indo Para postar aqui), mas ainda não descobrir como dizer Stata: quotfor cada YOBQn. Calcular média (EDUC) de YOBQ n-1, YOBQ n-2, YOBQ n1, YOBQ n2. Para fazer a soma e dividir por 4 depois que deve ser mais fácil. Recebi uma dica excepcional do assistente de ensino: tente o comando tssmooth. Você primeiro terá que criar uma variável de tempo para a qual o comando do grupo egen será muito útil. Mas, de acordo com minha pesquisa sobre quotegenquot e quottssetquot nos manuais de dados e no livro Cameron amp Trivedi, quotEconometrics usando Stataquot (último link): stata / manuals14 / degen. Tfolder2cdta stata / manuals14 / gsw11.pdf stata / manuals14 / u11.p. Languagesyntax stata / manuals14 / u13.p. Itsubscripting onedrive. live/redirresi. Intfile2cpdf Eu deveria tsset os dados antes tssmooth mas eu não passei este estágio desde aparentemente, a notação n não é permitido com quotegenquot (erro r (101) quotweights não allowedquot) e ainda estou muito confuso com a forma de combinar egen, tsset E tssmooth. Seria ótimo se alguém pudesse me ajudar com a forma de resolver os quotweights não allowedquot erro e como combinar os comandos quotegenquot, quottssetquot e quottssmoothquot. Muito obrigado Postscript: aqui está o banco de dados pela maneira onedrive. live / redirresi. Tfolder2cdta Nota: Eu tenho o do-file para as outras figuras e tabelas mais importantes do artigo, exceto a tabela I, mas este arquivo provavelmente não é necessário / apenas para info: onedrive. live/redirresi. Hintfile2cdo Última edição por Amarylis Durand 25 Mar 2016, 01:55. 25 Mar 2016, 22:50 Aqui está uma versão mais curta da minha pergunta: como evitar o erro abaixo (r451 em negrito) e como dizer Stata que a média móvel de quotmedstay1quot deve ser calculada para cada valor de tps / por YOB QOB Para todos os nascidos no mesmo ano e no mesmo trimestre, classificar por anos e trimestres crescentes e calcular o número médio de anos de educação por YOB QOB. Sort: egen medstay1 mean (EDUC) / gerar uma nova variável YOBNew porque o comando yq exige que o primeiro argumento esteja entre 1000 e 9999 e os nossos dados para YOB no Censo de 1980 estão entre 30 e 49 em vez de 1930 e 1949 / gen YOBNewYOB Substitua YOBNew YOB1900 se CENSUS80 / gerar uma variável de tempo que tem o formato requerido no formato tsets / gen tpsyq (YOBNew, QOB) tq tps / a seguinte instrução retorna r451. Repetidos valores de tempo no painel, provavelmente porque há milhares de pessoas nascidas durante o mesmo ano e mesmo trimestre, obviamente com o mesmo número médio de anos de educação. Como evitar este erro / tsset medstay1 tps / instrução para ter a média móvel MA, mas eu quero o movimento da média de medstay1 a ser calculado para cada valor do quivis timevariable. Que comando me permitiria fazer isso ou é feito automaticamente / tssmooth ma MA medstay1. Window (2 0 2) Espero que alguém possa ajudar.

Comments

Popular posts from this blog

Kata Saling Memahami Forex

Brics Bank Base Currency In Forex

Michael Freeman Binary Options Site