После того, как вы вычислили стандартное отклонение для ваших данных, законным вопросом будет «Насколько надежно рассчитанное стандартное отклонение?». Для этой ситуации распределение Chi Squared может быть использовано для расчета доверительных интервалов для стандартного отклонения.
Полный примерный код & выход образца находится в chi_square_std_dev_test.cpp.
Начнем с определения процедуры, которая вычислит и распечатает доверительные интервалы:
void confidence_limits_on_std_deviation(
double Sd,
unsigned N)
{
Начнем с распечатки некоторой общей информации:
cout <<
"________________________________________________\n"
"2-Sided Confidence Limits For Standard Deviation\n"
"________________________________________________\n\n";
cout << setprecision(7);
cout << setw(40) << left << "Number of Observations" << "= " << N << "\n";
cout << setw(40) << left << "Standard Deviation" << "= " << Sd << "\n";
затем определим таблицу уровней значимости, для которой вычислим интервалы:
double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
Распределение, которое нам понадобится для вычисления доверительных интервалов, представляет собой распределение Чи Квадрата с N-1 степенями свободы:
chi_squared dist(N - 1);
Для каждого значения альфа формула доверительного интервала задается:

Где
- верхнее критическое значение, а
- нижнее критическое значение распределения Chi Squared.
В коде мы начинаем с распечатки заголовка таблицы:
cout << "\n\n"
"_____________________________________________\n"
"Confidence Lower Upper\n"
" Value (%) Limit Limit\n"
"_____________________________________________\n";
а затем проведите цикл по значениям альфа и вычислите интервалы для каждого: помните, что нижнее критическое значение такое же, как и квантиль, а верхнее критическое значение такое же, как квантиль из дополнения вероятности:
for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
{
cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
double lower_limit = sqrt((N - 1) * Sd * Sd / quantile(complement(dist, alpha[i] / 2)));
double upper_limit = sqrt((N - 1) * Sd * Sd / quantile(dist, alpha[i] / 2));
cout << fixed << setprecision(5) << setw(15) << right << lower_limit;
cout << fixed << setprecision(5) << setw(15) << right << upper_limit << endl;
}
cout << endl;
Для вывода некоторых примеров мы будем использовать gear data из NIST/SEMATECH e-Handbook of Statistical Methods.. Данные представляют собой измерения диаметра передач от производственного процесса.
________________________________________________
2-Sided Confidence Limits For Standard Deviation
________________________________________________
Number of Observations = 100
Standard Deviation = 0.006278908
_____________________________________________
Confidence Lower Upper
Value (%) Limit Limit
_____________________________________________
50.000 0.00601 0.00662
75.000 0.00582 0.00685
90.000 0.00563 0.00712
95.000 0.00551 0.00729
99.000 0.00530 0.00766
99.900 0.00507 0.00812
99.990 0.00489 0.00855
99.999 0.00474 0.00895
Таким образом, на уровне 95% достоверности мы приходим к выводу, что стандартное отклонение составляет от 0,00551 до 0,00729.
Аналогично, мы можем также перечислить доверительные интервалы для стандартного отклонения для общих уровней уверенности 95%, для увеличения числа наблюдений.
Стандартное отклонение, используемое для вычисления этих значений, является единством, поэтому указанные пределы являются умножителями для любого конкретного стандартного отклонения. Например, при заданном стандартном отклонении 0,0062789, как в примере выше; для 100 наблюдений множитель составляет 0,8780, давая нижний предел достоверности 0,8780 * 0,006728 = 0,00551.
____________________________________________________
Confidence level (two-sided) = 0.0500000
Standard Deviation = 1.0000000
________________________________________
Observations Lower Upper
Limit Limit
________________________________________
2 0.4461 31.9102
3 0.5207 6.2847
4 0.5665 3.7285
5 0.5991 2.8736
6 0.6242 2.4526
7 0.6444 2.2021
8 0.6612 2.0353
9 0.6755 1.9158
10 0.6878 1.8256
15 0.7321 1.5771
20 0.7605 1.4606
30 0.7964 1.3443
40 0.8192 1.2840
50 0.8353 1.2461
60 0.8476 1.2197
100 0.8780 1.1617
120 0.8875 1.1454
1000 0.9580 1.0459
10000 0.9863 1.0141
50000 0.9938 1.0062
100000 0.9956 1.0044
1000000 0.9986 1.0014
Всего за 2 наблюдения пределы от 0.445 до 31.9, так что стандартное отклонение может быть примерно половину наблюдаемое значение до 30 раз наблюдаемое значение!
Оценка стандартного отклонения с несколькими значениями оставляет очень большую неопределенность, особенно верхний предел. Обратите внимание, насколько верхний предел искажен от наиболее вероятного стандартного отклонения.
Даже для 10 наблюдений, обычно считающихся разумным числом, диапазон все еще составляет от 0,69 до 1,8, примерно от 0,7 до 2, и все еще сильно перекошен с верхним пределом в два раза медиана.
Когда мы имеем 1000 наблюдений, оценка стандартного отклонения начинает выглядеть убедительной, с диапазоном от 0,95 до 1,05 - теперь почти симметричная, но все еще около + или - 5%.
Только когда у нас есть 10000 или более повторных наблюдений, мы можем начать быть достаточно уверенными (при условии, что мы уверены, что другие факторы, такие как дрейф, не ползут).
Для 10000 наблюдений интервал составляет от 0,99 до 1,1 — наконец, действительно убедительная + или —1% достоверность.