4
$\begingroup$

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?

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

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)

$\endgroup$
  • 1
    $\begingroup$ That's a cool trick. $\endgroup$ – Daneel Olivaw Oct 12 '17 at 21:04
  • 1
    $\begingroup$ That's a fabulous answer $\endgroup$ – dm63 Oct 13 '17 at 1:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.