########################################################################### # Homework 3 # Time Series # Phd in Business Economics, Insper # February 2021 # # http://hedibert.org/wp-content/uploads/2021/02/hw3-timeseries-2020.pdf # ########################################################################## library(forecast) library(astsa) unemp.q = read.csv("LRUN64TTUSQ156S.csv",header=TRUE)[,2] date.q = seq(1970,2019+3/4,by=1/4) par(mfrow=c(1,1)) plot(date.q,unemp.q,xlab="",ylab="unemployment rate",type="h",lwd=2) title("Quarterly U.S. civilian unemployment rate, seasonally adjusted\n https://fred.stlouisfed.org") lines(date.q,unemp.q,col=2,lwd=2) par(mfrow=c(1,2)) acf(unemp.q,main="",lag.max=20) pacf(unemp.q,main="",lag.max=20) auto.arima(unemp.q) # Series: unemp.q # ARIMA(2,0,0) with non-zero mean # # Coefficients: # ar1 ar2 mean # 1.6533 -0.6870 6.0415 # s.e. 0.0515 0.0519 0.5047 # # sigma^2 estimated as 0.0618: log likelihood=-6.14 # AIC=20.28 AICc=20.48 BIC=33.47 ##################################################################################### # Fitting a TAR(2) model ##################################################################################### # Setting up y and X for the AR(2) part of the model ts = diff(unemp.q) n = length(ts) y = ts[3:n] X = cbind(1,ts[2:(n-1)],ts[1:(n-2)]) n = nrow(X) ymin = sort(y)[10] ymax = sort(y)[(n-10)] # MAXIMUM LIKELIHOOD INFERENCE ############################### loglike = function(gamma){ ind = X[,2]ymin))]) N = length(gammas) llike = rep(0,N) for (i in 1:N) llike[i] = loglike(gammas[i]) par(mfrow=c(1,1)) plot(gammas,llike,type="h") gamma.mle = gammas[llike==max(llike)] ind = X[,2]=gamma] X2 = X[X[,2]>=gamma,] B1 = solve(iB0+t(X2)%*%X2/tau2) b1 = B1%*%(iB0b0+t(X2)%*%y2/tau2) beta = b1 + t(chol(B1))%*%rnorm(3) n1 = length(y2) par1 = (n1-2)/2 par2 = sum((y2-X2%*%beta)^2)/2 tau21 = 1/rgamma(1,par1,par2) accept = min(1,(1+tau2)/(1+tau21)) if (runif(1)ymin)&(gamma1=gamma1] X2 = X[X[,2]>=gamma1,] lognum = sum(dnorm(y1,X1%*%phi,sqrt(sig2),log=TRUE))+ sum(dnorm(y2,X2%*%beta,sqrt(tau2),log=TRUE)) logaccept = min(0,lognum-logden) if (log(runif(1))