Однофакторный дисперсионный анализ

Тип работы:
Лабораторная работа
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Новгородский государственный университет имени Ярослава Мудрого»

Кафедра Информационных Технологий и Систем

Лабораторная работа

по дисциплине «Обработка экспериментальных данных»

Однофакторный дисперсионный анализ

Преподаватель:

Александров В.Н.

Студент гр. 0091:

Многолетний А.В.

Великий Новгород

2014

1. Цель работы

Ознакомиться с однофакторным дисперсионным анализом и разработать алгоритм и программу для его реализации.

Алгоритм решения:

Сначала генерируются К выборок из N элементов. Затем для каждой выборки определяется математическое ожидание и дисперсия. Исходя из полученных данных, определяется критерий Кохрана.

Определяется выборочная дисперсия, средняя дисперсия и дисперсия влияния фактора. Исходя из них определяется значение критерия Фишера, оно сравнивается с критическим, на основание чего делается вывод о существенности влияния фактора

2. Таблица имен

D

Дисперсия каждой выборки

Matrix

Массив выборок

D0

Средняя дисперсия выборок

F

Значение критерия Фишера

Fkr

Критическое значение критерия Фишера

M1

Мат. ожидание первой выборки

N

Объем выборок

g

Значение критерия Кохрана

K

Число выборок

DM

Шаг мат. ожидания

SumD

Сумма дисперсий выборок

MaxD

Максимальная дисперсия выборки

Dy

Общая выборочная дисперсия

DA

Дисперсия влияния фактора

SG

Генеральная дисперсия

M

Массив мат. ожиданий выборок

Mid

Среднее значение выборок

3. Текст программы

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace oed5lab

{

public partial class Form1: Form

{

public Form1()

{

InitializeComponent ();

}

private Random R = new Random ();

private float NormRasp (double m, double sg)

{

float sum = 0;

for (int i = 0; i < 12; i++)

sum += (float)R. NextDouble ();

return (float)(m + sg * (sum — 6));

}

double InverseNormalCDF (double alpha)

{

double res = 0, p = 0, t = 0, q = 0;

if (alpha < 0. 5)

p = alpha;

else

p = 1 — alpha;

t = Math. Sqrt (-2 * Math. Log (p, Math. E));

q = t — ((0. 10 328 * t + 0. 802 853) * t + 2. 515 517) / (((0. 1 308 * t + 0. 189 269) * t + 1. 432 788) * t + 1);

if (alpha > 0. 5)

res = q;

else

res = -q;

return res;

}

private void button1_Click (object sender, EventArgs e)

{

//Введите объем выборки:

int N=Convert. ToInt32(textBox1. Text);

//Введите число уровней фактора:

int K = Convert. ToInt32(textBox4. Text);

//Введите математическое ожидание на первом уровне:

double M1 = Convert. ToDouble (textBox2. Text);

//Введите изменение математического ожидания:

double DM = Convert. ToDouble (textBox3. Text);

//Введите генеральное значение среднеквадратичного отклонения:

double SG= Convert. ToDouble (textBox5. Text);

richTextBox1. Text = ««;

double[,] Matrix = new double[K, N];

for (int i = 0; i < K; i++)

{

for (int j = 0; j < N; j++)

{

Matrix[i, j] = NormRasp (M1 + i * DM, SG);

// label8. Text += Math. Round (Matrix[i, j], 3) + «t»;

richTextBox1. Text += Math. Round (Matrix[i, j], 3) + «t»;

}

//label8. Text += «n»;

richTextBox1. Text += «n»;

}

double[] M = new double[K];

for (int i = 0; i < K; i++)

{

M[i] = 0;

for (int j = 0; j < N; j++)

M[i] += Matrix[i, j];

M[i] /= (double)N;

}

double[] D = new double[K];

double MaxD = 0;

double SumD = 0;

for (int i = 0; i < K; i++)

{

D[i] = 0;

for (int j = 0; j < N; j++)

D[i] += (Matrix[i, j] - M[i]) * (Matrix[i, j] - M[i]);

D[i] = D[i] / (double)(N — 1);

if (D[i] > MaxD) MaxD = D[i];

SumD += D[i];

}

double g = MaxD / (SumD — MaxD);

label6. Text="Значение критерия Кохрана «+ Math. Round (g, 3) + «n»;

double Mid = 0;

for (int i = 0; i < K; i++)

Mid += M[i];

Mid /= (double)K;

label6. Text += «Математическое ожидание «+ Math. Round (Mid, 3) + «n»;

double Dy = 0;

for (int i = 0; i < K; i++)

for (int j = 0; j < N; j++)

Dy += (Matrix[i, j] - Mid) * (Matrix[i, j] - Mid);

Dy /= (double)K * N — 1;

label6. Text += «Общая выборочная дисперсия «+ Math. Round (Dy, 3) + «n»;

double D0 = 0;

for (int i = 0; i < K; i++)

D0 += D[i];

D0 /= (double)K;

label6. Text += «Средняя дисперсия по уровням «+ Math. Round (D0,3) + «n»;

double DA = 0;

for (int i = 0; i < K; i++)

DA += (M[i] - Mid) * (M[i] - Mid);

DA *= (double)N / (K — 1);

label6. Text += «Дисперсия фактора «+ Math. Round (DA, 3) + «n»;

double F = DA / D0;

label6. Text += «Влияние фактора «+ Math. Round (DA, 3) +"n»;

double p = Convert. ToDouble (comboBox1. Text. ToString ());

double u = Math. Abs (InverseNormalCDF (p));//квинтиль нормального распределения

double uq = Math. Pow (u, 2); //квадрат квинтиля

double L = (uq — 3) / 6;

double H = 2.0 * (K — 2) * (K * (N — 1) — 1) / (K * N — 2);

double W = u * Math. Sqrt (H + L) / H — (1.0 / (K — 2) — 1.0 / (K * (N — 1) — 1)) * (L + 5.0 / 6 — 2.0 / 3 / H);

double Fkr = Math. Exp (W * 2);

label6. Text += «Критическое значение «+ Math. Round (Fkr, 3) + «n»;

label6. Text +="Влияние фактора «;

if (F < Fkr) label6. Text += «Несущественноn»;

else label6. Text += «Cущественноn»;

}

}

}

4. Пример

Вывод

выборка распределение дисперсионный однофакторный

Была разработана программа, генерирующая значения случайных величин, имеющих нормальный закон распределения. С помощью ее удалось реализовать и провести однофакторный дисперсионный анализ выборок.

ПоказатьСвернуть
Заполнить форму текущей работой