Monitoria Sessão 8 Verônica Santana FEA-USP 23/05/2017 1 Modelos de Dados em Painel dados <- read.csv("dadosfull.csv", header = T, sep=";") head(dados, 3) Ticker Year Country Industry Law CA CL Cash STD Dep TA Rev 1 ASX:1PG 2005 Australia SIC:Mining CommonLaw NA NA NA NA NA NA NA 2 ASX:1PG 2006 Australia SIC:Mining CommonLaw NA NA NA NA NA NA NA 3 ASX:1PG 2007 Australia SIC:Mining CommonLaw NA NA NA NA NA NA NA Rec PPE NetInc OpInc MktCap Equity TDebt CFO CreditSize TAcc X1 X2 X3 1 NA NA NA NA NA NA NA NA 108.80495 NA NA NA NA 2 NA NA NA NA NA NA NA NA 113.78558 NA NA NA NA 3 NA NA NA NA NA NA NA NA 83.82487 NA NA NA NA ROA MTB SIZE LEV LOSS 1 NA NA NA NA 0 2 NA NA NA NA 0 3 NA NA NA NA 0 # Vendo os setores disponíveis na base de dados: summary(dados$industry) SIC:Agriculture SIC:Construction SIC:Finance SIC:Manufacturing 120 360 5670 3710 SIC:Mining SIC:PublicUtil SIC:Retail SIC:Services 1330 1260 980 2680 SIC:Wholesale 340 dados <- subset(dados, Industry!="SIC:Finance") # O Símbolo "!=" significa "diferente". dadoslimpos <- na.omit(dados) modacc <- lm(tacc ~ X1 + X2 + X3-1 + factor(industry) + factor(year), data=dadoslimpos) # Como eliminamos as observaç~oes NA, n~ao há porqu^e incluirmos o comando # "na.action = na.exclude". summary(modacc) 1
Call: lm(formula = TAcc ~ X1 + X2 + X3-1 + factor(industry) + factor(year), data = dadoslimpos) Residuals: Min 1Q Median 3Q Max -37.130-0.112 0.025 0.162 76.852 Coefficients: Estimate Std. Error t value Pr(> t ) X1 1.281516 0.013974 91.706 < 2e-16 X2 0.002606 0.001347 1.934 0.053104 X3-0.415426 0.003736-111.184 < 2e-16 factor(industry)sic:agriculture -0.189192 0.150127-1.260 0.207631 factor(industry)sic:construction -0.279312 0.086899-3.214 0.001314 factor(industry)sic:manufacturing -0.196236 0.049536-3.961 7.52e-05 factor(industry)sic:mining -0.266907 0.059860-4.459 8.36e-06 factor(industry)sic:publicutil -0.293127 0.059529-4.924 8.65e-07 factor(industry)sic:retail -0.348049 0.065205-5.338 9.68e-08 factor(industry)sic:services -0.283177 0.052748-5.369 8.17e-08 factor(industry)sic:wholesale -0.290060 0.088463-3.279 0.001047 factor(year)2007-0.046968 0.063929-0.735 0.462548 factor(year)2008 0.181577 0.063715 2.850 0.004386 factor(year)2009 0.218271 0.063370 3.444 0.000575 factor(year)2010 0.168411 0.062589 2.691 0.007145 factor(year)2011 0.016298 0.061989 0.263 0.792621 factor(year)2012 0.236498 0.061840 3.824 0.000132 factor(year)2013 0.225439 0.061244 3.681 0.000234 factor(year)2014 0.186138 0.060359 3.084 0.002051 X1 *** X2. X3 *** factor(industry)sic:agriculture factor(industry)sic:construction ** factor(industry)sic:manufacturing *** factor(industry)sic:mining *** factor(industry)sic:publicutil *** factor(industry)sic:retail *** factor(industry)sic:services *** factor(industry)sic:wholesale ** factor(year)2007 factor(year)2008 ** factor(year)2009 *** factor(year)2010 ** factor(year)2011 factor(year)2012 *** factor(year)2013 *** factor(year)2014 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.234 on 7563 degrees of freedom Multiple R-squared: 0.8475,Adjusted R-squared: 0.8471 F-statistic: 2212 on 19 and 7563 DF, p-value: < 2.2e-16 dadoslimpos$ada <- abs(resid(modacc)) 2
head(dadoslimpos[,24:ncol(dadoslimpos)]) X2 X3 ROA MTB SIZE LEV LOSS 19 0.123170732 0.0304878 0.09979036 36.510949 3.8649314 0.005890985 0 22 0.000000000 0.8000000-0.13595506 5.681818 0.5766134 0.000000000 1 23 0.000000000 0.5617978-0.25843750 1.837580 1.1631508 0.000000000 1 24 1.539452496 0.1610306-0.28612717 2.017857 2.8507065 0.000000000 1 26 0.413815789 0.6578947-0.45618557 6.229508 1.3558352 0.000000000 1 27 0.007222222 0.5555556-0.51052632 1.895833 0.4187103 0.000000000 1 ADA 19 0.9275965 22 0.6006928 23 0.4970433 24 0.2071220 26 0.2833894 27 0.2921589 Para as estimações usaremos o pacote plm: # install.packages("plm") library(plm) Loading required package: Formula Precisamos criar uma nova base no formato de painel, isto é, definindo a variável que define os indivíduos i (Ticker) e o período de tempo t (Year, no nosso caso), nesta ordem: Dados <- plm.data(dadoslimpos, c("ticker", "Year")) head(dados, 3) Ticker Year Country Industry Law CA CL Cash STD 19 ASX:3PL 2014 Australia SIC:Services CommonLaw 30.800 39.600 23.100 0 22 ASX:88E 2006 Australia SIC:Mining CommonLaw 0.799 0.020 0.751 0 23 ASX:88E 2007 Australia SIC:Mining CommonLaw 3.200 0.065 3.140 0 Dep TA Rev Rec PPE NetInc OpInc MktCap Equity TDebt CFO 19 1.84 47.70 34.400 5.020 4.04 4.760 5.810 250.10 6.85 0.281 17.100 22 0.00 1.78 0.064 0.047 0.00-0.242-0.242 10.00 1.76 0.000-0.265 23 0.00 3.20 0.122 0.061 0.00-0.827-0.613 5.77 3.14 0.000-0.302 CreditSize TAcc X1 X2 X3 ROA 19 129.63830-0.74512195 0.2277439 0.1231707 0.0304878 0.09979036 22 113.78558 0.02400000 0.0176000 0.0000000 0.8000000-0.13595506 23 83.82487-0.01853933 0.0247191 0.0000000 0.5617978-0.25843750 MTB SIZE LEV LOSS ADA 19 36.510949 3.8649314 0.005890985 0 0.9275965 22 5.681818 0.5766134 0.000000000 1 0.6006928 23 1.837580 1.1631508 0.000000000 1 0.4970433 1.1 Modelos de Efeitos Fixos Quando Cov(x it, c i ) 0, devemos usar um modelo de Efeitos Fixos ou Primeiras Diferenças. A lógica dos modelos de efeitos fixos é controlar pelas características dos indíviduos que são constantes no tempo, 3
c i, através do demeaning: ADA it = β 0 + β 1 ROA it + β 2 MT B it + β 3 SIZE it + β 4 LEV it + β 5 CF O it + β 6 LOSS it + c i + u it, (ADA it ADA i ) = β 0 (1 1) + β 1 (ROA it ROA i ) + β 2 (MT B it MT B i ) + β 3 (SIZE it SIZE i )+ + β 4 (LEV it LEV i ) + β 5 (CF O it CF O i ) + β 6 (LOSS it LOSS i ) + (c i c) + (u it u it ); ADA it = β 1 ROA it + β 2 MT B it + β 3 SIZE it + β 4 LEV it + β 5 CF O it + β 6 LOSS + ü it. Para estimar o modelo, usamos o argumento model = "within": mod_fe <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS, model = "within", data = Dados) summary(mod_fe) Oneway (individual) effect Within Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS, data = Dados, model = "within") Unbalanced Panel: n=1000, T=1-9, N=7582 Residuals : Min. 1st Qu. Median 3rd Qu. Max. -15.179491-0.116913-0.027811 0.072353 60.875939 Coefficients : Estimate Std. Error t-value Pr(> t ) ROA 8.2883e-02 1.8176e-02 4.5601 5.206e-06 *** MTB 9.2341e-05 4.3029e-04 0.2146 0.8300845 SIZE -1.1487e-01 2.9731e-02-3.8637 0.0001128 *** LEV -1.1947e-01 3.1423e-02-3.8020 0.0001448 *** CFO -5.0886e-06 1.9762e-05-0.2575 0.7968007 LOSS -1.3519e-01 4.8442e-02-2.7907 0.0052741 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 8565.2 Residual Sum of Squares: 8496.9 R-Squared: 0.0079729 Adj. R-Squared: -0.14364 F-statistic: 8.80857 on 6 and 6576 DF, p-value: 1.376e-09 Que gera exatamente o mesmo resultado que OLS com uma dummy para cada empresa: mod_fe2 <- lm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS + factor(ticker), data = Dados) # summary(mod_fe2) summary(mod_fe2)$coefficients[c("roa","mtb","size","lev","cfo","loss"),] Estimate Std. Error t value Pr(> t ) ROA 8.288299e-02 1.817579e-02 4.5600750 5.206179e-06 MTB 9.234076e-05 4.302889e-04 0.2146018 8.300845e-01 SIZE -1.148705e-01 2.973090e-02-3.8636735 1.127684e-04 LEV -1.194716e-01 3.142326e-02-3.8020123 1.448240e-04 CFO -5.088630e-06 1.976165e-05-0.2575002 7.968007e-01 LOSS -1.351880e-01 4.844178e-02-2.7907312 5.274071e-03 4
Com erros padrão-robustos: library(lmtest) library(sandwich) coeftest(mod_fe, vcov=vcovhc(mod_fe, type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) ROA 8.2883e-02 1.0908e-01 0.7598 0.44737 MTB 9.2341e-05 5.0328e-04 0.1835 0.85443 SIZE -1.1487e-01 5.9783e-02-1.9214 0.05472. LEV -1.1947e-01 2.3022e-02-5.1895 2.172e-07 *** CFO -5.0886e-06 5.5322e-06-0.9198 0.35770 LOSS -1.3519e-01 1.1073e-01-1.2209 0.22218 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Uma opção interessante de obter erros padrão robustos tanto à heteroscedasticidade quanto à autocorrelação é pelo método de Arellano (1987) 1 : coeftest(mod_fe, vcovhc(mod_fe, method="arellano", type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) ROA 8.2883e-02 1.0908e-01 0.7598 0.44737 MTB 9.2341e-05 5.0328e-04 0.1835 0.85443 SIZE -1.1487e-01 5.9783e-02-1.9214 0.05472. LEV -1.1947e-01 2.3022e-02-5.1895 2.172e-07 *** CFO -5.0886e-06 5.5322e-06-0.9198 0.35770 LOSS -1.3519e-01 1.1073e-01-1.2209 0.22218 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Finalmente, é sempre interessante incluir dummies de tempo nos modelos de dados em painel: mod_fe3 <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS + factor(year), model = "within", data = Dados) summary(mod_fe3) Oneway (individual) effect Within Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS + factor(year), data = Dados, model = "within") Unbalanced Panel: n=1000, T=1-9, N=7582 Residuals : 1 Arellano M (1987). Computing Robust Standard Errors for Within Group Estimators. Oxford Bulletin of Economics and Statistics, 49, 431-434. 5
Min. 1st Qu. Median 3rd Qu. Max. -15.281265-0.125236-0.023722 0.080239 60.892035 Coefficients : Estimate Std. Error t-value Pr(> t ) ROA 7.7604e-02 1.8234e-02 4.2559 2.111e-05 *** MTB 9.6889e-05 4.3010e-04 0.2253 0.8217769 SIZE -8.0023e-02 3.3862e-02-2.3632 0.0181456 * LEV -1.1856e-01 3.1444e-02-3.7707 0.0001642 *** CFO -5.9130e-06 1.9775e-05-0.2990 0.7649453 LOSS -1.2056e-01 4.8884e-02-2.4664 0.0136748 * factor(year)2007 2.7336e-02 5.9661e-02 0.4582 0.6468368 factor(year)2008 1.8115e-02 6.0105e-02 0.3014 0.7631312 factor(year)2009-2.8921e-02 6.0084e-02-0.4813 0.6302917 factor(year)2010-8.7418e-03 6.0024e-02-0.1456 0.8842097 factor(year)2011 2.8234e-02 6.1152e-02 0.4617 0.6443084 factor(year)2012-1.6809e-02 6.1736e-02-0.2723 0.7854241 factor(year)2013-1.3887e-01 6.1615e-02-2.2538 0.0242402 * factor(year)2014-1.1418e-01 6.2210e-02-1.8354 0.0664922. --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 8565.2 Residual Sum of Squares: 8474 R-Squared: 0.01064 Adj. R-Squared: -0.14195 F-statistic: 5.04513 on 14 and 6568 DF, p-value: 1.6897e-09 coeftest(mod_fe3, vcovhc(mod_fe3, method="arellano", type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) ROA 7.7604e-02 1.0920e-01 0.7107 0.47732 MTB 9.6889e-05 5.0839e-04 0.1906 0.84886 SIZE -8.0023e-02 8.6674e-02-0.9233 0.35591 LEV -1.1856e-01 2.5077e-02-4.7280 2.315e-06 *** CFO -5.9130e-06 5.6684e-06-1.0431 0.29692 LOSS -1.2056e-01 1.1710e-01-1.0296 0.30323 factor(year)2007 2.7336e-02 3.7906e-02 0.7211 0.47085 factor(year)2008 1.8115e-02 5.9482e-02 0.3045 0.76073 factor(year)2009-2.8921e-02 6.2643e-02-0.4617 0.64433 factor(year)2010-8.7418e-03 6.7892e-02-0.1288 0.89755 factor(year)2011 2.8234e-02 7.5395e-02 0.3745 0.70805 factor(year)2012-1.6809e-02 1.4403e-01-0.1167 0.90710 factor(year)2013-1.3887e-01 7.0475e-02-1.9705 0.04883 * factor(year)2014-1.1418e-01 7.4046e-02-1.5420 0.12311 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 6
1.2 Modelos de Primeiras Diferenças Os modelos de primeiras diferenças também eliminam o efeito não observado c i : ADA it = β 0 + β 1 ROA it + β 2 MT B it + β 3 SIZE it + β 4 LEV it + β 5 CF O it + β 6 LOSS it + c i + u it, ADA it ADA i,t 1 = β 0 (1 1) + β 1 (ROA it ROA i,t 1 ) + β 2 (MT B it MT B i,t 1 ) + β 3 (SIZE it SIZE i,t 1 )+ + β 4 (LEV it LEV i,t 1 ) + β 5 (CF O it CF O i,t 1 ) + β 6 (LOSS it LOSS i,t 1 )+ + (c i c i ) + (u it u i,t 1 ); ADA it = β 1 ROA it + β 2 MT B it + β 3 SIZE it + β 4 LEV it + β 5 CF O it + β 6 LOSS it + u it. mod_fd <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS, model = "fd", data = Dados) summary(mod_fd) Oneway (individual) effect First-Difference Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS, data = Dados, model = "fd") Unbalanced Panel: n=1000, T=1-9, N=7582 Observations used in estimation: 6582 Residuals : Min. 1st Qu. Median 3rd Qu. Max. -75.701333-0.106444 0.038465 0.162634 40.075935 Coefficients : Estimate Std. Error t-value Pr(> t ) (intercept) -5.4475e-02 1.9628e-02-2.7754 0.005528 ** ROA 9.7821e-02 2.1545e-02 4.5404 5.715e-06 *** MTB -3.3377e-06 3.8984e-04-0.0086 0.993169 SIZE 1.5941e-01 5.8699e-02 2.7158 0.006629 ** LEV -6.7046e-01 2.8629e-02-23.4186 < 2.2e-16 *** CFO -1.2873e-05 2.3113e-05-0.5570 0.577566 LOSS -1.3526e-01 5.1407e-02-2.6311 0.008530 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 16969 Residual Sum of Squares: 15403 R-Squared: 0.092318 Adj. R-Squared: 0.091489 F-statistic: 111.454 on 6 and 6575 DF, p-value: < 2.22e-16 coeftest(mod_fd, vcov=vcovhc(mod_fd, type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) (intercept) -5.4475e-02 1.5504e-02-3.5135 0.0004452 *** ROA 9.7821e-02 1.1014e-01 0.8882 0.3744803 MTB -3.3377e-06 3.2797e-04-0.0102 0.9918804 7
SIZE 1.5941e-01 1.3244e-01 1.2037 0.2287604 LEV -6.7046e-01 5.1504e-02-13.0178 < 2.2e-16 *** CFO -1.2873e-05 6.3411e-06-2.0302 0.0423793 * LOSS -1.3526e-01 1.1872e-01-1.1393 0.2546354 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 coeftest(mod_fd, vcovhc(mod_fd, method="arellano", type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) (intercept) -5.4475e-02 1.5504e-02-3.5135 0.0004452 *** ROA 9.7821e-02 1.1014e-01 0.8882 0.3744803 MTB -3.3377e-06 3.2797e-04-0.0102 0.9918804 SIZE 1.5941e-01 1.3244e-01 1.2037 0.2287604 LEV -6.7046e-01 5.1504e-02-13.0178 < 2.2e-16 *** CFO -1.2873e-05 6.3411e-06-2.0302 0.0423793 * LOSS -1.3526e-01 1.1872e-01-1.1393 0.2546354 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 E incluindo dummies de tempo: mod_fd2 <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS + factor(year), model = "fd", data = Dados) summary(mod_fd2) Oneway (individual) effect First-Difference Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS + factor(year), data = Dados, model = "fd") Unbalanced Panel: n=1000, T=1-9, N=7582 Observations used in estimation: 6582 Residuals : Min. 1st Qu. Median 3rd Qu. Max. -75.587629-0.092588 0.048762 0.175587 38.094845 Coefficients : Estimate Std. Error t-value Pr(> t ) (intercept) -1.3615e+00 1.4092e-01-9.6617 < 2.2e-16 *** ROA 9.5844e-02 2.1415e-02 4.4756 7.749e-06 *** MTB -1.0644e-04 3.8767e-04-0.2746 0.7836585 SIZE 1.9996e-01 6.0447e-02 3.3080 0.0009447 *** LEV -7.2214e-01 2.9001e-02-24.9003 < 2.2e-16 *** CFO -1.3266e-05 2.2996e-05-0.5769 0.5640437 LOSS -1.3250e-01 5.1444e-02-2.5756 0.0100294 * factor(year)2007 1.2661e+00 1.4933e-01 8.4782 < 2.2e-16 *** factor(year)2008 2.5738e+00 2.8457e-01 9.0445 < 2.2e-16 *** factor(year)2009 3.8609e+00 4.1800e-01 9.2365 < 2.2e-16 *** factor(year)2010 5.1408e+00 5.5278e-01 9.2999 < 2.2e-16 *** 8
factor(year)2011 6.5086e+00 6.8874e-01 9.4500 < 2.2e-16 *** factor(year)2012 7.7482e+00 8.2576e-01 9.3832 < 2.2e-16 *** factor(year)2013 8.9634e+00 9.6277e-01 9.3100 < 2.2e-16 *** factor(year)2014 1.0317e+01 1.1010e+00 9.3700 < 2.2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 16969 Residual Sum of Squares: 15181 R-Squared: 0.10535 Adj. R-Squared: 0.10344 F-statistic: 55.235 on 14 and 6567 DF, p-value: < 2.22e-16 coeftest(mod_fd2, vcovhc(mod_fd2, method="arellano", type="hc1")) t test of coefficients: Estimate Std. Error t value Pr(> t ) (intercept) -1.3615e+00 8.6298e-01-1.5777 0.11468 ROA 9.5844e-02 1.0674e-01 0.8979 0.36926 MTB -1.0644e-04 3.4286e-04-0.3104 0.75623 SIZE 1.9996e-01 1.1658e-01 1.7152 0.08636. LEV -7.2214e-01 7.8629e-02-9.1841 < 2e-16 *** CFO -1.3266e-05 6.2649e-06-2.1175 0.03426 * LOSS -1.3250e-01 1.1632e-01-1.1390 0.25473 factor(year)2007 1.2661e+00 8.6082e-01 1.4708 0.14139 factor(year)2008 2.5738e+00 1.7494e+00 1.4713 0.14126 factor(year)2009 3.8609e+00 2.6206e+00 1.4733 0.14072 factor(year)2010 5.1408e+00 3.4830e+00 1.4760 0.14000 factor(year)2011 6.5086e+00 4.3706e+00 1.4892 0.13649 factor(year)2012 7.7482e+00 5.2597e+00 1.4731 0.14076 factor(year)2013 8.9634e+00 6.0361e+00 1.4849 0.13761 factor(year)2014 1.0317e+01 6.8903e+00 1.4973 0.13437 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 1.3 Testes 1.3.1 Testes de Autocorrelação nos resíduos A diferença entre os modelos Fixed-Effects e First-Differences é a premissa a respeito da autocorrelação do termo de erro. Sob FE.3, u it é homoscedástico e não autocorrelacionado, e o estimador FE será o mais eficiente. Sob FD.3, a primeira diferença dos erros é homoscedástica e não autocorrelacionada, o que implica que u it é um passeio aleatório (o extremo oposto de ausência de autocorrelação), e o estimador FD será o mais eficiente. Quando T = 2, os dois estimadores geram exatamente os mesmos resultados. Veja, por exemplo, os resultados usando apenas os anos de 2010 e 2011: dadoslimpos2 <- subset(dadoslimpos, Year==2010 Year==2011) head(dadoslimpos2[,1:15],4) Ticker Year Country Industry Law CA CL Cash 9
26 ASX:88E 2010 Australia SIC:Mining CommonLaw 2.27 0.22 2.20 29 ASX:88E 2011 Australia SIC:Mining CommonLaw 1.88 1.14 1.49 33 ASX:AAC 2011 Australia SIC:Manufacturing CommonLaw 244.50 91.50 24.00 35 ASX:AAC 2010 Australia SIC:Manufacturing CommonLaw 213.40 125.70 17.40 STD Dep TA Rev Rec PPE NetInc 26 0.0 0.049 3.88 0.098 0.070 0.629-1.770 29 0.0 0.385 6.21 0.096 0.285 3.390-5.420 33 56.4 8.390 1192.20 381.900 21.200 696.300 10.800 35 87.7 8.320 1097.90 327.200 15.400 679.900 0.925 tail(dadoslimpos2[,1:13],4) Ticker Year Country Industry Law CA CL 16434 SNSE:VAPORES 2010 Chile SIC:PublicUtil FrenchLaw 1415.1 957.7 16440 SNSE:VAPORES 2011 Chile SIC:PublicUtil FrenchLaw 854.6 1547.0 16442 SNSE:VSPT 2011 Chile SIC:Manufacturing FrenchLaw 212.4 102.5 16445 SNSE:VSPT 2010 Chile SIC:Manufacturing FrenchLaw 217.0 78.4 Cash STD Dep TA Rev Rec 16434 523.5 0.000 0 3218.2 5214.6 597.4 16440 173.0 0.000 0 3179.5 4795.9 476.6 16442 14.0 1.580 0 519.3 266.1 95.6 16445 28.4 0.844 0 551.5 282.6 87.6 Dados2 <- plm.data(dadoslimpos2, c("ticker", "Year")) Onde o operador funciona como a conjunção e, para incluir duas condições. É importante observar que a função plm com a opção "fd" gera um modelo com intercepto, definido após a diferenciação, já que o intercepto antes da diferenciação é eliminado (1 1). Assim, para obtermos os modelos com os mesmos regressores via efeitos fixos e primeiras diferenças, devemos incluir o termo -1 no modelo fd: summary(plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS, model = "within", data = Dados2)) Oneway (individual) effect Within Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS, data = Dados2, model = "within") Unbalanced Panel: n=876, T=1-2, N=1712 Residuals : Min. 1st Qu. Median 3rd Qu. Max. -16.8840-0.1019 0.0000 0.1019 16.8840 Coefficients : Estimate Std. Error t-value Pr(> t ) ROA 7.3280e-01 5.4213e-01 1.3517 0.1768 MTB -4.6322e-03 6.8214e-03-0.6791 0.4973 SIZE 9.8776e-01 1.9164e-01 5.1543 3.185e-07 *** LEV 1.2646e+00 9.0207e-01 1.4019 0.1613 CFO -6.8704e-05 7.6653e-05-0.8963 0.3703 LOSS -2.7753e-01 1.9538e-01-1.4205 0.1558 --- 10
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 1493.5 Residual Sum of Squares: 1420.3 R-Squared: 0.049033 Adj. R-Squared: -0.96037 F-statistic: 7.13263 on 6 and 830 DF, p-value: 1.9874e-07 summary(plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS-1, model = "fd", data = Dados2)) Oneway (individual) effect First-Difference Model Call: plm(formula = ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS - 1, data = Dados2, model = "fd") Unbalanced Panel: n=876, T=1-2, N=1712 Observations used in estimation: 836 Residuals : Min. 1st Qu. Median Mean 3rd Qu. Max. -31.024-0.302-0.039-0.148 0.139 33.768 Coefficients : Estimate Std. Error t-value Pr(> t ) ROA 7.3280e-01 5.4213e-01 1.3517 0.1768 MTB -4.6322e-03 6.8214e-03-0.6791 0.4973 SIZE 9.8776e-01 1.9164e-01 5.1543 3.185e-07 *** LEV 1.2646e+00 9.0207e-01 1.4019 0.1613 CFO -6.8704e-05 7.6653e-05-0.8963 0.3703 LOSS -2.7753e-01 1.9538e-01-1.4205 0.1558 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 2986.9 Residual Sum of Squares: 2840.6 R-Squared: 0.056204 Adj. R-Squared: 0.050519 F-statistic: 7.12382 on 6 and 830 DF, p-value: 2.0334e-07 Quando T > 2, e devemos escolher entre o modelo FE e o FD, Wooldridge (2010) sugere um teste de autocorrelação nos resíduos no modelo FD. Seja ê it = û it, o teste consiste em analisar a significância de ρ na equação ê it = ˆρê i,t 1 + ξ. O pacote plm tem a função pwfdtest() que executa este teste (veja a seção 6.4 das vignettes). Este comando segue o seguinte procedimento: 1. Se o argumento for a fórmula y ~ x1 + x2 + x3, por exemplo, o modelo é estimado em primeirasdiferenças e o resíduos são armazenados. Se o argumento for o modelo já estimado anteriormente, os resíduos são retidos. 2. O modelo AR(1) dos resíduos FD ê it = ˆρê i,t 1 + ξ é estimado; 3. É feito um teste F ou Qui-quadrado para testar a significância do parâmetro ˆρ. 11
Assim, a forma de obter o resultado manualmente de pwfdtest() é estimar o modelo ê it = ˆρê i,t 1 + ξ e usar a função linearhypothesis() em ê i,t 1. Para obter o teste t simples de significância de ρ devemos seguir um procedimento manual. Para implementarmos o teste, vamos usar uma base de dados mais simples (com observações completas, exemplo 10.6 do Wooldridge, semelhante ao Script lecture-11.r disponível no Moodle). 1. Obter a base de dados e estimar o modelo FD: library(foreign) jtrain <- read.dta(file="http://fmwww.bc.edu/ec-p/data/wooldridge/jtrain.dta") head(jtrain) year fcode employ sales avgsal scrap rework tothrs union grant d89 1 1987 410032 100 47000000 35000 NA NA 12 0 0 0 2 1988 410032 131 43000000 37000 NA NA 8 0 0 0 3 1989 410032 123 49000000 39000 NA NA 8 0 0 1 4 1987 410440 12 1560000 10500 NA NA 12 0 0 0 5 1988 410440 13 1970000 11000 NA NA 12 0 0 0 6 1989 410440 14 2350000 11500 NA NA 10 0 0 1 d88 totrain hrsemp lscrap lemploy lsales lrework lhrsemp lscrap_1 1 0 100 12.000000 NA 4.605170 17.66566 NA 2.564949 NA 2 1 50 3.053435 NA 4.875197 17.57671 NA 1.399565 NA 3 0 50 3.252033 NA 4.812184 17.70733 NA 1.447397 NA 4 0 12 12.000000 NA 2.484907 14.26020 NA 2.564949 NA 5 1 13 12.000000 NA 2.564949 14.49354 NA 2.564949 NA 6 0 14 10.000000 NA 2.639057 14.66993 NA 2.397895 NA grant_1 clscrap cgrant clemploy clsales lavgsal clavgsal 1 0 NA 0 NA NA 10.463100 NA 2 0 NA 0 0.2700272-0.0889492 10.518670 0.0555696 3 0 NA 0-0.0630131 0.1306210 10.571320 0.0526438 4 0 NA 0 NA NA 9.259130 NA 5 0 NA 0 0.0800426 0.2333469 9.305651 0.0465202 6 0 NA 0 0.0741081 0.1763821 9.350102 0.0444517 cgrant_1 chrsemp clhrsemp 1 NA NA NA 2 0-8.9465647-1.1653850 3 0 0.1985974 0.0478324 4 NA NA NA 5 0 0.0000000 0.0000000 6 0-2.0000000-0.1670539 jtrain <- subset(jtrain, scrap>0) head(jtrain[,1:11]) year fcode employ sales avgsal scrap rework tothrs union grant d89 31 1987 410523 70 8000000 19760 0.06 NA 40 0 0 0 32 1988 410523 85 11000000 22360 0.05 NA 40 0 0 0 33 1989 410523 98 15000000 23920 0.05 NA 60 0 0 1 49 1987 410538 NA NA 19760 2.64 NA 0 1 0 0 50 1988 410538 NA 6276271 20800 2.74 NA 0 1 0 0 51 1989 410538 60 5286605 20800 2.54 NA 30 1 0 1 Jtrain <- plm.data(jtrain, c("fcode", "year")) head(jtrain[,1:11]) fcode year employ sales avgsal scrap rework tothrs union grant d89 12
31 410523 1987 70 8000000 19760 0.06 NA 40 0 0 0 32 410523 1988 85 11000000 22360 0.05 NA 40 0 0 0 33 410523 1989 98 15000000 23920 0.05 NA 60 0 0 1 49 410538 1987 NA NA 19760 2.64 NA 0 1 0 0 50 410538 1988 NA 6276271 20800 2.74 NA 0 1 0 0 51 410538 1989 60 5286605 20800 2.54 NA 30 1 0 1 jtrain_fd1 <- plm(lscrap ~ d89 + union + grant + grant_1, data = Jtrain, model = "fd") summary(jtrain_fd1) Oneway (individual) effect First-Difference Model Call: plm(formula = lscrap ~ d89 + union + grant + grant_1, data = Jtrain, model = "fd") Balanced Panel: n=54, T=3, N=162 Observations used in estimation: 108 Residuals : Min. 1st Qu. Median 3rd Qu. Max. -3.127370-0.136817 0.073105 0.261907 2.488502 Coefficients : Estimate Std. Error t-value Pr(> t ) (intercept) -0.090607 0.090970-0.9960 0.32155 d89-0.096208 0.125447-0.7669 0.44486 grant -0.222781 0.130742-1.7040 0.09137. grant_1-0.351246 0.235085-1.4941 0.13817 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Total Sum of Squares: 35.902 Residual Sum of Squares: 34.59 R-Squared: 0.036518 Adj. R-Squared: 0.008725 F-statistic: 1.31393 on 3 and 104 DF, p-value: 0.27388 2. Obter os resíduos FD: resfd <- resid(jtrain_fd1) Veja que estes resíduos têm uma classe específica para modelos plm: class(resfd) [1] "pseries" "numeric" A função lag() na classe pseries gera defasagens de acordo com os grupos. Isto é, enquanto lag(x, k = 1) se x <- (1, 2, 3, 4, 5, 6) gera (NA, 1, 2, 3, 4, 5), se x for uma pseries sendo 2 indivíduos em 3 anos, o vetor defasado ficaria (NA, 1, 2, NA, 4, 5). No entanto, como o modelo é em primeira diferenças, perdemos o primeiro ano, ficando com t 1 períodos para i indivíduos, enquanto dentro do pseries está a informação que são t períodos para i indivíduos. Assim, suponha que a base de dados plm contenha (1, 2, 3, 4, 5, 6) sendo i = 2 e t = 3. A série de resíduos será de tamanho 4 e não 6, já que a primeira observação para cada indivíduo será 13
perdida: (2, 3, 5, 6). Mas a diferenciação não é conhecida por lag(), que gerará uma série de tamanho 6, e não 4, com o seguinte formato (NA, 3, 5, NA, NA, NA). Assim, temos que seguir o procedimento mais manual descrito nos próximos itens. 3. Veja que a série de resíduos têm 108 observações, enquanto a base de dados originais tem 162 observações. Como são três anos para cada indivíduo, temos 162/3 = 54 indivíduos, assim, perdemos 54 observações com a diferenciação: 162-54 = 108: length(resfd) [1] 108 dim(jtrain) [1] 162 30 head(jtrain[,1:3]) fcode year employ 31 410523 1987 70 32 410523 1988 85 33 410523 1989 98 49 410538 1987 NA 50 410538 1988 NA 51 410538 1989 60 162-162/3 [1] 108 Assim, precisamos montar uma base de dados eliminando o primeiro ano de cada indivíduo: dadosauxiliares <- subset(jtrain, year!=1987)[,1:2] head(dadosauxiliares) fcode year 32 410523 1988 33 410523 1989 50 410538 1988 51 410538 1989 77 410563 1988 78 410563 1989 dim(dadosauxiliares) # 108 observaç~oes [1] 108 2 # Incluindos os resíduos FD: dadosauxiliares$resfd <- resfd head(dadosauxiliares) fcode year resfd 32 410523 1988-0.09171388 33 410523 1989 0.18681538 50 410538 1988 0.12778636 51 410538 1989 0.11102140 77 410563 1988 0.24475815 78 410563 1989-0.14965666 14
4. Agora precisamos criar a variável resfd t 1. Há várias formas de fazer isto no R usando pacotes diferentes. A mais didática é usando o pacote DataCombine: # install.packages("datacombine") library(datacombine) dadosauxiliares <- slide(dadosauxiliares, Var = "resfd", NewVar = "resfd_1", GroupVar = "fcode", slideby = -1, reminder = F) head(dadosauxiliares) fcode year resfd resfd_1 1 410523 1988-0.09171388 NA 2 410523 1989 0.18681538-0.09171388 3 410538 1988 0.12778636 NA 4 410538 1989 0.11102140 0.12778636 5 410563 1988 0.24475815 NA 6 410563 1989-0.14965666 0.24475815 5. Estimamos a equação ê it = ˆρê i,t 1 + ξ: summary(lm(resfd ~ resfd_1, data = dadosauxiliares)) Call: lm(formula = resfd ~ resfd_1, data = dadosauxiliares) Residuals: Min 1Q Median 3Q Max -2.9956-0.1085 0.1529 0.2501 0.6545 Coefficients: Estimate Std. Error t value Pr(> t ) (Intercept) -7.504e-17 7.622e-02 0.00 1.0000 resfd_1 2.369e-01 1.346e-01 1.76 0.0844. --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.5601 on 52 degrees of freedom (54 observations deleted due to missingness) Multiple R-squared: 0.0562,Adjusted R-squared: 0.03805 F-statistic: 3.096 on 1 and 52 DF, p-value: 0.08435 1.3.2 Teste de Hausman O teste de Hausman é um teste para a escolha entre o modelo de Fixed ou Random Effects. Estimamos e armazenamos os dois modelos e usamos o comando phtest do pacote plm: mod_re <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS, model = "random", data = Dados) phtest(mod_fe, mod_re) Hausman Test 15
data: ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS chisq = 520.25, df = 6, p-value < 2.2e-16 alternative hypothesis: one model is inconsistent A hipótese nula é que não existe diferença estre os estimadores RE e FE. Como FE é consistente se c i é correlacionado com x it, mas RE não é, uma diferença entre os dois modelos indica que um deles é inconsistente, ou seja, que RE é inconsistente, indicando que c i é correlacionado com x it e, portanto, o modelo de efeitos fixos é preferível ao de efeitos aleatórios. Se rejeitarmos a hipótese nula, é uma evidência contra o uso do modelo de efeitos aleatórios. 1.3.3 Teste LM de Breusch-Pagan O teste LM de Breusch-Pagan é um teste entre o modedlo Pooled OLS e o modelo de Random Effects: mod_ols <- plm(ada ~ ROA + MTB + SIZE + LEV + CFO + LOSS, model = "pooling", data = Dados) plmtest(mod_ols, effect="twoways", type="bp") Lagrange Multiplier Test - two-ways effects (Breusch-Pagan) for unbalanced panels data: ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS chisq = 9.1358, df = 2, p-value = 0.01038 alternative hypothesis: significant effects A rejeição da hipótese nula indica a existência de um efeito não observado. 1.3.4 Teste F Há um teste F entre o modelo Pooled OLS e o modelo de Fixed Effects: pftest(mod_fe, mod_ols) F test for individual effects data: ADA ~ ROA + MTB + SIZE + LEV + CFO + LOSS F = 1.6731, df1 = 999, df2 = 6576, p-value < 2.2e-16 alternative hypothesis: significant effects A rejeição da hipótese nula indica a existência de um efeito não observado. 16