Увеличение среднего отклонения с увеличением размера выборки в Excel NORMINV()

У меня странное поведение при попытке кодировать NORMINV() в Excel на языке C. Так как norminv () я взял эту функцию у математика, она, вероятно, верна, поскольку я также пробовал разные с тем же результатом. Вот код:

double calculate_probability(double x0, double x1)
{
    return x0 + (x1 - x0) * rand() / ((double)RAND_MAX);
}

int main() {

long double probability = 0.0;
long double mean = 0.0;
long double stddev = 0.001;
long double change_percentage = 0.0;
long double current_price = 100.0;
srand(time(0));
int runs = 0;
long double prob_sum = 0.0;
long double price_sum = 0.0;

while (runs < 100000)
{
    probability = calculate_probability(0.00001, 0.99999);
    change_percentage = mean + stddev * norminv(probability); //norminv(p, mu, sigma) = mu + sigma * norminv(p)
    current_price = current_price * (1.0 + change_percentage);
    runs++;
    prob_sum += probability;
    price_sum += current_price;
}
printf("\n\n%f %f\n", price_sum / runs, prob_sum / runs);
return 0;
}

Теперь я хочу смоделировать NORMINV в Excel (rand(), 0, 0,001), где rand () - это значение> 0, а <1, 0 - это среднее значение, а 0,001 - стандартное отклонение.

С 1000 значениями это выглядит хорошо:

100,729780 0,501135

При 10000 значениях он распространяется слишком сильно:

107,781909 0,502301

И с 100000 значений это иногда распространяется еще больше:

87,876500 0,498738

Теперь я не знаю, почему это происходит. Я предполагаю, что генератор случайных чисел тоже должен быть нормально распределен. В моем случае probability рассчитывается нормально, так как среднее значение в большинстве случаев составляет 0,5. Таким образом, я не знаю, почему среднее отклонение увеличивается. Кто-нибудь может мне помочь?

1 ответ

Решение

Вы делаете что-то по принципу случайного блуждания, за исключением того, что ваши ходы имеют мультипликативный коэффициент масштабирования, а не аддитивные шаги.

Рассмотрим два последовательных движения, первый из которых дает 20% -ную инфляцию, второй - 20% -ную дефляцию. Начиная с базовой линии 100, после первого шага вы получаете 120. Если теперь вы берете 80% из 120, вы получаете 96, а не исходную 100. Другими словами, казалось бы, симметричные коэффициенты масштабирования на самом деле не симметричны. Несмотря на то, что ваши коэффициенты масштабирования являются случайными, они по-прежнему создаются симметрично около 1, поэтому я не удивлен, когда накапливаются отклонения.

Другие вопросы по тегам