Tutorial: como estimar accruals discricionários no R (gratuito) - Contabilidade & Métodos Quantitativos

Contabilidade & Métodos Quantitativos

Contabilidade & Métodos Quantitativos

quarta-feira, 3 de outubro de 2018

Tutorial: como estimar accruals discricionários no R (gratuito)

Semana passada eu postei aqui no blog um vídeo com o script para estimação dos accruals discricionários (cross-section) por ano e por setor, sem a complicação de gastar várias horas rodando uma regressão por vez.

O vídeo foi gentilmente enviado pela mestranda da FURB Caroline Soschinski e teve uma ótima repercussão. Acesse o vídeo clicando aqui e aproveite para se inscrever no nosso canal do Youtube clicando aqui.

A partir daí, o Professor Dr Abdinardo Oliveira se prontificou a também nos ajudar com um script para o R - software gratuito.

Agradeço imensamente ao Professor Abdinardo pelo envio do script. O email dele está nas instruções, caso precisem entrar em contato.

Abaixo eu apresento as instruções gerais, o script e a base de dados (BD_Template) que vocês podem baixar clicando aqui.



INSTRUÇÕES COM RELAÇÃO AO USO DO SCRIPT PARA ESTIMAÇÃO DE ACCRUALS DISCRICIONÁRIOS USANDO O R

1) A “programação” que o usuário fará para utilizar corretamente a rotina se dará na montagem do banco de dados, que deverá ser no formato do MS Excel, qualquer versão (.xls ou .xlsx). É recomendável que o usuário use o template em Excel que foi disponibilizado no link acima. O Usuário não deverá digitar NADA nas linhas de código, a não ser que tenha experiência em R;

2) Ao abrir o template, o usuário não deve mexer nos conteúdos das células A1 e B1. Nas demais células são permitidas as alterações dos valores. É imprescindível que o formato das células esteja na categoria “Geral”, senão o R fará a leitura errada dos dados (o template já está nesse formato);

3) Na coluna A, o usuário colocará os anos (2010, 2011 etc.); na coluna B, os setores (1, 2 etc.); na coluna C, os valores da variável dependente; nas demais colunas, os valores das variáveis independentes. Para as variáveis independentes, aconselho usar a configuração do template (x1, x2 etc.);

4) É recomendado que o usuário use o RStudio para rodar os dados (mas lhe é facultado a usar o ambiente que quiser). Antes de rodar a rotina, ele deve instalar as libraries, que estão na primeira linha da rotina;

5) Uma vez instaladas as libraries, é só usar o comando Ctrl+Alt+R. Em seguida, aparecerá uma janela de prompt pedindo que você localize o arquivo do seu banco de dados, montado a partir do template;

6) Pronto! Como resultado, o R produzirá quatro tabelas e uma lista. As tabelas mostrarão os valores do R2 ajustado (tabela_R2), e os p-valores dos testes de Durbin-Watson (para ausência de autocorrelação serial nos resíduos – tabela_DW), Jarque-Bera (para normalidade dos resíduos – tabela_JB) e Ljung-Box (para ausência de heterocedasticidade nos resíduos – tabela_LB). A lista (lista_resultados) mostrará o sumário de todas as regressões lineares, para cada ano e setor. É só digitar lista_resultados$ e escolher a lista desejada.

Dúvidas, favor mandar um e-mail para abdinardom@utfpr.edu.br

P.s.: recomendação de leitura sobre definição, mensuração e modelagem de accruals discricionários. Clique aqui.


Enjoy!!!


SCRIPT NO R PARA ESTIMAÇÃO DE ACCRUALS DISCRICIONÁRIOS POR ANO E POR SETOR


#Rotina desenvolvida por Abdinardo M. B. de Oliveira, Dr. (UTFPR), em 30/09/2018.
library(readxl);library(lmtest);library(tseries)
#Ler o banco de dados
BD=read_xlsx(file.choose(),sheet = 1)
#Monta as equações e as tabelas para armazenar os resultados
variaveis = colnames(BD)
f_kothari = as.formula(paste(variaveis[3]," ~ ", paste(variaveis[4:length(variaveis)],collapse = "+")))
Setores = sort(unique(BD$setor)); Anos = sort(unique(BD$year))
lista_resultados = list()
tabela_R2 = matrix(NA,length(Setores),length(Anos));colnames(tabela_R2)=Anos;rownames(tabela_R2)=paste("Setor",Setores)
tabela_DW = matrix(NA,length(Setores),length(Anos));colnames(tabela_DW)=Anos;rownames(tabela_DW)=paste("Setor",Setores)
tabela_JB = matrix(NA,length(Setores),length(Anos));colnames(tabela_JB)=Anos;rownames(tabela_JB)=paste("Setor",Setores)
tabela_LB = matrix(NA,length(Setores),length(Anos));colnames(tabela_LB)=Anos;rownames(tabela_LB)=paste("Setor",Setores)
#Roda o loop para calcular os valores das regressões lineares
for (i in 1:length(Setores))
{for(j in 1:length(Anos))
 {BD_aux = BD[which((BD$setor==Setores[i])&(BD$year==Anos[j]),arr.ind = F),]
  attach(BD_aux)
  resultado = summary(lm(formula = f_kothari,data = BD_aux,na.action = na.omit))
  lista_resultados[paste("Setor",Setores[i],"_",Anos[j])] = list(resultado)
  tabela_R2[i,j] = resultado$adj.r.squared
  tabela_DW[i,j] = dwtest(resultado,alternative = "two.sided")$p.value
  tabela_JB[i,j] = jarque.bera.test(resultado$residuals)$p.value
  tabela_LB[i,j] = Box.test(resultado$residuals^2,lag=5,type = "Ljung-Box")$p.value
  detach(BD_aux)
 }
}
#Imprime na tela as tabelas de resultados
rm(BD_aux,resultado,Anos,f_kothari,i,j,Setores,variaveis)
round(tabela_R2,digits = 3)
round(tabela_DW,digits = 3)
round(tabela_JB,digits = 3)
round(tabela_LB,digits = 3)

Nenhum comentário:

Postar um comentário

Translate