Линейный регрессионный анализ
Расчет уравнения линейной регрессии. Построение на экран графика и доверительной области уравнения. Разработка программы, генерирующей значения случайных величин, имеющих нормальный закон распределения для определения параметров уравнения регрессии.
Рубрика | Экономико-математическое моделирование |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.02.2014 |
Размер файла | 18,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Линейный регрессионный анализ
1. Алгоритм решения
Сначала генерируются К выборок из N элементов. Затем для каждой выборки определяется математическое ожидание и дисперсия. Исходя из полученных данных, вычисляются параметры уравнения линейной регрессии. Для этих параметров определяется мат. ожидание, отклонение и доверительный интервал. Определяется критерий Фишера, и его значение сравнивается с критическим. Если полученное значение меньше критического, то линейная модель адекватна полученным данным.
Полученный результат выводим на экран
Таблица имен
K |
Число выборок |
|
N |
Объем выборок |
|
M1 |
Мат. ожидание первой выборки |
|
DM |
Шаг мат. Ожидания |
|
S |
Генеральная дисперсия |
|
Matrix |
Массив выборок |
|
Mid |
Средняя дисперсия выборок |
|
SG |
Дисперсия каждой выборки |
|
Betta |
Параметры уравнения регрессии |
|
Alpha |
||
Dos |
Результирующие переменные |
|
MX |
||
MY |
||
DX |
||
DY |
||
SX |
||
SY |
||
Da |
||
Dm |
||
Sa |
||
Sm |
||
D0 |
||
S0 |
||
r |
||
u |
Квантиль нормального распределения |
|
v |
Число степеней свобода |
|
tm |
Квантиль Стьюдента для Alpha |
|
tb |
Квантиль Стьюдента для Betta |
|
deltaM |
Погрешность Alpha |
|
deltaB |
Погрешность Beta |
|
F |
Значение критерия Фишера |
|
Fkr |
Критическое значение критерия Фишера |
|
min |
Минимальное значение функции |
|
max |
Максимальное значение функции |
|
SizeX |
Масштаб графика по Х |
|
SizeY |
Масштаб графика по Y |
|
bmp |
Само изображение |
|
gr |
Инструмент рисования |
|
Result |
Строка с результатами |
2. Текст программы
using System;
using System. Collections. Generic;
using System. ComponentModel;
using System. Data;
using System. Drawing;
using System. Text;
using System. Windows. Forms;
namespace oed6
{
public partial class Form1: Form
{
public Form1 ()
{
InitializeComponent();
}
Random R = new Random();
double NormRasp (double M, double S)
{
double sum = 0;
for (int i = 0; i < 12; i++)
sum += R. NextDouble();
return M + (sum - 6) * S;
}
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.010328 * t + 0.802853) * t + 2.515517) / (((0.001308 * t + 0.189269) * t + 1.432788) * t + 1);
if (alpha > 0.5)
res = q;
else
res = - q;
return res;
}
private void button1_Click (object sender, EventArgs e)
{
int K = Convert. ToInt32 (textBox1. Text);
int N = Convert. ToInt32 (textBox2. Text);
double M1 = Convert. ToDouble (textBox3. Text);
double DM = Convert. ToDouble (textBox4. Text);
double S = Convert. ToDouble (textBox5. Text);
List<List<double>> Matrix = new List<List<double>>();
for (int i = 0; i < K; i++)
{
Matrix. Add (new List<double>());
for (int j = 0; j < N; j++)
Matrix[i].Add (NormRasp(M1 + DM * i, S));
}
List<double> Mid = new List<double>();
for (int i = 0; i < K; i++)
{
double sum = 0;
for (int j = 0; j < N; j++)
sum += Matrix[i] [j];
Mid. Add(sum);
}
List<double> SG = new List<double>();
for (int i = 0; i < K; i++)
{
double sum = 0;
for (int j = 0; j < N; j++)
sum += (Matrix[i] [j] - Mid[i]) * (Matrix[i] [j] - Mid[i]);
SG. Add (Math. Sqrt (sum / (N - 1)));
}
double B1 = 0, B2 = 0, B3 = 0, B4 = 0;
for (int i = 0; i < K; i++)
{
B1 += Mid[i] * i;
B2 += i;
B3 += Mid[i];
B4 += i * i;
}
double Betta = (K * B1 - B2 * B3) / (K * B4 - B2 * B2);
double Alpha = (B3 - Betta * B2) / K;
double Dos = 0;
for (int i = 0; i < K; i++)
Dos += (Mid[i] - Alpha - Betta * i) * (Mid[i] - Alpha - Betta * i);
Dos /= (K - 2);
double MX = 0, MY = 0;
for (int i = 0; i < K; i++)
{
MX += i + 1;
MY += Mid[i];
}
MX /= K;
MY /= K;
double DX = 0, DY = 0;
for (int i = 0; i < K; i++)
{
DX += (i - MX) * (i - MX);
DY += (Mid[i] - MY) * (Mid[i] - MY);
}
DX /= (K - 1);
DY /= (K - 1);
double SX = Math. Sqrt(DX);
double SY = Math. Sqrt(DY);
double Da = 0;
for (int i = 0; i < K; i++)
Da += (Mid[i] - MY) * (Mid[i] - MY);
Da /= K - 1;
double Dm = Da / K;
double Sa = Math. Sqrt(Da);
double Sm = Math. Sqrt(Dm);
double D0 = 0;
for (int i = 0; i < K; i++)
D0 += SG[i];
D0 /= K;
double S0 = Math. Sqrt(D0);
double r = 0;
for (int i = 0; i < K; i++)
r += (i - MX) * (Mid[i] - MY);
r /= (K - 1) * Sa * SX;
double p = Convert. ToDouble (comboBox1. Text. ToString());
double u = Math. Abs (InverseNormalCDF(p)); // квинтиль нормального распределения
double uq = Math. Pow (u, 2); // квадрат квинтиля
double q1 = (uq + 1) * u / 4;
double q2 = ((5 * uq + 16) * uq + 3) * u / 96;
double q3 = (((3 * uq+ 19) * uq + 17) * uq - 15) * u / 384;
double q4 = ((((79 * uq + 776) * uq + 1482) * uq - 1920) * uq - 945) * u / 92160;
double v = K - 1;
double tm = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;
v = K - 2;
double tb = u + q1 / v + q2 / v / v + q3 / v / v / v + q4 / v / v / v / v;
double deltaM = tm * Sm;
double deltaB = tb * S0 * Math. Sqrt (1 - r) / SX / Math. Sqrt (K - 2);
double F = Dos / D0;
double L = (uq - 3) / 6;
double H = 2.0 * (K - 3) * (K * (N - 1) - 1) / (K * N - 4);
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);
float min = (float) (MY - deltaM - (Betta + deltaB) * MX);
float max = (float) (MY + 1 + (Betta + deltaB) * MX);
float SizeX = (float) pictureBox1. Width / K;
float SizeY = (float) pictureBox1. Height / (max - min);
Bitmap bmp = new Bitmap (pictureBox1. Width, pictureBox1. Height);
Graphics gr = Graphics. FromImage(bmp);
gr. Clear (Color. White);
float gg = 0;
for (int i = 0; i < pictureBox1. Width; i++)
{
float Y = max - (float) (MY + Betta * (i / SizeX - MX) - min);
float minY1 = max - (float) (MY - deltaM + (Betta - deltaB) * (i / SizeX - MX) - min);
float minY2 = max - (float) (MY - deltaM + (Betta + deltaB) * (i / SizeX - MX) - min);
float maxY1 = max - (float) (MY + deltaM + (Betta - deltaB) * (i / SizeX - MX) - min);
float maxY2 = max - (float) (MY + deltaM + (Betta + deltaB) * (i / SizeX - MX) - min);
float minY = minY1;
if (minY2 > minY1) minY = minY2;
float maxY = maxY1;
if (maxY2 < maxY1) maxY = maxY2;
if (i < pictureBox1. Width / 2) gg -= 0.1F;
else gg += 0.05F;
gr. DrawLine (Pens. LightSkyBlue, i, minY * SizeY+gg, i, maxY * SizeY-gg);
gr. DrawLine (Pens. Black, i, Y * SizeY, i, Y * SizeY + 1);
}
for (int i = 0; i < K; i++)
{
float Y = (float) (max + min - Mid[i]);
gr. FillRectangle (Brushes. Red, i * SizeX, Y * SizeY, 3, 3);
}
gr. FillRectangle (Brushes. Green, (float) MX * SizeX, (max + min - (float) MY) * SizeY, 3, 3);
// оси
for (int i = 1; i < K; i++)
{
gr. DrawLine (Pens. LightGray, i * SizeX, 0, i * SizeX, pictureBox1. Height);
gr. DrawString (Convert. ToString(i), Font, Brushes. Black, i * SizeX, 0);
}
for (int i = 1; i < 4; i++)
{
gr. DrawLine (Pens. LightGray, 0, i * SizeY * (max - min) / 4, pictureBox1. Width, i * SizeY * (max - min) / 4);
gr. DrawString (Convert. ToString (i * (max - min) / 4 + min), Font, Brushes. Black, 0, i * SizeY * (max - min) / 4);
}
pictureBox1. Image = bmp;
string 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»;
if (F < Fkr) Result += «Линейная модель адекватна\n наблюдаемым значениям»;
else Result += «Линейная модель не адекватна\n наблюдаемым значениям»;
label6. Text=Result;
}
}
}
Вывод
регрессия уравнение программа график
Была разработана программа, генерирующая значения случайных величин, имеющих нормальный закон распределения. С помощью ее удалось определить параметры уравнения регрессии, построить и вывести на экран график и доверительную область этого уравнения.
Размещено на Allbest.ru
Подобные документы
Основные параметры уравнения регрессии, оценка их параметров и значимость. Интервальная оценка для коэффициента корреляции. Анализ точности определения оценок коэффициентов регрессии. Показатели качества уравнения регрессии, прогнозирование данных.
контрольная работа [222,5 K], добавлен 08.05.2014Параметры уравнения и экономическое толкование коэффициента линейной регрессии. Расчет коэффициентов детерминации и средних относительных ошибок аппроксимации. Построение структурной формы модели с использованием косвенного метода наименьших квадратов.
контрольная работа [99,2 K], добавлен 27.04.2011Построение регрессионных моделей. Смысл регрессионного анализа. Выборочная дисперсия. Характеристики генеральной совокупности. Проверка статистической значимости уравнения регрессии. Оценка коэффициентов уравнения регрессии. Дисперсии случайных остатков.
реферат [57,4 K], добавлен 25.01.2009Расчет параметров A и B уравнения линейной регрессии. Оценка полученной точности аппроксимации. Построение однофакторной регрессии. Дисперсия математического ожидания прогнозируемой величины. Тестирование ошибок уравнения множественной регрессии.
контрольная работа [63,3 K], добавлен 19.04.2013Анализ метода наименьших квадратов для парной регрессии, как метода оценивания параметров линейной регрессии. Рассмотрение линейного уравнения парной регрессии. Исследование множественной линейной регрессии. Изучение ошибок коэффициентов регрессии.
контрольная работа [108,5 K], добавлен 28.03.2018Понятие модели множественной регрессии. Сущность метода наименьших квадратов, который используется для определения параметров уравнения множественной линейной регрессии. Оценка качества подгонки регрессионного уравнения к данным. Коэффициент детерминации.
курсовая работа [449,1 K], добавлен 22.01.2015Определение параметров уравнения линейной регрессии. Экономическая интерпретация коэффициента регрессии. Вычисление остатков, расчет остаточной суммы квадратов. Оценка дисперсии остатков и построение графика остатков. Проверка выполнения предпосылок МНК.
контрольная работа [1,4 M], добавлен 25.06.2010Параметры уравнения линейной регрессии. Вычисление остаточной суммы квадратов, оценка дисперсии остатков. Осуществление проверки значимости параметров уравнения регрессии с помощью критерия Стьюдента. Расчет коэффициентов детерминации и эластичности.
контрольная работа [248,4 K], добавлен 26.12.2010Построение уравнения множественной регрессии в линейной форме с полным набором факторов, отбор информативных факторов. Проверка значимости уравнения регрессии по критерию Фишера и статистической значимости параметров регрессии по критерию Стьюдента.
лабораторная работа [217,9 K], добавлен 17.10.2009Особенности расчета параметров уравнений линейной, степенной, полулогарифмической, обратной, гиперболической парной и экспоненциальной регрессии. Методика определения значимости уравнений регрессии. Идентификация и оценка параметров системы уравнений.
контрольная работа [200,1 K], добавлен 21.08.2010