5

I'm having some troubles understanding a problem.

The problem: "Show how a measure change can be used to estimate the probability for $Y > 100$ when $Y \sim \mathcal{N}(0, 1)$.

The book I'm using doesn't go through this part that well, so could anyone explain this example?

LocalVolatility
  • 6,034
  • 4
  • 19
  • 35

1 Answers1

13

In order to estimate a probability of an event with small probability, you might want to try to estimate the probability for a changed random variable that allocates a larger probability mass for the event happening. So, in your case, you might want to change the original $N(0, 1)$ to $N(100, 1)$ because for the second r.v. the probability of it being higher than 100 is $\frac{1}{2}$. So, you are looking for a change of measure in form:

$$ \frac{dQ}{dP} = \frac{dN(0,1)}{dN(100,1)} = exp(-100y+5000), $$

where $Q$ is the probability measure associated with $N(0, 1)$ and $P$ is the probability measure associated with $N(100, 1)$.

And therefore for an event $A = \{Y > 100\}$ by the Radon-Nikodym theorem we can obtain: $$ Q(A) = E_{P}[exp(-100Y+5000)I(A)] \approx \frac{1}{n} \sum_{i=1}^{n} e^{-100y_i + 5000} I(y_i > 100) \\ = e^{-5000} \frac{1}{n} \sum_{i=1}^{n} e^{-100(y_i-100)} I(y_i > 100) $$

By running, for example this C++ code:

#include <vector>
#include <random>
#include <iostream>
int main()
{
    std::vector<long double> estimation;
    int simulation_length { 1000000 };
    std::default_random_engine generator;
    std::normal_distribution<long double> distribution(100.0, 1.0);
    long double pick;
    long double estimation_sum { 0.0 };

    for (int i = 0; i != simulation_length; ++i)
    {
        pick = distribution(generator);
        if (pick > 100)
        {
            estimation.push_back(exp(-100 * (pick - 100)));
        }
    }

    for (double i : estimation)
    {
        estimation_sum += i;
    }

    std::cout << estimation_sum / simulation_length << std::endl;

    return 0;
}

you get the output 0.00400264. By multiplying it by exp(-5000) you get 1.34876725857872×10^(-2174), which is very close to the true value (i.e. 1.34417907674465×10^(-2174), obtained through Mathematica)

ragoragino
  • 561
  • 1
  • 5
  • 11