Q:

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:

The observations are independent
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: 

Is there any way to determine whether or not using the empirical distribution gives a better estimate than using a normal distribution?
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.

A:

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. 

A:

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.

