Homework 8
==========
*First name, Last name (replace with your name)*


For this assignment, we will use the `forecast` and `tseries` libraries.

```{r}
# Load the libraries.  If you get an error, you will need to install
# the packages using the "Tools > Install Packages..." command.

library("forecast")
library("tseries")
```

The dataset is the exchange rate for the Indian Rupee to 1 U.S. Dollar.
The data is daily from July 1st, 2002 to April 8th, 2011.

```{r}
data <- read.csv("http://ptrckprry.com/course/forecasting/data/rupee.csv")
date <- as.Date(data$date, format="%m/%d/%Y")
time <- 1:length(date)
rupee <- data$rupee
```

We will work with the logs of the exchange rates:

```{r}
log.rupee <- log(rupee)
```


Problem 1
---------

Here is a time series plot of log.rupee, along with the ACF and PACF:

```{r}
## Add plots.
```

Here is the first difference, along with the ACF and PACF:

```{r}
## Add code to compute the first difference and make the plots.
```

Here is the second difference, along with the ACF and PACF:

```{r}
## Add code to compute the second difference and make the plots.
```

**Does the series appear to be stationary?**


**Can you identify an ARIMA(p,d,q) model from these plots?**



Problem 2
---------

Here are the AICc for all ARIMA(p,1,q) models without constant for p and q
ranging from 0 to 2:


```{r}
# Add code to compute the AICc values.  You can modify the code from
# http://ptrckprry.com/course/forecasting/lecture/nasdaq-arch.html
# if you don't want to do this by hand.
```

**Select an ARIMA(p,1,q) model.**


Here is code to fit the model, then compute residuals and the fitted values:

```{r}
# Add code to fit the ARIMA model.
# fit.mean <- ???? # replace with your arima model
```

Here are the residuals, with the last 10 residuals printed out:
```{r}
# Uncomment:
# resid <- residuals(fit.mean)
# tail(resid, n=10)
```

Here are the fitted values, with the last 10 fitted values printed out:
```{r}
# f <- fitted.values(fit.mean)
# tail(f, n=10)
```

Here is the one step ahead forecast and 95% forecast interval:

```{r}
# Add code to compute the forecast and interval.  You can do this
# by hand, or you can use the "forecast" function.
```


Problem 3
---------

Here is a plot of the residuals:

```{r}
# Add plot of the residuals.
```

Here are an ACF and PACF of the residuals:

```{r}
# Add ACF, PACF of residuals.
```

Here are an ACF and PACF of the squared residuals:

```{r}
# Add ACF, PACF of squared residuals.
```

**Use these plots to argue that the residuals, although approximately
uncorrelated, are not independent; instead, they show evidence of conditional
heteroscedasticity.**



Problem 4
---------

Here are the AICc values for the ARCH(q):

```{r}
# Add code to compute the AICc values for the ARCH(q) models.
# You can modify the code from 
# http://ptrckprry.com/course/forecasting/lecture/nasdaq-arch.html
```

Here is the AICc for the GARCH(1,1):

```{r}
# Add code to compute the AICc values for the GARCH(1,1) models.
# You can modify the code from 
# http://ptrckprry.com/course/forecasting/lecture/nasdaq-arch.html
```


Here are the summary and log likelihood of the selected model:

```{r}
# replace the ???? with code to fite the model, then uncomment
# the other lines.

# fit.var <- ????
# summary(fit.var)
# logLik(fit.var)
```

**Comment on the statistical significance of the parameter values of your
selected model.**


**Write the complete form of the ARCH or GARCH model you have selected.**


Problem 5
---------

**Construct a 95% one step ahead forecast interval for the log exchange rate,
based on your ARIMA-ARCH model.**

```{r}
# You will need to to this by hand.  First, get the forecast (conditional
# mean) from the end of Problem 2.  Store this in a variable called "f1":
# f1 <- ?????

# Next, you need to determine the conditional variance, which we will store
# in a variable called "h1".
#
# To do this, use the output from Problem 4 to determine the coefficients
# (omega, alpha, etc.).  Use the output from Problem 2 to get the most
# recent residuals (shocks).  If your model is GARCH(1,1), you will also need
# the most recent conditional variance, which you can get from Problem 6.
# 
# Copy and paste the values and compute the conditional variance:
# h1 <- ????

# Finally, we compute the 95% forecast interval using the following command:
# f1 + c(-1, 1) * 1.96 * sqrt(h1)
```

**Compare this to the interval based on the ARIMA only model from Problem 2.**



Problem 6
---------

Here are the conditional variances, with the last 10 values printed out:

```{r}
# Hint: see http://ptrckprry.com/course/forecasting/lecture/nasdaq-arch.html

# ht <- ????
# tail(ht, n=10)
```

Here is a plot of the conditional variances:

```{r}
# Add plot of the conditional variances
```

**Use this plot to locate bursts of high volatility.**


**Do these highly volatile periods agree with those found from examination of
the time series plot of the log exchange rates themselves?**


Problem 7
---------

Here is a time series plot which simultaneously shows the log exchange rates,
together with the ARIMA-ARCH one-step-ahead 95% forecast intervals based on
information available in the previous day:

```{r fig.width=12, fig.height=8}
# Uncomment the following lines to make the plot:

# plot(date, log.rupee, type="l")
# lines(date, f + 1.96 * sqrt(ht), lty=2, col=2)
# lines(date, f - 1.96 * sqrt(ht), lty=2, col=2)
```

**Using this plot, comment on the accuracy and practical usefulness of the
forecast intervals.**



Problem 8
---------

Here is a normal probability plot of the ARCH residuals.

```{r}
# Add code to compute the arch residuals:
# resid.arch <- ????

# Now, add code to make a normal probability plot (with the qqnorm command)
```

**Does the model seem to have adequately described the leptokurtosis
("long-tailedness") in the data?**


Problem 9
---------

Here is a count of how many prediction interval failures there were:

```{r}
# The following command counts the number of arch residuals bigger than
# 0.5.  Modify this command to count the number of times the prediciton
# interval failed:

# sum(abs(resid.arch) > 0.5, na.rm=TRUE)
```

The number of prediction intervals is:
```{r}
# Uncomment to get a count of the number of non-missing arch residuals:
# sum(!is.na(resid.arch))
```

**What percentage of the time did the intervals fail?

