Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Explorando a base de dados “American Time Use Survey (ATUS)”

0 votos
48 visitas
perguntada Mai 13 em Economia por Matheus Cintrão (26 pontos)  
editado Mai 13 por Matheus Cintrão

Esta análise foi motivada pela artigo “Leisure luxuries and the labor suply of young men”

Através dos dados de uso do tempo tem sido constatada uma redução na oferta de trabalho das gerações mais novas de homens. Esta redução parece ter sido acompanhada de um aumento significativo no uso recreativo no computador e principalmente nos jogos virtuais. Neste artigo os autores buscas associar o aumento da qualidade do lazer relacionada aos jogos, advinda do progresso tecnológico na área, com a escolha de substituir trabalho por lazer.

No artigo é proposto um modelo estrutural que será estimado visando corrigir a correlação existente entre estas variáveis em relação ao salário e ao desemprego, a fim de dar consistência a amostra.

Para fins deste exercício empírico vou focar na primeira estimativa feita, a estimativa da “elasticidade-tempo” dos lazeres “Uso do computador para lazer” e “Jogos”. Esta estimativa não é a finalidade do artigo, mas é necessária para construir a equação de oferta de força de trabalho.

O modelo parte de uma função de utilidade entre consumo e lazer.
\(U(c,v ̃(h_1,…,h_I;θ))\) , A utilidade do agente depende de um agregador c, que representa o consumo e \(v ̃\), um agregador para diversos tipo de lazer \(h_i\), dado uma situação tecnológica \(θ_i\), ligada a cada lazer.

Para esta análise o modelo estrutural proposto pelos autores estima de forma indireta esta elasticidade segundo a equação a seguir:

\[s_{ikt}= α_{ik}+ δ_{it}+ γ_i lnH_t+ ϵ_{ikt}\]

E a elasticidade buscada será dada por:
\[\hat{β_i} =1+ \frac{\hat{γ_i}} {\overline{s_{ikt}} }\]

Explicando variáveis: \(s_{ikt}\) é a participação ( o “share”) do lazer analisado em relação ao tempo total de lazer.\(α_{ik}\) é uma constante relacionada ao estado em que o indivíduo vive. \(δ_{it}\) é uma constante relacionada ao tempo.\( lnH_t\) é o logaritmo do tempo de lazer total. \( \overline{s_{ikt}} \) é a participação média deste lazer no grupo demográfico analisado para todos os tempos e estados.

A fórmula é calculada para agentes médios. Para sanar o problema de pontualidade dos dados os autores propuseram estimar células “geo-crono-demográficas”.

Isso significa que para cada combinação período-estado-demografia será gerado um agente que tera valores de tempo igual à média de todas as respostas que se enquadrarem nestas categorias. De forma prática é feita uma "query" no banco de dados, filtrando a tabela de uso do tempo para um certo período, estado americano, para um "range" de idades e para um sexo. Faz-se a média desta tabela filtrada para cada uma das variáveis e os resultados são armazenados em outra tabela como sendo os dados deste agente representativo . Este procedimento é repetido para cada possível combinação de período, estado, sexo e idade.

Este procedimento vai realizar a média do uso do tempo, agregando os formulários de um mesmo estado, para períodos de 4 anos, separando homens e mulheres, jovens e adultos. O artigo utiliza apenas pessoas em idade de trabalho (jovens:21-30, adultos: 31-55).
O caráter estrutural do modelo dá a possibilidade de identificar, através do \(\hat{β_i}\), lazeres de luxo, comuns e inferiores. Sendo assim uma interpretação bastante interessante.
Segue os resultados do \(\hat{β_i}\):

A imagem será apresentada aqui.

A tabela apresentada é um recorte da tabela gerada pelo algorítimo abaixo. No código apresentado nos comentários a regressão é repetida para cada grupo demográfico e para cada lazer apresentado na tabela de uso de tempo.

Para estimar o modelo foi utilizado o Python, os códigos seguem como comentário a esta publicação.

Compartilhe
comentou Mai 13 por Matheus Cintrão (26 pontos)  
Códigos em Python:
#importando Pacotes

import pandas as pd
import numpy as np
import statsmodels.api as sm

#Importando dados
atv = pd.read_table("atussum_0319.dat", sep=',', low_memory = False)
cps = pd.read_table("atuscps_0319.dat", sep=',', low_memory = False)

#Criando Tabelas customizadas

#Selecionando colunas referentes a estado, ano,
cpsEstado = cps[['TUCASEID','TULINENO', 'GESTFIPS']].query('TULINENO ==1')

completa =pd.merge(atv, cpsEstado, on=['TUCASEID'], how='left')

atvChar = completa.filter(items =['TUCASEID','TEAGE', 'TESEX', 'TUYEAR', 'GESTFIPS'], axis=1)
atvESP =  completa.filter(items = [ 't010101', 't010199', 't010201', 't010299', 't010401', 't010499', 't110101', 't110199',
                             't110281', 't110289', 't119999'], axis=1) #ESP= Eating, Sleeping and Personal Care.
