For this assignemnt, I used Lennar Coporation (NYSE: LEN)
library(xts)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
Subset, create time series, plot
Lennar$Date <- as.Date(Lennar$Date)
Lennar2 <- Lennar[c(1,6)]
LennarTS = xts(Lennar2$Adj.Close, order.by=Lennar2$Date)
plot(LennarTS, main = "Lennar Adjusted Closing Price ($)")
Find out how many observations for 80% of the data
(nrow(LennarTS)*.8)
## [1] 401.6
Split the data between test set and training set
dataTrain = first(LennarTS,'402 days') #Extract first 402 days
dataTest = last(LennarTS, '100 days' ) #Extract last 100 days
Regression
mod = tslm(ts(dataTrain) ~ trend)
summary(mod)
##
## Call:
## tslm(formula = ts(dataTrain) ~ trend)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.1972 -3.6614 -0.3733 3.3619 11.0017
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 43.668006 0.477231 91.50 <2e-16 ***
## trend 0.035130 0.002052 17.12 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.775 on 400 degrees of freedom
## Multiple R-squared: 0.4228, Adjusted R-squared: 0.4213
## F-statistic: 293 on 1 and 400 DF, p-value: < 2.2e-16
Test regression on test data
forecastTest = forecast(mod, h=100)
print(accuracy(forecastTest, dataTest))
## ME RMSE MAE MPE MAPE MASE
## Training set -4.927284e-16 4.763408 3.883515 -0.9092679 7.874314 5.728727
## Test set -5.898852e+00 13.007782 10.221371 -17.0831611 23.465227 15.077950
## ACF1
## Training set 0.9747835
## Test set NA
New regression on entire data
mod2 = tslm(ts(LennarTS)~trend)
summary(mod2)
##
## Call:
## tslm(formula = ts(LennarTS) ~ trend)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.3819 -3.8651 0.7007 4.9668 16.0287
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.377263 0.618875 73.32 <2e-16 ***
## trend 0.023662 0.002132 11.10 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.923 on 500 degrees of freedom
## Multiple R-squared: 0.1976, Adjusted R-squared: 0.196
## F-statistic: 123.2 on 1 and 500 DF, p-value: < 2.2e-16
Use full-data regression to predict next 100 days and plot
forecastNext100 = forecast(mod2, h=100)
autoplot(forecastNext100, main = "Lennar Corp 100-day Stock Forecast", ylab = "Adj. Closing Price ($)")