library(wooldridge)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
data <- wooldridge::minwage
# Part (i): Find the first-order autocorrelation in gwage232
first_order_autocorr <- cor(data$gwage232[-1], data$gwage232[-nrow(data)], use = "complete.obs")
cat("First-order autocorrelation:", first_order_autocorr, "\n")
## First-order autocorrelation: -0.03494393
# Part (ii): Estimate the dynamic model
# Create lagged gwage232
data$gwage232_lag1 <- c(NA, head(data$gwage232, -1))
# Run the OLS regression
model1 <- lm(gwage232 ~ gwage232_lag1 + gmwage + gcpi, data = data, na.action = na.exclude)
cat("Summary of Model 1:\n")
## Summary of Model 1:
summary(model1)
##
## Call:
## lm(formula = gwage232 ~ gwage232_lag1 + gmwage + gcpi, data = data,
## na.action = na.exclude)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.044642 -0.004134 -0.001312 0.004482 0.041612
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0024003 0.0004308 5.572 3.79e-08 ***
## gwage232_lag1 -0.0779092 0.0342851 -2.272 0.02341 *
## gmwage 0.1518459 0.0096485 15.738 < 2e-16 ***
## gcpi 0.2630876 0.0824457 3.191 0.00149 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.007889 on 606 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.2986, Adjusted R-squared: 0.2951
## F-statistic: 85.99 on 3 and 606 DF, p-value: < 2.2e-16
# Part (iii): Add lagged growth in employment (gemp232_lag1) and check its significance
# Create lagged gemp232
data$gemp232_lag1 <- c(NA, head(data$gemp232, -1))
# Run the new regression including lagged gemp232
model2 <- lm(gwage232 ~ gwage232_lag1 + gmwage + gcpi + gemp232_lag1, data = data, na.action = na.exclude)
cat("Summary of Model 2:\n")
## Summary of Model 2:
summary(model2)
##
## Call:
## lm(formula = gwage232 ~ gwage232_lag1 + gmwage + gcpi + gemp232_lag1,
## data = data, na.action = na.exclude)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.043842 -0.004378 -0.001034 0.004321 0.042548
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.002451 0.000426 5.753 1.4e-08 ***
## gwage232_lag1 -0.074546 0.033901 -2.199 0.028262 *
## gmwage 0.152707 0.009540 16.007 < 2e-16 ***
## gcpi 0.252296 0.081544 3.094 0.002066 **
## gemp232_lag1 0.066131 0.016962 3.899 0.000108 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.007798 on 605 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.3158, Adjusted R-squared: 0.3112
## F-statistic: 69.8 on 4 and 605 DF, p-value: < 2.2e-16
# Part (iv): Compare the models and assess the effect on gmwage coefficient
gmwage_effect_model1 <- summary(model1)$coefficients["gmwage", ]
gmwage_effect_model2 <- summary(model2)$coefficients["gmwage", ]
cat("Effect of gmwage in Model 1:\n")
## Effect of gmwage in Model 1:
print(gmwage_effect_model1)
## Estimate Std. Error t value Pr(>|t|)
## 1.518459e-01 9.648536e-03 1.573771e+01 4.841290e-47
cat("Effect of gmwage in Model 2:\n")
## Effect of gmwage in Model 2:
print(gmwage_effect_model2)
## Estimate Std. Error t value Pr(>|t|)
## 1.527070e-01 9.540003e-03 1.600701e+01 2.402983e-48
# Part (v): Run the regression of gmwage on gwage232_lag1 and gemp232_lag1, and report R-squared
model3 <- lm(gmwage ~ gwage232_lag1 + gemp232_lag1, data = data, na.action = na.exclude)
cat("Summary of Model 3:\n")
## Summary of Model 3:
summary(model3)
##
## Call:
## lm(formula = gmwage ~ gwage232_lag1 + gemp232_lag1, data = data,
## na.action = na.exclude)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.01914 -0.00500 -0.00379 -0.00287 0.62208
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003433 0.001440 2.384 0.0174 *
## gwage232_lag1 0.203167 0.143140 1.419 0.1563
## gemp232_lag1 -0.041706 0.072110 -0.578 0.5632
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03318 on 607 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.00392, Adjusted R-squared: 0.0006377
## F-statistic: 1.194 on 2 and 607 DF, p-value: 0.3036
rsq <- summary(model3)$r.squared
cat("R-squared of the regression:", rsq, "\n")
## R-squared of the regression: 0.003919682