Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Comparing the means of two samples with the Students-t test

Boost , Math Toolkit 2.5.0 , Student's t Distribution Examples

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

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

В этом примере мы будем использовать данные выборкиCar Mileage.с сайтаNIST. Данные сравнивают мили на галлон американских автомобилей с милями на галлон японских автомобилей.

Образец кода находится вstudents_t_two_samples.cpp.

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

Мы начинаем с определения процедуры, которая будет проводить наш тест, предполагая равные отклонения:

// Needed headers:
#include <boost/math/distributions/students_t.hpp>
#include <iostream>
#include <iomanip>
// Simplify usage:
using namespace boost::math;
using namespace std;
void two_samples_t_test_equal_sd(
        double Sm1,       // Sm1 = Sample 1 Mean.
        double Sd1,       // Sd1 = Sample 1 Standard Deviation.
        unsigned Sn1,     // Sn1 = Sample 1 Size.
        double Sm2,       // Sm2 = Sample 2 Mean.
        double Sd2,       // Sd2 = Sample 2 Standard Deviation.
        unsigned Sn2,     // Sn2 = Sample 2 Size.
        double alpha)     // alpha = Significance Level.
{

Наша процедура начнется с вычисления t-статистики, при условии, что равные дисперсии необходимы формулы:

где СП - "объединенное" стандартное отклонение двух образцов, аv- число степеней свободы двух комбинированных образцов. Теперь мы можем написать код для расчета t-статистики:

// Degrees of freedom:
double v = Sn1 + Sn2 - 2;
cout << setw(55) << left << "Degrees of Freedom" << "=  " << v << "\n";
// Pooled variance:
double sp = sqrt(((Sn1-1) * Sd1 * Sd1 + (Sn2-1) * Sd2 * Sd2) / v);
cout << setw(55) << left << "Pooled Standard Deviation" << "=  " << sp << "\n";
// t-statistic:
double t_stat = (Sm1 - Sm2) / (sp * sqrt(1.0 / Sn1 + 1.0 / Sn2));
cout << setw(55) << left << "T Statistic" << "=  " << t_stat << "\n";

Следующим шагом является определение нашего объекта распределения и вычисление дополнения вероятности:

students_t dist(v);
double q = cdf(complement(dist, fabs(t_stat)));
cout << setw(55) << left << "Probability that difference is due to chance" << "=  "
   << setprecision(3) << scientific << 2 * q << "\n\n";

Здесь мы использовали абсолютное значение t-статистики, потому что мы изначально хотим знать, есть ли разница или нет. Однако мы также можем проверить, является ли среднее значение второго образца большим или меньшим (односторонний тест), чем у первого: все возможные тесты суммируются в следующей таблице:

гипотеза

Тест

Нулевая гипотеза:нет разницыв средствах

Отклонить, если дополнение CDF для |t |< уровень значимости / 2:

<cdf(complement(dist, fabs(t))) <alpha /2>

Альтернативная гипотеза: существуетразницав средствах

Отклонить, если дополнение CDF для |t | >уровень значимости / 2:

<cdf(complement(dist, fabs(t))) <alpha /2>

Альтернативная гипотеза: 1 Средний показательменьше, чем средний показатель 2

.

Отклонить, если CDF t >уровень значимости:

<cdf(dist, t) >alpha>

Альтернативная гипотеза: 1 Средний показательбольше, чем средний показатель 2

.

Отклонить, если дополнение CDF t >уровень значимости:

<cdf(complement(dist, t)) >alpha>

[Note] Note

Для двухстороннего теста мы должны сравнивать с альфа/2, а не альфа.

Большая часть остальной части программы выборки является довольно печатной, поэтому мы пропустим это и посмотрим на выход образца для альфа = 0,05 (уровень вероятности 95%). Для сравнения вывод данных для тех же данных приведен вразделе 1.3.5.3NIST/SEMATECH e-Handbook of Statistical Methods..

   ________________________________________________
   Student t test for two samples (equal variances)
   ________________________________________________
   Number of Observations (Sample 1)                      =  249
   Sample 1 Mean                                          =  20.145
   Sample 1 Standard Deviation                            =  6.4147
   Number of Observations (Sample 2)                      =  79
   Sample 2 Mean                                          =  30.481
   Sample 2 Standard Deviation                            =  6.1077
   Degrees of Freedom                                     =  326
   Pooled Standard Deviation                              =  6.3426
   T Statistic                                            =  -12.621
   Probability that difference is due to chance           =  5.273e-030
   Results for Alternative Hypothesis and alpha           =  0.0500
   Alternative Hypothesis              Conclusion
   Sample 1 Mean != Sample 2 Mean       NOT REJECTED
   Sample 1 Mean <  Sample 2 Mean       NOT REJECTED
   Sample 1 Mean >  Sample 2 Mean       REJECTED

Таким образом, с вероятностью того, что разница обусловлена вероятностью всего 5,273e-030, мы можем с уверенностью заключить, что разница действительно существует.

Тесты на альтернативную гипотезу показывают, что мы также должны отвергнуть гипотезу о том, что средний показатель по выборке 1 больше, чем для выборки 2: в этом случае выборка 1 представляет собой мили на галлон для японских автомобилей и выборка 2 мили на галлон для американских автомобилей, поэтому мы заключаем, что японские автомобили в среднем более экономичны.

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

И для комбинированных степеней свободы мы используем приближениеУэлч-Саттертуэйт:

Обратите внимание, что это одна из редких ситуаций, когда параметр степеней свободы для распределения t Студента является реальным числом, а не целым числом.

[Note] Note

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

Вводя эти формулы в код, получаем:

// Degrees of freedom:
double v = Sd1 * Sd1 / Sn1 + Sd2 * Sd2 / Sn2;
v *= v;
double t1 = Sd1 * Sd1 / Sn1;
t1 *= t1;
t1 /=  (Sn1 - 1);
double t2 = Sd2 * Sd2 / Sn2;
t2 *= t2;
t2 /= (Sn2 - 1);
v /= (t1 + t2);
cout << setw(55) << left << "Degrees of Freedom" << "=  " << v << "\n";
// t-statistic:
double t_stat = (Sm1 - Sm2) / sqrt(Sd1 * Sd1 / Sn1 + Sd2 * Sd2 / Sn2);
cout << setw(55) << left << "T Statistic" << "=  " << t_stat << "\n";

После этого код и тесты выполняются так же, как и раньше. Используя данные о пробеге автомобиля снова, вот как выглядит результат:

   __________________________________________________
   Student t test for two samples (unequal variances)
   __________________________________________________
   Number of Observations (Sample 1)                      =  249
   Sample 1 Mean                                          =  20.145
   Sample 1 Standard Deviation                            =  6.4147
   Number of Observations (Sample 2)                      =  79
   Sample 2 Mean                                          =  30.481
   Sample 2 Standard Deviation                            =  6.1077
   Degrees of Freedom                                     =  136.87
   T Statistic                                            =  -12.946
   Probability that difference is due to chance           =  1.571e-025
   Results for Alternative Hypothesis and alpha           =  0.0500
   Alternative Hypothesis              Conclusion
   Sample 1 Mean != Sample 2 Mean       NOT REJECTED
   Sample 1 Mean <  Sample 2 Mean       NOT REJECTED
   Sample 1 Mean >  Sample 2 Mean       REJECTED

На этот раз, позволяя дисперсиям в двух образцах различаться, появилась более высокая вероятность того, что наблюдаемая разница сводится только к случайности (1.571e-025 по сравнению с 5.273e-030, когда предполагались равные дисперсии). Однако вывод остается прежним: американские автомобили менее экономичны, чем японские модели.


PrevUpHomeNext

Статья Comparing the means of two samples with the Students-t test раздела Math Toolkit 2.5.0 Student's t Distribution Examples может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Student's t Distribution Examples ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:45:29/0.010148048400879/1