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

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

Рубрика Экономико-математическое моделирование
Вид лабораторная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.