library(wooldridge)
data("minwage")

# Create a lagged variable for gwage232
minwage$lag_gwage232 <- lag(minwage$gwage232)

# (i) 
filtered_data <- minwage[complete.cases(minwage$gwage232, minwage$lag_gwage232), ]

acf(filtered_data$gwage232, lag.max = 1)

# (ii) 
model1 <- lm(gwage232 ~ lag_gwage232 + gmwage + gcpi, data = filtered_data)
summary(model1)
## Warning in summary.lm(model1): essentially perfect fit: summary may be
## unreliable
## 
## Call:
## lm(formula = gwage232 ~ lag_gwage232 + gmwage + gcpi, data = filtered_data)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -9.328e-18 -4.733e-19 -1.509e-19  2.395e-19  2.199e-17 
## 
## Coefficients:
##                Estimate Std. Error    t value Pr(>|t|)    
## (Intercept)   5.614e-19  8.101e-20  6.930e+00 1.08e-11 ***
## lag_gwage232  1.000e+00  7.632e-18  1.310e+17  < 2e-16 ***
## gmwage       -1.176e-17  2.150e-18 -5.468e+00 6.65e-08 ***
## gcpi          5.219e-17  1.557e-17  3.353e+00  0.00085 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.489e-18 on 607 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 8.091e+33 on 3 and 607 DF,  p-value: < 2.2e-16
# (iii) 
model2 <- lm(gwage232 ~ lag_gwage232 + gmwage + gcpi + lag(gemp232), data = filtered_data)
summary(model2)
## Warning in summary.lm(model2): essentially perfect fit: summary may be
## unreliable
## 
## Call:
## lm(formula = gwage232 ~ lag_gwage232 + gmwage + gcpi + lag(gemp232), 
##     data = filtered_data)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -9.345e-18 -5.038e-19 -1.412e-19  2.410e-19  2.197e-17 
## 
## Coefficients:
##                Estimate Std. Error    t value Pr(>|t|)    
## (Intercept)   5.614e-19  8.107e-20  6.925e+00 1.11e-11 ***
## lag_gwage232  1.000e+00  7.640e-18  1.309e+17  < 2e-16 ***
## gmwage       -1.175e-17  2.152e-18 -5.460e+00 6.97e-08 ***
## gcpi          5.221e-17  1.558e-17  3.351e+00 0.000854 ***
## lag(gemp232) -1.365e-18  3.237e-18 -4.220e-01 0.673352    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.49e-18 on 606 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 6.06e+33 on 4 and 606 DF,  p-value: < 2.2e-16
# (iv)
coef(model1)["gmwage"]
##        gmwage 
## -1.175795e-17
coef(model2)["gmwage"]
##       gmwage 
## -1.17483e-17
# (v)
model3 <- lm(gmwage ~ lag(gwage232) + lag(gemp232), data = filtered_data)
summary(model3)$r.squared
## [1] 0.2825375