Увеличение среднего отклонения с увеличением размера выборки в 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, поэтому я не удивлен, когда накапливаются отклонения.