############# Ommited Variables, Trilogy of Tests (Wald, LR & LM tests) & Specification tests (LM Tests & RESET) (Code #8) ############# ##### Omitted Variables Fger_da <- read.csv("http://www.bauer.uh.edu/rsusmel/4397/FX_USA_GER.csv", head=TRUE, sep=",") us_CPI <- Fger_da$US_CPI us_M1 <- Fger_da$US_M1 us_i <- Fger_da$US_I3M us_GDP <- Fger_da$US_GDP ger_CPI <- Fger_da$GER_CPI us_u <- Fger_da$US_UN S_ger <- Fger_da$USD_EUR T <- length(us_CPI) us_I <- log(us_CPI[-1]/us_CPI[-T]) # US Inflation: (Log) Changes in CPI us_mg <- log(us_M1[-1]/us_M1[-T]) # US Money Growth: (Log) Changes in M1 e_ger <- log(S_ger[-1]/S_ger[-T]) # (Log) Changes in USD/EUR us_i_1 <- us_i[-1] # Adjust sample size of untransformed data us_u_1 <- us_u[-1] # Adjust sample size of untransformed data us_i_0 <- us_i[-T] # lagged interest rates, by removing T observation xx_i <- cbind(us_I ,e_ger, us_mg, us_u_1) # X matrix fit_i <- lm(us_i_1 ~ xx_i) summary(fit_i) xx_i <- cbind(us_I ,e_ger, us_mg, us_u_1, us_i_0) # X matrix with lagged interest rates fit_i <- lm(us_i_1 ~ xx_i) summary(fit_i) ##### Trilogy of Tests SFX_da <- read.csv("http://www.bauer.uh.edu/rsusmel/4397/Stocks_FX_1973.csv",head=TRUE,sep=",") x_ibm <- SFX_da$IBM x_Mkt_RF<- SFX_da$Mkt_RF x_SMB <- SFX_da$SMB x_HML <- SFX_da$HML x_RF <- SFX_da$RF T <- length(x_ibm) lr_ibm <- log(x_ibm[-1]/x_ibm[-T]) x0 <- matrix(1,T-1,1) Mkt_RF <- x_Mkt_RF[-1]/100 SMB <- x_SMB[-1]/100 HML <- x_HML[-1]/100 RF <- x_RF[-1]/100 ibm_x <- lr_ibm - RF # IBM excess returns ### Specification Test: Using Wald & LM Tests to test for Omitted Variables (SMB + HML in CAPM) library(lmtest) fit_ibm_ff3 <- lm (ibm_x ~ Mkt_RF + SMB + HML) fit_ibm_capm <- lm (ibm_x ~ Mkt_RF) waldtest(fit_ibm_ff3, fit_ibm_capm) lrtest(fit_ibm_ff3, fit_ibm_capm) ### Specification Test: Using LM Tests to test for Omitted Variables (SMB + HML in CAPM) T <- length(ibm_x) resid_r <- fit_ibm_capm$residuals # extract residuals from R model fit_lm <- lm (resid_r ~ Mkt_RF + SMB + HML) # auxiliary regression summary(fit_lm) R2_r <- summary(fit_lm)$r.squared # extract R2 from fit_lm R2_r LM_test <- R2_r * T LM_test qchisq(.95, df = 2) # chi-squared (df=2) value at 5% level p_val <- 1 - pchisq(LM_test, df = 2) # p-value of LM_test p_val ### Specification Test: Using LM Tests to test for Non linearities (Omitted Variable are Mkt_RF^2, SMB^2 + HML^2) ## Wald Test for including in FF3 Model only MKt_RF^2 Mkt_RF2 <- Mkt_RF^2 fit_ibm_ff3_2 <- lm (ibm_x ~ Mkt_RF + SMB + HML + Mkt_RF2) summary(fit_ibm_ff3_2) ## LM Test for including in FF3 Model MKt_RF^2, SMB^2 + HML^2 SMB2 <- SMB^2 HML2 <- HML^2 resid_r <- fit_ibm_ff3$residuals fit_lm <- lm (resid_r ~ Mkt_RF + SMB + HML + Mkt_RF2 + SMB2 + HML2) R2_r <- summary(fit_lm)$r.squared LM_test <- R2_r * T LM_test qchisq(.95, df = 3) # 95% quantile for Chi-square distribution p_val <- 1 - pchisq(LM_test, df = 3) # p-value of LM_test p_val ### Specification Test: RESET Test y_hat <- fitted(fit_ibm_ff3) y_hat2 <- y_hat^2 fit_ramsey <- lm(ibm_x ~ Mkt_RF + SMB + HML + y_hat2) summary(fit_ramsey) y_hat4 <- y_hat^4 fit_ramsey2 <- lm(ibm_x ~ Mkt_RF + SMB + HML + y_hat4) summary(fit_ramsey2) fit_ramsey2 <- lm(ibm_x ~ Mkt_RF + SMB + HML + y_hat2 + y_hat4) summary(fit_ramsey2) ## Using R package lmtest library(lmtest) resettest(fit_ibm_ff3, power=2, type="fitted") resettest(fit_ibm_ff3, power=4, type="fitted")