Линейный регрессионный анализ


Линейный регрессионный анализ


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


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

Полученный результат выводим на экран


Таблица имен

KЧисло выборокNОбъем выборокM1Мат. ожидание первой выборкиDMШаг мат. ОжиданияSГенеральная дисперсияMatrixМассив выборокMidСредняя дисперсия выборокSGДисперсия каждой выборкиBettaПараметры уравнения регрессииAlphaDosРезультирующие переменныеMXMYDXDYSXSYDaDmSaSmD0S0ruКвантиль нормального распределенияvЧисло степеней свободаtmКвантиль Стьюдента для AlphatbКвантиль Стьюдента для BettadeltaMПогрешность AlphadeltaBПогрешность BetaFЗначение критерия ФишераFkrКритическое значение критерия ФишераminМинимальное значение функцииmaxМаксимальное значение функцииSizeXМасштаб графика по ХSizeYМасштаб графика по YbmpСамо изображениеgrИнструмент рисованияResultСтрока с результатами

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

System;System. Collections. Generic;System. ComponentModel;System. Data;System. Drawing;System. Text;System. Windows. Forms;oed6

{partial class Form1: Form

{Form1 ()

{();

}R = new Random();NormRasp (double M, double S)

{sum = 0;(int i = 0; i < 12; i++)+= R. NextDouble();M + (sum - 6) * S;

}InverseNormalCDF (double alpha)

{res = 0, p = 0, t = 0, q = 0;(alpha < 0.5)= alpha;= 1 - alpha;= Math. Sqrt (-2 * Math. Log (p, Math.E));= t - ((0.010328 * t + 0.802853) * t + 2.515517) / (((0.001308 * t + 0.189269) * t + 1.432788) * t + 1);(alpha > 0.5)= q;= - q;

res;

}void button1_Click (object sender, EventArgs e)

{K = Convert. ToInt32 (textBox1. Text);N = Convert. ToInt32 (textBox2. Text);M1 = Convert. ToDouble (textBox3. Text);DM = Convert. ToDouble (textBox4. Text);S = Convert. ToDouble (textBox5. Text);<List<double>> Matrix = new List<List<double>>();(int i = 0; i < K; i++)

{. Add (new List<double>());(int j = 0; j < N; j++)[i].Add (NormRasp(M1 + DM * i, S));

}<double> Mid = new List<double>();(int i = 0; i < K; i++)

{sum = 0;(int j = 0; j < N; j++)+= Matrix[i] [j];. Add(sum);

}<double> SG = new List<double>();(int i = 0; i < K; i++)

{sum = 0;(int j = 0; j < N; j++)+= (Matrix[i] [j] - Mid[i]) * (Matrix[i] [j] - Mid[i]);. Add (Math. Sqrt (sum / (N - 1)));

}B1 = 0, B2 = 0, B3 = 0, B4 = 0;(int i = 0; i < K; i++)

{+= Mid[i] * i;+= i;+= Mid[i];+= i * i;

}Betta = (K * B1 - B2 * B3) / (K * B4 - B2 * B2);Alpha = (B3 - Betta * B2) / K;Dos = 0;(int i = 0; i < K; i++)+= (Mid[i] - Alpha - Betta * i) * (Mid[i] - Alpha - Betta * i);/= (K - 2);MX = 0, MY = 0;(int i = 0; i < K; i++)

{+= i + 1;+= Mid[i];

}/= K;/= K;DX = 0, DY = 0;(int i = 0; i < K; i++)

{+= (i - MX) * (i - MX);+= (Mid[i] - MY) * (Mid[i] - MY);

}/= (K - 1);/= (K - 1);SX = Math. Sqrt(DX);SY = Math. Sqrt(DY);Da = 0;(int i = 0; i < K; i++)+= (Mid[i] - MY) * (Mid[i] - MY);/= K - 1;Dm = Da / K;Sa = Math. Sqrt(Da);Sm = Math. Sqrt(Dm);D0 = 0;(int i = 0; i < K; i++)+= SG[i];/= K;S0 = Math. Sqrt(D0);r = 0;(int i = 0; i < K; i++)+= (i - MX) * (Mid[i] - MY);/= (K - 1) * Sa * SX;p = Convert. ToDouble (comboBox1. Text. ToString());u = Math. Abs (InverseNormalCDF(p)); // квинтиль нормального распределенияuq = Math. Pow (u, 2); // квадрат квинтиляq1 = (uq + 1) * u / 4;q2 = ((5 * uq + 16) * uq + 3) * u / 96;q3 = (((3 * uq+ 19) * uq + 17) * uq - 15) * u / 384;q4 = ((((79 * uq + 776) * uq + 1482) * uq - 1920) * uq - 945) * u / 92160;v = K - 1;tm = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;= K - 2;tb = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;deltaM = tm * Sm;deltaB = tb * S0 * Math. Sqrt (1 - r) / SX / Math. Sqrt (K - 2);F = Dos / D0;L = (uq - 3) / 6;H = 2.0 * (K - 3) * (K * (N - 1) - 1) / (K * N - 4);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);Fkr = Math. Exp (W * 2);min = (float) (MY - deltaM - (Betta + deltaB) * MX);max = (float) (MY + 1 + (Betta + deltaB) * MX);SizeX = (float) pictureBox1. Width / K;SizeY = (float) pictureBox1. Height / (max - min);bmp = new Bitmap (pictureBox1. Width, pictureBox1. Height);gr = Graphics. FromImage(bmp);. Clear (Color. White);gg = 0;(int i = 0; i < pictureBox1. Width; i++)

{Y = max - (float) (MY + Betta * (i / SizeX - MX) - min);minY1 = max - (float) (MY - deltaM + (Betta - deltaB) * (i / SizeX - MX) - min);minY2 = max - (float) (MY - deltaM + (Betta + deltaB) * (i / SizeX - MX) - min);maxY1 = max - (float) (MY + deltaM + (Betta - deltaB) * (i / SizeX - MX) - min);maxY2 = max - (float) (MY + deltaM + (Betta + deltaB) * (i / SizeX - MX) - min);minY = minY1;(minY2 > minY1) minY = minY2;maxY = maxY1;(maxY2 < maxY1) maxY = maxY2;(i < pictureBox1. Width / 2) gg -= 0.1F;gg += 0.05F;. DrawLine (Pens. LightSkyBlue, i, minY * SizeY+gg, i, maxY * SizeY-gg);. DrawLine (Pens. Black, i, Y * SizeY, i, Y * SizeY + 1);

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

{Y = (float) (max + min - Mid[i]);. FillRectangle (Brushes. Red, i * SizeX, Y * SizeY, 3, 3);

}. FillRectangle (Brushes. Green, (float) MX * SizeX, (max + min - (float) MY) * SizeY, 3, 3);

// оси(int i = 1; i < K; i++)

{. DrawLine (Pens. LightGray, i * SizeX, 0, i * SizeX, pictureBox1. Height);. DrawString (Convert. ToString(i), Font, Brushes. Black, i * SizeX, 0);

}(int i = 1; i < 4; i++)

{. DrawLine (Pens. LightGray, 0, i * SizeY * (max - min) / 4, pictureBox1. Width, i * SizeY * (max - min) / 4);. DrawString (Convert. ToString (i * (max - min) / 4 + min), Font, Brushes. Black, 0, i * SizeY * (max - min) / 4);

}. Image = bmp;Result = «Dosn =» + Dos. ToString() + «\n» +

«MX =» + MX. ToString() + «\n» +

«MY =» + MY. ToString() + «\n» +

«DX =» + DX. ToString() + «\n» +

«DY =» + DY. ToString() + «\n» +

«SX =» + SX. ToString() + «\n» +

«SY =» + SY. ToString() + «\n» +

«Dm =» + Dm. ToString() + «\n» +

«Sm =» + Sm. ToString() + «\n» +

«D0 =» + D0. ToString() + «\n» +

«s0 =» + S0. ToString() + «\n» +

«R =» + r. ToString() + «\n» +

«F =» + F. ToString() + «\n» +

«Fкр =» + Fkr. ToString() + «\n»;(F < Fkr) Result += «Линейная модель адекватна\n наблюдаемым значениям»;Result += «Линейная модель не адекватна\n наблюдаемым значениям»;. Text=Result;

}

}

}


Вывод

регрессия уравнение программа график

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


Теги: Линейный регрессионный анализ  Практическое задание  Менеджмент
Просмотров: 39738
Найти в Wikkipedia статьи с фразой: Линейный регрессионный анализ
Назад