Представьте, что вы провели тест на одном образце, чтобы проверить систематические ошибки в ваших измерениях. Представьте, что результат пограничный. В этот момент можно собрать больше данных, но было бы разумно сначала задать вопрос «Насколько больше?». Оценщики параметров класса _t_distribution могут предоставить эту информацию.
Этот раздел основан на примере кода вstudents_t_single_sample.cppи мы начнем с определения процедуры, которая распечатает таблицу предполагаемых размеров выборки для различных уровней уверенности:
#include <boost/math/distributions/students_t.hpp>
#include <iostream>
#include <iomanip>
using namespace boost::math;
using namespace std;
void single_sample_find_df(
double M,
double Sm,
double Sd)
{
Далее мы определим таблицу уровней значимости:
double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
Распечатка таблицы размеров выборки, необходимой для различных уровней достоверности, начинается с заголовка таблицы:
cout << "\n\n"
"_______________________________________________________________\n"
"Confidence Estimated Estimated\n"
" Value (%) Sample Size Sample Size\n"
" (one sided test) (two sided test)\n"
"_______________________________________________________________\n";
И теперь важная часть: требуемые размеры выборки. Класс<students_t_distribution
>имеет статическую функцию<find_degrees_of_freedom
>, которая вычисляет, насколько большим должен быть размер выборки, чтобы дать окончательный результат.
Первый аргумент - это разница между средствами, которые вы хотите обнаружить, здесь это абсолютное значение разницы между средним значением выборки и истинным средним значением.
Далее следуют два значения вероятности: альфа и бета. Альфа — это максимально допустимый риск отказа от нулевой гипотезы, когда она на самом деле верна. Бета — это максимально допустимый риск отказа от нулевой гипотезы, когда она ложна. Также обратите внимание, что для двухстороннего теста альфа должна быть разделена на 2.
Конечным параметром функции является стандартное отклонение образца.
В этом примере мы предполагаем, что альфа и бета одинаковы, и называем<find_degrees_of_freedom
>дважды: один раз с альфа для одностороннего теста и один раз с альфа/2 для двухстороннего теста.
for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
{
cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
double df = students_t::find_degrees_of_freedom(
fabs(M - Sm), alpha[i], alpha[i], Sd);
double size = ceil(df) + 1;
cout << fixed << setprecision(0) << setw(16) << right << size;
df = students_t::find_degrees_of_freedom(
fabs(M - Sm), alpha[i]/2, alpha[i], Sd);
size = ceil(df) + 1;
cout << fixed << setprecision(0) << setw(16) << right << size << endl;
}
cout << endl;
}
Давайте теперь посмотрим на некоторые результаты выборки, используя данные, взятые изP.K.Hou, O. W. Lau & M.C. Wong, Analyst (1983) vol. 108, p 64. и от Statistics for Analytical Chemistry, 3rd ed. (1994), pp 54-55 J. C. Miller and J. N. Miller, Ellis Horwood ISBN 0 13 0309907.Значения являются результатом определения ртути путем атомного поглощения холодного пара.
Всего было проведено три измерения, и тест Student-t дал пограничный результат, поэтому этот пример покажет нам, сколько образцов нужно будет собрать:
_____________________________________________________________
Estimated sample sizes required for various confidence levels
_____________________________________________________________
True Mean = 38.90000
Sample Mean = 37.80000
Sample Standard Deviation = 0.96437
_______________________________________________________________
Confidence Estimated Estimated
Value (%) Sample Size Sample Size
(one sided test) (two sided test)
_______________________________________________________________
75.000 3 4
90.000 7 9
95.000 11 13
99.000 20 22
99.900 35 37
99.990 50 53
99.999 66 68
Так что в этом случае пришлось бы сделать еще много измерений, например, на уровне 95%, 14 измерений в общей сложности для двухстороннего теста.