atvESPsum = pd.DataFrame(atvESP.sum(1), columns= ['sum'])
atvESPsum = atvESPsum.assign(corretor = 420)
ESP = pd.DataFrame(atvESPsum['sum'].sub(atvESPsum['corretor']), columns = ['ESP'])


atvLeisure = completa.filter(like = 't12', axis=1)

atvSport = completa.filter(like='t13', axis=1)

H_semHeader = pd.concat([ESP, atvLeisure, atvSport], axis=1).sum(1)


H = pd.DataFrame(H_semHeader , columns = ['H'])

#criando tabela base para os cáculos
concat = [atvChar, ESP, atvLeisure, atvSport, H]
lsBase_suja = pd.concat(concat, axis=1)
lsBase =  lsBase_suja.query('TEAGE <= 55 & TEAGE >= 21 & TUYEAR >= 2004')


lsBase = lsBase.assign(Age =2)
lsBase.loc[lsBase['TEAGE'] <=30, 'Age'] = 1

lsBase = lsBase.assign(Periodo =1)
lsBase.loc[lsBase['TUYEAR'] >=2008, 'Periodo'] = 2
lsBase.loc[lsBase['TUYEAR'] >=2012, 'Periodo'] = 3
lsBase.loc[lsBase['TUYEAR'] >=2016, 'Periodo'] = 4

lsBase = lsBase.assign(ctt =1) #colocando uma constante para facilitar na hora da regressão

#Colocando dummies para o tempo.

lsBase = lsBase.assign(per1 =0)
lsBase.loc[lsBase['Periodo'] == 1, 'per1'] = 1

lsBase = lsBase.assign(per2 =0)
lsBase.loc[lsBase['Periodo'] == 2, 'per2'] = 1

lsBase = lsBase.assign(per3 =0)
lsBase.loc[lsBase['Periodo'] == 3, 'per3'] = 1

lsBase = lsBase.assign(per4 =0)
lsBase.loc[lsBase['Periodo'] == 4, 'per4'] = 1

#gerando agentes representativos
agenteT = pd.DataFrame([]) #a tabela será construida transposta e ao final será "destransposta".
n = 1
states = lsBase['GESTFIPS'].drop_duplicates()

for g in range(1,3):  #genero
    for a in range(1,3):  #idade
        for s in states:  #estado. Obs: são 56 mas o ponto de parada não está incluso.
            for p in range(1,5): #4 períodos agregados. 1=2004-2007, 2=2008-2011, 3=2012-2015, 4=2016-2019
                d = lsBase.loc[(lsBase['TESEX']==g) & (lsBase['Age']== a) & (lsBase['Periodo'] == p) & (lsBase['GESTFIPS'] == s)]
                dmean = d.mean()               
                agtDesc = {'AGENTE': 'a-' +str(a)+ ";g-" + str(g) + ';p-' + str(p) + ';s-' + str(s)}
                agtSerie = pd.Series(agtDesc)
                agenteT[n] = pd.concat([agtSerie,dmean])                
                n=n+1
                
agente = agenteT.T
agente['logH'] = np.log(agente['H'].astype('float'))
agente

#modelo estrutural: beta implicito

Resp = pd.DataFrame(columns = ['R11', 'R12', 'R21', 'R22'])


Rconcat = [atvLeisure, atvSport]
Rleisures = pd.concat( Rconcat, axis = 1)
ColLeisures = Rleisures.columns

for s in range(1,3):
    for a in range(1,3):
        i = 1
        for h in ColLeisures:
            
            laserAvaliado = str(h)
            sexo = s  # 1=Homem, 2=Mulher
            idade = a # 1=Jovem(21-30), 2=adulto(31-55)

            string = 'TESEX == '+ str(sexo)+ '&  Age ==' + str(idade)

            demog = agente.query(string)

            laser = demog[laserAvaliado].astype('float')
 
            logH = demog['logH']
            H = demog['H']

            share = laser.div(H).astype('float')

            periodo = demog['Periodo']


            dep = share
            Y = np.asarray(dep).astype('float')

            exogConc= [demog['ctt'], demog['per1'], demog['per2'], demog['per3'], demog['per4'] , logH]
            exog = pd.concat(exogConc, axis=1).astype('float')

            X = np.asarray(exog)


            model = sm.OLS(Y,X)
            results = model.fit()
            results.params

            gama = results.params[5]

            share_bar = np.average(share)
            
            share_bar = np.where(share_bar==0, 1, share_bar)

            beta = 1 + gama/share_bar
        
            coluna = str('R'+ str(s) + str(a))
            Resp.loc[i, coluna] = beta
        
            i = i + 1

Entre ou cadastre-se para responder esta pergunta.

...