Сравнение двух групп данных с использованием t-статистики Стьюдента
Разработка алгоритма и программы на языке С++ для генерации значений случайных величин, имеющих нормальный закон распределения. Проверка нулевой гипотезы об отсутствии статистически значимых различий между двумя выборками с помощью t-критерия Стьюдента.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.02.2014 |
Размер файла | 763,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Новгородский государственный университет имени Ярослава Мудрого
Кафедра Информационных Технологий и Систем
Лабораторная работа №1
Дисциплина: Обработка экспериментальных данных
Сравнение двух групп данных с использованием t-статистики Стьюдента
Преподаватель
Александров В.Н.
Студент гр.№0091: Многолетний А.В.
Великий Новгород 2011
Цель работы
Разработать алгоритм и программу на одном из алгоритмических языков для генерации значений случайных величин, имеющих нормальный закон распределения, и проверить нулевую гипотезу об отсутствии статистически значимых различий между двумя выборками с помощью t-статистики Стьюдента.
Математическая модель решения
Сначала генерируется выборка. После получения выборки вычисляется среднее значение и среднеквадратическое отклонение. Этот процесс повторяется и для другой выборки. Из получившихся значений среднеквадратических отклонений вычисляется среднеквадратическое отклонение выборочных среднеквадратических отклонений и оценка среднеквадратического отклонения разности двух выборочных средних.
Исходя из вычисленных среднеквадратических отклонений, формируется критерий Фишера, и по приближенным формулам вычисляется его критическое значение. Если получившееся значение критерия Фишера превосходит критическое, следовательно, нулевая гипотеза не верна, о чем и выводится соответствующее сообщение. В противном случае производится проверка на t-критерии Стьюдента.
Исходя из среднеквадратических отклонений выборок, вычисляется t-критерий Стьюдента, и по приближенным формулам вычисляется его критическое значение. Если получившееся значение критерия превосходит критическое, следовательно, нулевая гипотеза не верна. Иначе нулевая гипотеза верна.
Таблица имен переменных
имя |
описание |
|
n1 |
Объем выборки №1 |
|
n2 |
Объем выборки №2 |
|
M1 |
Математическое ожидание выборки №1 |
|
M2 |
Математическое ожидание выборки №2 |
|
sg |
Дисперсия |
|
S1 |
Среднее значение выборки №1 |
|
S2 |
Среднее значение выборки №2 |
|
SQ1 |
Среднеквадратичное отклонение выборки №1 |
|
SQ2 |
Среднеквадратичное отклонение выборки №2 |
|
X1 |
Выборка №1 |
|
X2 |
Выборка №2 |
|
SS |
среднеквадратическое отклонение выборочных среднеквадратических отклонений |
|
S |
оценка среднеквадратического отклонения разности двух выборочных средних |
|
F |
Критерий Фишера |
|
u |
Квантиль нормального распределения |
|
L |
Переменная для вычисления критического значения критерия Фишера |
|
H |
Переменная для вычисления критического значения критерия Фишера |
|
W |
Переменная для вычисления критического значения критерия Фишера |
|
Fc |
критическое значение критерия Фишера |
|
t |
Значение t-критерия Стьюдента |
|
v |
Число степеней свободы выборок |
|
q1 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q2 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q3 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q4 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
Tc |
критическое значение t-критерия Стьюдента |
Рисунок 1. Блок-схема программы
Код программы
// 1LAlex
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
double NormRasp (double m, double sg); //Возвращает нормально распределённую случайную величину;
double S(double * X, int n); //Возвращает среднее значение для заданной выборки X, размером n
double SQ(double * X,int n,double S); //Возвращает среднеквадратическое отклонение
int main(){
int n1,n2; //Объемы двух выборок;
double
M1,M2, //Генеральные значения математического ожидания для двух выборок;
sg; //Генеральное значение среднеквадратического отклонения; (сигма малое)
cout<<"Vvedite ob'em pervoy vuborki:\n\tn1=";
cin>> n1;
cout<<"Vvedite general'noe znachenie matematichescogo ozidaniya dlya pervoy vuborki:\n\tM1=";
cin>> M1;
cout<<"Vvedite ob'em vtoroy vuborki:\n\tn2=";
cin>> n2;
cout<<"Vvedite general'noe znachenie matematichescogo ozidaniya dlya vtoroy vuborki:\n\tM2=";
cin>> M2;
cout<<"Vvedite general'noe znachenie srednekvadratichescogo otcloneniya:\n\tsg=";
cin>> sg;
//Создание выборки
//Выделяем память для значений первой выборки
double * X1 = new double [n1];
double S1 = 0; //Среднее значение первой выборки
double SQ1= 0; //среднеквадратичное отклонение
for(int i=0;i<n1;i++) //Заполнение первой выборки
X1[i]=NormRasp(M1,sg);
S1=S(X1,n1);
SQ1=SQ(X1,n1,S1);
//Удаляем выборку
delete [] X1;
cout << "Srednee znachenie pervoy vuborci: \n\tS1="<<S1<<"\nSrednekvadratichnoe otclonenie pervoy vuborki:\n\tSQ1="<< SQ1 <<"\n";
//Выделяем память для значений второй выборки
double * X2 = new double [n2];
double S2 = 0; //Среднее значение первой выборки
double SQ2= 0; //среднеквадратичное отклонение
for(int i=0;i<n2;i++) //Заполнение первой выборки
X2[i]=NormRasp(M2,sg);
S2=S(X2,n2);
SQ2=SQ(X2,n2,S2);
//Удаляем выборку
delete [] X2;
cout << "Srednee znachenie vtoroy vuborci:\n\tS2="<<S2<<"\n Srednecvadratichnoe otclonenie vtoroy vuborci:\n\tSQ2="<< SQ2 <<"\n";
double SS=sqrt(((n1-1)*pow(S1,2)+(n2-1)*pow(S2,2))/(n1+n2-2));
cout << "Srednevzveshennoe srednecvadraticheskoe jtclonenie dvuh srednecvadraticheskih otcloneniy:\n\tSS=" << SS << "\n";
double S=SS*(1.0/(double)n1+1.0/(double)n2);
cout << "Ocenka srednekvadraticheskogo otkloneniya raznosti dvuh vuborochnuh srednih:\n\tS=" << S << "\n";
double F=pow(SQ1,2)/pow(SQ2,2);
if (F<1) F=1/F;
cout << "Znachenie kriteriya Fishera:\n\tF=" << F <<"\n";
double u=1.645; //квантиль нормального распределения
double v1=n1-1;//Число степеней свободы для числителя
double v2=n2-1;//Число степеней свободы для знаменателя
double L=(pow(u,2)-3)/6;
double H=2.0*(v1-1)*(v2-1)/(v1+v2-2);
double W=u*sqrt(H+L)/H-(1.0/(v1-1)-1.0/(v2-1))*(L+5.0/6.0-2.0/3.0/H);
double Fc=exp(W*2);
cout << "Kriticheskoe znachenie kriteriya Fushera:\n\t Fc=" << Fc <<"\n";
if (F>=Fc) cout << "Kriteriy Fishera ne vupolnen - nulevaya gipoteza ne verna!\n";
else
{
cout << "Kriteriy Fishera vupolnen!\n";
double t=(fabs(S1)-fabs(S2))/S;
cout << "Znachenie t-kriteriya St'yudenta\n\tt=" << t << "\n";
double q1=(pow(u,2)+1)*u/4;
double q2=((5*pow(u,2)+16)*pow(u,2)+3)*u/96;
double q3=(((3*pow(u,2)+19)*pow(u,2)+17)*pow(u,2)-15)*u/384;
double q4=((((79*pow(u,2)+776)*pow(u,2)+1482)*pow(u,2)-1920)*pow(u,2)-945)*u/92160;
double v=v1+v2;
double tc=u+q1/v+q2/v/v+q3/v/v/v+q4/v/v/v/v;
cout << "Kriticheskoe znachenie t-kriteriya St'yudenta: " << tc << "\n";
if (t<tc) cout << "t-kriteriy St'yudenta vupolnen. Nulevaya gipoteza verna\n";
else cout << "t-kriteriy St'yudenta ne vupolnen. Nulevaya gipoteza ne verna\n";
}
system("pause");
}
double NormRasp (double m, double sg){
double sum=0.0;
for(int i=0;i<12;i++)
sum+=((double)rand())/RAND_MAX;
return m+sg*(sum-1);
}
double S(double * X,int n){
double sum=0.0;
for(int i=0; i<n; i++)
sum+=X[i];
return sum/n;
}
double SQ(double * X,int n,double S){
double SQ=0.0;
for (int i=0; i<n; i++)
SQ+=(X[i]-S)*(X[i]-S);
return sqrt(SQ/(n-1));
}
Пример ввода входных данных
Результаты работы программы
n1 |
n2 |
M1 |
M2 |
sg |
Критерий Фишера |
Критерий Стьюдента |
Гипотеза |
|
х |
х |
х |
х |
х |
х |
х |
х |
Пример
Вывод
Был разработан алгоритм, а также написана программа (язык написания программы: С++), генерирующая значения случайных величин, которые имеют нормальный закон распределения.
С помощью ее удалось проверить нулевую гипотезу об отсутствии статистически значимых различий между двумя выборками с помощью t-критерия Стьюдента.
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Новгородский государственный университет имени Ярослава Мудрого
Кафедра Информационных Технологий и Систем
Лабораторная работа №1
по дисциплине: Обработка экспериментальных данных
Сравнение двух групп данных с использованием t-статистики Стьюдента
Преподаватель
Александров В.Н.
Студент гр.№8091:
Алексеев С.Н.
Великий Новгород 2011
Цель работы
Разработать алгоритм и программу на одном из алгоритмических языков для генерации значений случайных величин, имеющих нормальный закон распределения, и проверить нулевую гипотезу об отсутствии статистически значимых различий между двумя выборками с помощью t-критерия Стьюдента.
Математическая модель решения
Сначала генерируется выборка. После получения выборки вычисляется среднее значение и среднеквадратическое отклонение. Этот процесс повторяется и для другой выборки. Из получившихся значений среднеквадратических отклонений вычисляется среднеквадратическое отклонение выборочных среднеквадратических отклонений и оценка среднеквадратического отклонения разности двух выборочных средних.
Исходя из вычисленных среднеквадратических отклонений, формируется критерий Фишера, и по приближенным формулам вычисляется его критическое значение. Если получившееся значение критерия Фишера превосходит критическое, следовательно, нулевая гипотеза не верна, о чем и выводится соответствующее сообщение. В противном случае производится проверка на t-критерии Стьюдента.
Исходя их среднеквадратических отклонений выборок, вычисляется t-критерий Стьюдента, и по приближенным формулам вычисляется его критическое значение. Если получившееся значение критерия превосходит критическое, следовательно, нулевая гипотеза не верна. Иначе нулевая гипотеза верна.
Таблица имен
n1 |
Объем выборки №1 |
|
n2 |
Объем выборки №2 |
|
M1 |
Математическое ожидание выборки №1 |
|
M2 |
Математическое ожидание выборки №2 |
|
sg |
Дисперсия |
|
S1 |
Среднее значение выборки №1 |
|
S2 |
Среднее значение выборки №2 |
|
SQ1 |
Среднеквадратичное отклонение выборки №1 |
|
SQ2 |
Среднеквадратичное отклонение выборки №2 |
|
X1 |
Выборка №1 |
|
X2 |
Выборка №2 |
|
SS |
среднеквадратическое отклонение выборочных среднеквадратических отклонений |
|
S |
оценка среднеквадратического отклонения разности двух выборочных средних |
|
F |
Критерий Фишера |
|
u |
Квантиль нормального распределения |
|
L |
Переменная для вычисления критического значения критерия Фишера |
|
H |
Переменная для вычисления критического значения критерия Фишера |
|
W |
Переменная для вычисления критического значения критерия Фишера |
|
Fc |
критическое значение критерия Фишера |
|
t |
Значение t-критерия Стьюдента |
|
v |
Число степеней свободы выборок |
|
q1 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q2 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q3 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
q4 |
Переменная для вычисления критического значения t-критерия Стьюдента |
|
Tc |
критическое значение t-критерия Стьюдента |
Рисунок 2. Блок-схема программы
Текст программы
случайный величина выборка стьюдент
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
double NormRasp (double m, double sg); //Возвращает нормально распределённую случайную величину;
double S(double * X, int n); //Возвращает среднее значение для заданной выборки X, размером n
double SQ(double * X,int n,double S); //Возвращает среднеквадратическое отклонение
int main(){
int n1,n2; //Объемы двух выборок;
double
M1,M2, //Генеральные значения математического ожидания для двух выборок;
sg; //Генеральное значение среднеквадратического отклонения; (сигма малое)
cout<<"Введите объем первой выборки:\n\tn1=";
cin>> n1;
cout<<"Введите генеральное значение математического ожидания для первой выборки:\n\tM1=";
cin>> M1;
cout<<"Введите объем второй выборки:\n\tn2=";
cin>> n2;
cout<<"Введите генеральное значение математического ожидания для второй выборки:\n\tM2=";
cin>> M2;
cout<<"Введите генеральное значение среднеквадратического отклонения:\n\tsg=";
cin>> sg;
//Создание выборки
//Выделяем память для значений первой выборки
double * X1 = new double [n1];
double S1 = 0; //Среднее значение первой выборки
double SQ1= 0; //среднеквадратичное отклонение
for(int i=0;i<n1;i++) //Заполнение первой выборки
X1[i]=NormRasp(M1,sg);
S1=S(X1,n1);
SQ1=SQ(X1,n1,S1);
//Удаляем выборку
delete [] X1;
cout << "Среднее значение первой выборки:\n\tS1="<<S1<<"\n Среднеквадратичное отклонение первой выборки:\n\tSQ1="<< SQ1 <<"\n";
//Выделяем память для значений второй выборки
double * X2 = new double [n2];
double S2 = 0; //Среднее значение первой выборки
double SQ2= 0; //среднеквадратичное отклонение
for(int i=0;i<n2;i++) //Заполнение первой выборки
X2[i]=NormRasp(M2,sg);
S2=S(X2,n2);
SQ2=SQ(X2,n2,S2);
//Удаляем выборку
delete [] X2;
cout << "Среднее значение второй выборки:\n\tS2="<<S2<<"\n Среднеквадратичное отклонение второй выборки:\n\tSQ2="<< SQ2 <<"\n";
double SS=sqrt(((n1-1)*pow(S1,2)+(n2-1)*pow(S2,2))/(n1+n2-2));
cout << "Средневзвешенное среднеквадратическое отклонение двух среднеквадратических отклонений: \n\tSS=" << SS << "\n";
double S=SS*(1.0/(double)n1+1.0/(double)n2);
cout << "Оценка среднеквадратического отклонения разности двух выборочных средних:\n\tS=" << S << "\n";
double F=pow(SQ1,2)/pow(SQ2,2);
if (F<1) F=1/F;
cout << "Значение критерия Фишера:\n\tF=" << F <<"\n";
double u=1.645; //квантиль нормального распределения
double v1=n1-1;//Число степеней свободы для числителя
double v2=n2-1;//Число степеней свободы для знаменателя
double L=(pow(u,2)-3)/6;
double H=2.0*(v1-1)*(v2-1)/(v1+v2-2);
double W=u*sqrt(H+L)/H-(1.0/(v1-1)-1.0/(v2-1))*(L+5.0/6.0-2.0/3.0/H);
double Fc=exp(W*2);
cout << "Критическое значение критерия Фишера: \n\t Fc=" << Fc <<"\n";
if (F>=Fc) cout << "Критерий Фишера не выполнен - нулевая гипотеза не верна!\n";
else
{
cout << "Критерий Фишера выполнен! \n";
double t=(fabs(S1)-fabs(S2))/S;
cout << "Значение t-критерия Стьюдента\n\tt=" << t << "\n";
double q1=(pow(u,2)+1)*u/4;
double q2=((5*pow(u,2)+16)*pow(u,2)+3)*u/96;
double q3=(((3*pow(u,2)+19)*pow(u,2)+17)*pow(u,2)-15)*u/384;
double q4=((((79*pow(u,2)+776)*pow(u,2)+1482)*pow(u,2)-1920)*pow(u,2)-945)*u/92160;
double v=v1+v2;
double tc=u+q1/v+q2/v/v+q3/v/v/v+q4/v/v/v/v;
cout << "Критическое значение t-критерия Стьюдента: " << tc << "\n";
if (t<tc) cout << "t-критерий Стьюдента выполнен. Нулевая гипотеза верна\n";
else cout << "t-критерий Стьюдента не выполнен. Нулевая гипотеза не верна\n";
}
}
double NormRasp (double m, double sg){
double sum=0.0;
for(int i=0;i<12;i++)
sum+=((double)rand())/RAND_MAX;
return m+sg*(sum-1);
}
double S(double * X,int n){
double sum=0.0;
for(int i=0; i<n; i++)
sum+=X[i];
return sum/n;
}
double SQ(double * X,int n,double S){
double SQ=0.0;
for (int i=0; i<n; i++)
SQ+=(X[i]-S)*(X[i]-S);
return sqrt(SQ/(n-1));
}
Шаблон ввода входных данных
Результаты работы программы
n1 |
n2 |
M1 |
M2 |
sg |
Критерий Фишера |
Критерий Стьюдента |
Гипотеза |
|
х |
х |
х |
х |
х |
х |
х |
х |
Вывод
Был разработан алгоритм, а также написана программа на языке С++, генерирующая значения случайных величин, которые имеют нормальный закон распределения. С помощью ее удалось проверить нулевую гипотезу об отсутствии статистически значимых различий между двумя выборками с помощью t-критерия Стьюдента.
Результаты исследования приведены в таблице результатов работы программы.
Контрольные вопросы
ь Что такое t-статистика Стьюдента?
Ш Класс методов статистической проверки гипотез (статистических критериев), основанных на сравнении с распределением Стьюдента. Наиболее частые случаи применения t-критерия связаны с проверкой равенства средних значений в двух выборках.
ь Какие существуют ограничения применения t-статистики Стьюдента?
Ш Для применения данного критерия необходимо, чтобы исходные данные имели нормальное распределение. В случае двухвыборочного критерия для независимых выборок также необходимо соблюдение условия равенства дисперсий. Для ситуации с неравными дисперсиями существует альтернативы критерию Стьюдента.
ь Для чего используется F-статистика Фишера?
Ш Критерий Фишера применяется для проверки равенства дисперсий двух выборок.
ь Как строится алгоритм получения значений случайных величин, имеющих закон нормального распределения?
Ш Для получения значений случайных величин, имеющих закон нормального распределения существует три алгоритма:
§ Алгоритм суммирования для и :
для произвольных и :
§ Приближенный алгоритм
,
где
§ Алгоритм обратных функций
где и - два разных значения случайного числа с равномерным законом распределения в интервале от 0 до 1.
Размещено на Allbest.ru
Подобные документы
Принципы реализации программы проверки статистических гипотез с использованием t-критерия Стьюдента, ее общий алгоритм. Особенности применения двухвыборочного критерия для независимых выборок. Функциональные модели решения задачи для различных функций.
курсовая работа [644,2 K], добавлен 25.01.2010Сущность и методика исследования вероятностной структуры сигналов, законы распределения случайных величин. Проверка гипотезы по критерию Колмогорова-Смирнова и Пирсона. Разработка программы вычисления признаков и формирования обучающего множества данных.
курсовая работа [509,6 K], добавлен 03.12.2009Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
курсовая работа [172,4 K], добавлен 23.05.2012Моделирование работы генератора случайных двоичных чисел с ограниченной последовательностью 0 и 1, подчиняющегося равномерному закону распределения, заданному с помощью модели Гильберта. Представление программного решения задачи средствами языка С++.
лабораторная работа [857,7 K], добавлен 05.06.2011Обнаружение грубых погрешностей. Проверка случайности и независимости результатов измерений в выборке. Приближенная проверка гипотезы о нормальном распределении экспериментальных данных. Проверка гипотезы о равенстве дисперсий и средних значений.
курсовая работа [1,1 M], добавлен 01.07.2011Генерирование выборок, имеющих нормальный закон распределения, и определение для них математического ожидания и дисперсии. Нахождение значения критерия Фишера, сравнивнение его с критическим. Проведение однофакторного дисперсионного анализа выборок.
лабораторная работа [291,0 K], добавлен 19.02.2014Разработка программы на языке С++ по определению величин и направлений токов в ветвях электрической цепи с использованием метода Гаусса. Блок-схема алгоритма. Контрольный расчет с помощью электронных таблиц Excel, используя метод обратной матрицы.
курсовая работа [30,3 K], добавлен 10.11.2010Автоматизация промежуточного и финального контроля результатов обучения учащихся различных учебных заведений. Тестирование, основанное на диалоге вычислительной системы с пользователем. Реализация приложения генерации тестов из базы данных на языке РНР.
курсовая работа [234,1 K], добавлен 04.08.2009Исследование арифметических выражений и разработка простых программ. Таблица переменных для алгоритма и программы. Алгоритм решения, текст программы на языке С. Разработка программы вычисления значений выражений, сравнение результатов с ручным подсчетом.
лабораторная работа [282,7 K], добавлен 30.01.2015Понятие фрактала, принципы создания изображения. Разработка алгоритма и режимов генерации ландшафта. Описание программы FracLandscapes.exe. в среде разработки Delphi 10. Примеры построения ландшафта с использованием различных режимов и количества изгибов.
курсовая работа [688,9 K], добавлен 04.05.2014