# Sampling from Empirical CDF for Forecasting

I'm trying to forecast the future distribution of a particular interest rate based on its quarterly percentage changes. My assumptions are that:

1. The observations are independent
2. The distribution holds across time (stationarity of the quarterly percentage changes)

When I run Shapiro / K-S tests of normality on my historical data, I find very strong evidence in favor of rejecting the null hypothesis that both types of change my data could have been generated from a normal distribution, so I want to forecast based on the empirical distribution.

My questions are:

1. Is there any way to determine whether or not using the empirical distribution gives a better estimate than using a normal distribution?
2. I'm using $\textsf{R}$'s sample(x, size) command to generate potential paths for MC simulation -- is this the "right" way to sample from the empirical distribution? Are there issues I'm failing to consider properly since the empirical distribution is discrete?

Many thanks.

As pointed out by the other poster, you cannot treat time series data as a simple random sample due to the correlations between adjacent observations in time. A nice nonparametric approach to generating sample paths is the block boostrap and here http://nccur.lib.nccu.edu.tw/bitstream/140.119/35143/6/51007106.pdf

Note that the first link also points you to the handy tsboot package in R.

• Thanks -- I've been looking through the Romano & Politis, '91 paper and have a more detailed question that I will post separately (with links to this question and the block bootstrap question). Jun 8 '16 at 15:04
• On my first question -- is there a way to get a sense for "how bad" this method is? That is, how much am I missing using the empirical distribution with the sample() command and assuming iid changes versus using the correlated structure once I implement it with tsboot? Jun 8 '16 at 15:49
• @jjjjjj honestly, the clearest and most direct way to find out is to implement both and compare results. That will also help you prepare for any criticisms or questions about this. Theoretical justifications are generally less convincing, unless they are ironclad, non-asymptotic, and directed at an appropriately technical audience.
– user75138
Jun 9 '16 at 0:39

Just make sure you resample from your data with replacement, and you give every data point the same chance of being chosen. Then you should be good. Here's a quick R example:

num_samples <- 3
historical_changes <- c(.02, -.03, .05, -.2, .38)
n <- length(historical_changes)
prob_vector <- rep(1/n, n)
resamples <- sample(x=historical_changes, size = num_samples, replace = TRUE, prob = prob_vector)
# future stuff
last_rate_level <- .2
future_path <- last_rate_level + cumsum(resamples)


You probably want to wrap that in a function and generate a bunch of them.

Here's the math behind the idea. As long as your historical data set is large enough, you should be drawing almost exactly from the "true" distribution of percentage changes. Denote a random draw as $X^*$. If you're assuming all of these percentage changes are iid then

$$P(X^* \le x) = \frac{1}{n}\sum_{i=1}^n 1(X_i \le x) \to P(X_1 \le x)$$ as $n \to \infty$ by the law of large numbers.

I wouldn't worry about the discreteness. Rather, I would worry about the fact that you're not treating the time series data as a time series. All of the work above assumes that one time's change is independent from the others. I am not a domain expert here, so I can't say how much trouble you're going to run into.

• Great, thanks -- yes this is the approach that I'd taken, and thank you for highlighting that the independence assumption is one that I need focus on. Jun 7 '16 at 14:50