rm(list=ls()) library(ISLR) library(MASS) library(class) attach(Weekly) summary(Weekly) ### a ### pairs(Weekly) cor(Weekly[, -9]) ### b ### glm.fit <- glm(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume, data = Weekly, family = binomial) summary(glm.fit) ### c ### glm.probs <- predict(glm.fit, type = "response") glm.pred <- rep("Down", length(glm.probs)) glm.pred[glm.probs > 0.5] <- "Up" table(glm.pred, Direction) ### d ### train <- (Year < 2009) glm.fit <- glm(Direction ~ Lag2, data = Weekly[train, ], family = binomial) glm.probs <- predict(glm.fit, Weekly[!train, ], type = "response") glm.pred <- rep("Down", length(glm.probs)) glm.pred[glm.probs > 0.5] <- "Up" table(glm.pred, Direction[!train]) mean(glm.pred == Direction[!train]) ### e ### lda.fit <- lda(Direction ~ Lag2, data = Weekly[train, ]) lda.pred <- predict(lda.fit, Weekly[!train, ]) table(lda.pred$class, Direction[!train]) mean(lda.pred$class == Direction[!train]) ### f ### qda.fit <- qda(Direction ~ Lag2, data = Weekly[train, ]) qda.pred <- predict(qda.fit, Weekly[!train, ]) table(qda.pred$class, Direction[!train]) mean(qda.pred$class == Direction[!train]) ### g ### knn.pred <- knn(as.matrix(Lag2[train], ncol = 1), as.matrix(Lag2[!train], ncol = 1), Direction[train], k = 1) table(knn.pred, Direction[!train]) mean(knn.pred == Direction[!train]) ### h ### # Logistic regression and LDA have the same miss-classification error, smaller than the other. ### i ### # Logistic regression with interaction glm.fit <- glm(Direction ~ Lag2*Lag1, data = Weekly[train, ], family = binomial) glm.probs <- predict(glm.fit, Weekly[!train, ], type = "response") glm.pred <- rep("Down", length(glm.probs)) glm.pred[glm.probs > 0.5] <- "Up" table(glm.pred, Direction[!train]) mean(glm.pred == Direction[!train]) # LDA with Lag2 interaction with Lag1 lda.fit <- lda(Direction ~ Lag2*Lag1, data = Weekly[train, ]) lda.pred <- predict(lda.fit, Weekly[!train, ]) table(lda.pred$class, Direction[!train]) mean(lda.pred$class == Direction[!train]) # QDA with Lag2^2 qda.fit <- qda(Direction ~ Lag2 + I(Lag2^2), data = Weekly[train, ]) qda.pred <- predict(qda.fit, Weekly[!train, ]) table(qda.pred$class, Direction[!train]) mean(qda.pred$class == Direction[!train]) # KNN k = 10 knn.pred <- knn(as.matrix(Lag2[train], ncol = 1), as.matrix(Lag2[!train], ncol = 1), Direction[train], k = 10) table(knn.pred, Direction[!train]) mean(knn.pred == Direction[!train]) # KNN k = 100 knn.pred <- knn(as.matrix(Lag2[train], ncol = 1), as.matrix(Lag2[!train], ncol = 1), Direction[train], k = 100) table(knn.pred, Direction[!train]) mean(knn.pred == Direction[!train])