Probability in different measures

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?

• That is all the problem says? Nothing else, no previous question, no context? Oct 12 '17 at 18:13
• Nope, nothing else :/ Bad problems by my professor... Oct 12 '17 at 18:30
• Perhaps it's just an explaining answer they want? Oct 12 '17 at 18:30

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)

• That's a cool trick. Oct 12 '17 at 21:04