# Q1.1 Moments PPP_da <- read.csv("http://www.bauer.uh.edu/rsusmel/4397/ppp_m.csv",head=TRUE,sep=",") x_dkk <- PPP_da$DKK_USD x_sgd <- PPP_da$SGD_USD summary(x_dkk) summary(x_sgd) # You will notice some (191) NA at the start of the sample T_dkk <- length(x_dkk) lr_dkk <- log(x_dkk[-1]/x_dkk[-T_dkk]) T_sgd <- length(x_sgd) lr_sgd <- log(x_sgd[-1]/x_sgd[-T_sgd]) # There will be NA (or NAN = not a number) entries here. # Different ways to redefine the data, start working with SGD from 1981:Jan (T=97) or use na.omit (it omits NA from data) lr_sgd_T <- lr_sgd[97:(T_sgd-1)] # Redefining your data from actual start of sample lr_sgd_na <- na.omit(lr_sgd) # Redefining sample by ignoring NA # For DKK x <- lr_dkk T <- length(x) m1 <- sum(x)/T # Mean m1 m2 <- sum((x-m1)^2)/T # Variance sd <- sqrt(m2) # SD sd m3 <- sum((x-m1)^3)/T # For numerator of S m4 <- sum((x-m1)^4)/T # For numerator of K b1 <- m3/m2^(3/2) # Sample Skewness b1 b2 <- (m4/m2^2) # Sample Kurtosis b2 # For SGD x <- lr_sgd_na T <- length(x) m1 <- sum(x)/T # Mean m1 m2 <- sum((x-m1)^2)/T # Variance sd <- sqrt(m2) # SD sd m3 <- sum((x-m1)^3)/T # For numerator of S m4 <- sum((x-m1)^4)/T # For numerator of K b1 <- m3/m2^(3/2) # Sample Skewness b1 b2 <- (m4/m2^2) # Sample Kurtosis b2 n_breaks <- 20 h <- hist(x, breaks=n_breaks, col="red", xlab="% Changes in SGD/USD", main = "Distribution - Histogram for SGD") # Q1.2 - Jarque-Bera test JB <- (b1^2 + (b2-3)^2/4) * T/6 JB # JB > 5.99 => Reject Normality at 5% level. ## R Note: You can also use the jarque.bera.test(x) form the tseries package. # Q1.3 - C.I and Tests # a monthly_mean <- .01 monthly_SD <- 0.21 mon <-3 quarterly_mean <- monthly_mean * mon # annual mean = .01 * 12 = 12% quarterly_SD = monthly_SD * sqrt(mon) # annual SD = 0.21 * sqrt(12) = 72.75% # b z_98 <- 2.33 ci_98 <- c(monthly_mean - z_98 * monthly_SD, monthly_mean + z_98 * monthly_SD) ci_98 # c N <- 79 s2 <- monthly_SD ^2 var_CI_lb <- (N-1)*s2/qchisq(.99, df=N-1) var_CI_ub <- (N-1)*s2/qchisq(.01, df=N-1) sd_CI_lb <- sqrt(var_CI_lb) sd_CI_lb sd_CI_ub <- sqrt(var_CI_ub) sd_CI_ub # d t_hat <- (monthly_mean - 0)/(monthly_SD/sqrt(N)) t_hat # |t_hat| < 1.96 => Cannot reject monthly mean = 0 at 5% level. # Q1.4 - Practice Linear Algebra # a A <- matrix(runif(9), nrow =3) B <- matrix(runif(9), nrow =3) det(A) det(B) A %*% B B %*% A # b A+B A-B # c v <-seq(1,9, by=3) A %*% v #d t(v) %*% A # e t(v) %*% v # f w <- c(1, 1, 7) v/w # Q1.5 - Practice Linear Algebra (continuation) # a d1 <- runif(6) d2 <- rnorm(6) D <- cbind(d1,d2) C <- t(D)%*% D # b solve(C) # c diag(solve(C)) # d f <- rnorm(6) b <- solve(C)%*%t(D)%*%f # e f_hat <- D%*%b # f e <- f - f_hat # g RSS <- as.numeric(t(e)%*% e) #as.numeric forces R to treat a 1x1 matrix as a scalar, not a matrix (kills the dimensions) # h sigma2 <- RSS/(6-2) # i Var_b <- sigma2 * solve(C) # j SE_b <- sqrt(diag(Var_b)) # Q1.6 Regression SFX_da <- read.csv("http://www.bauer.uh.edu/rsusmel/4397/Stocks_FX_1973.csv",head=TRUE,sep=",") x_pfe <- SFX_da$PFE x_Mkt_RF<- SFX_da$Mkt_RF x_RF<- SFX_da$RF lr_pfe <- log(x_pfe[-1]/x_pfe[-T]) Mkt_RF <- x_Mkt_RF[-1]/100 RF <- x_RF[-1]/100 pfe_x <- lr_pfe - RF # a (plot) plot(pfe_x, Mkt_RF, main = "Excess Returns: Pfizer vs Market") # b fit_capm <- lm(pfe_x ~ Mkt_RF) out_capm <- summary(fit_capm) out_capm b_capm <- fit_capm$coefficients # Extract coefficient from object fit_capm b_capm_1 <- out_capm$coefficients[,1] # Extract coefficient from matrix of results in summary(fit_capm) b_capm_sd1 <- out_capm$coefficients[,2] # c (t-value of Intercept) t_alpha <- b_capm[1]/b_capm_sd1[2] # d (t <- (slope - 1)/SE) has to be greater than 1.645 (if lower, reject H0) t_beta_1 <- (b_capm[2]-1)/b_capm_sd1[2] # e Intercept + Slope * 0.005 pred <- b_capm[1] + b_capm[2]*.005 # Q1.7 # a H0: Beta = 0 vs H1: Beta =/= 0 #b t_test <- (0.92 - 0)/0.26