МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» УТВЕРЖДАЮ Директор ИНК _______________В.Н. Бориков «___» ____________ 2014г. Лабораторная работа №1 Регрессионный анализ Томск – 2014 Цель работы: 1. Приобрести навыки расчета коэффициентов различных видов регрессий. 2. Научить применять MathCad для корректно построения графиков экспериментальной зависимости с помощью встроенных функций. 3. Научиться оценивать качество полученных графиков. Введение. Задачей регрессивного анализа является установление параметров описывающего экспериментальную зависимость выражения с учетом того, что эмпирические точки получены с некоторой погрешностью. Регрессия сводится к подбору неизвестных коэффициентов, определяющих аналитическую зависимость f(x). В силу производимого действия большинство задач регрессии являются частным случаем более общей проблемы сглаживания данных. f(х) должна некоторым образом (например, в виде определенной аналитической зависимости) приближаться к y(xi), не обязательно проходя через точки (xi, yi). Практическая важность регрессии огромна: так, например, любой корректно построенный график экспериментальной зависимости должен быть задан при ее помощи. Как и любые другие статистические расчеты, вычисление регрессии может быть весьма трудоемким в случае его проведения на бумаге – ввиду большого объема вычислительной работы. В Mathcad же, благодаря наличию многочисленных встроенных функций, задачи такого рода можно решать очень легко. 1. Линейная регрессия 1.1 Метод наименьших квадратов Самый простой и наиболее часто используемый вид регрессии – линейная. Приближение данных (xi, yi) осуществляется линейной функцией у(х) = b + ах. Классическим алгоритмом линейной регрессии является метод наименьших квадратов, идея которого сводится к поиску таких коэффициентов для уравнения прямой, чтобы сумма квадратов абсолютных ошибок (b + axi – yi) была минимальна. Для расчета линейной регрессии в Mathcad имеются два дублирующих друг друга способа. Результаты обоих способов получаются одинаковым. 1. line(x,y) – вектор из двух элементов (b,а) коэффициентов линейной регрессии ax+b; 2. intercept (x,у) – коэффициент b линейной регрессии; slope (x,у) – коэффициент а линейной регрессии; • х – вектор действительных данных аргумента; • у – вектор действительных данных значений того же размера. Оценить, насколько хорошо экспериментальные точки ложатся на построенную с помощью регрессии линию, можно и чисто визуально. Но лучше получить некоторую количественную оценку. Оптимальной количественной оценкой (при отсутствии в данных промахов) является так называемая стандартная ошибка, равная среднеквадратичному расстоянию от точек экспериментальных данных до прямой (линии регрессии). Если линейная регрессия рассчитывается по методу наименьших квадратов, то для нахождения стандартной ошибки можно использовать встроенную функцию Mathcad: stderr(x,y), где x и y – вектора данных. Данная функция применима только для линейной регрессии. Стандартные отклонения коэффициентов уравнения регрессии находят по формуле: 2 n Sa y i i 1 2 ; n 1 n Sb y x i 1 i (1) x 2 . (2) n 1 Рассеяние результатов относительно прямой оценивают с помощью дисперсии Sy2, которая находится по формуле: 1 n 2 yi axi b 2 , Sy (3) n 1 i 1 S 1 n ( y i axi b) 2 n 1 i 0 (4) корень квадратный из которой определяет стандартное отклонение точек от найденной зависимости. Задание 1. Экспериментальные данные приведены в таблице 1. x y 0 4,1 1 2,4 2 3 3 4,3 4 3,6 5 5,2 Таблица 1 6 5,9 Изобразить на графике экспериментальные значения в виде точек. a. Создать вертикальные матрицы значений x и y; b. Построить графически точки с координатами (xi, yi) и отредактировать график. 2. Вычислить коэффициенты линейной регрессии двумя способами: a. a = R1, b = R0 – элементы вектора полученного функцией line(x,y). b. b = intercept (x,у), a = slope (x,у); 3. Построить линейную регрессию, используя полученные коэффициенты (двумя способами). 4. Изобразить на том же графике, что и экспериментальные данные, линии регрессии, полученные двумя способами. 5. Сравнить полученные данные. 6. Оценить ошибку: по формуле (3) и используя встроенную формулу Mathcad. 1. 1.2 Метод медиан В Mathcad этот метод наименьших квадратов является основным. Однако существуют и другие алгоритмы для подсчета линейной регрессии, один из которых – метод медиан – так же имеет в Mathcad свою встроенную функцию. Линейная регрессия для расчета коэффициентов a и b методом медиан: medfit(x,y) – вектор из двух элементов (b,а) коэффициентов линейной медиан– медианной регрессии b+ах; • х,у – векторы действительных данных одинакового размера. 3 Функция линейной регрессии примет вид: g (t) := medfit (x , у)0 + medfit (x , у)1 • t Так как метод медиан относительно мало известен, его стоит описать. Чтобы найти уравнение прямой посредством медианной регрессии, нужно проделать следующие шаги. 1. Разделяем экспериментальные точки на три равные группы, исходя из величины x–координаты. В первой группе должны быть «левые» точки, во второй – «центральные», а в третьей – «правые». Если количество точек в выборке не кратно 3, то нужно действовать так, чтобы точки распределились по группам максимально равномерно. Если остаток от деления количества точек в выборке на три составляет один, то «лишнюю» точку следует поместить в центральную группу. Если «лишних» точек две, то по одной точке нужно прибавить в левую и правую группы. 2. Для каждой группы находим среднюю точку, то есть точку, координаты которой являются средним арифметическим соответствующих координат всех точек группы. 3. Находим уравнение прямой, проходящей через правую и левую средние точки. 4. Строим вторую прямую так, чтобы она была параллельна первой прямой. Располагаться вторая прямая должна между первой прямой и средней точкой центральной группы. Причем расстояние от второй прямой до первой должно быть в два раза меньше, чем от средней точки центральной группы до второй прямой. Смысл этого требования довольно очевиден: вторая прямая должна быть построена так, чтобы сумма расстояний от нее и до средних точек была минимальной. 5. Параметры уравнения второй прямой возвращаются как результат. Задание 2. 1. Используя исходные данные предыдущего задания, найти коэффициенты для уравнения регрессии методом медиан. 2. Построить график линии регрессии и изобразить в той же системе координат экспериментальные точки. 3. Добавить одну из линий регрессии, полученную методом наименьших квадратов. 4. Сравнить результаты. Сделайте выводы о качестве результатов. Метод медиан довольно примитивен по сравнению с методом наименьших квадратов. Поэтому в большинстве случаев он дает худший результат. Однако у метода медиан есть одно преимущество: он куда менее чувствителен к наличию в выборке промахов, то есть точек, полученных с недопустимо высокой погрешностью. Поэтому к нему нужно обращаться, если данные плохо ложатся на прямую. Задание 3. Расчет линейной регрессии при наличии промахов в эксперименте. 1. Смоделировать псевдоэкспериментальную линейную зависимость со средним уровнем погрешности: a. Коэффициенты уравнения экспериментальной прямой: a=2; b=3; b. Уровень ошибки задать случайным образом, используя генерацию случайных чисел по нормальному закону распределения: err = rnorm(n,0,1); количество точек можно задать от 15 до 20. c. Задайте уравнение псевдоэкспериментальных данных: yi = axi + b + erri.; d. Определить значения x: например x:=-5+i. 2. Сделать три точки в выборке промахами (у данных точек погрешность должна превышать нормальный уровень в 15 раз): 4 a. Сгенерировать случайные числа, распределенные нормально: ERR = rnorm(3,0,15); b. Прибавить сгенерировать промахи к любым трем псевдоэкспериментальным точкам: yi = yi + ERRj (j:=0…2). 3. Найти коэффициенты уравнения прямой с помощью метода медиан (используя встроенную функцию medfit) и метода наименьших квадратов (используя встроенную функцию line). 4. Сравнить полученные коэффициенты с заданными a=2 и b=3. 5. Изобразить графически все рассчитанные прямые регрессии и экспериментальные данные в виде точек в одной системе координат. 6. Определить ошибки регрессии для каждого способа задания регрессии, используя формулу (3). Сравнить их между собой. 2. Полиномиальная регрессия Очень многие эффекты и явления в физике и других точных науках описываются алгебраическими полиномами. По этой причине практическая важность полиномиальной регрессии ничуть не уступает, а может, даже и превосходит таковую линейной регрессии. В Mathcad рассчитать полиномиальную регрессию можно с помощью встроенной функции regress(x,y,n), где x и y – векторы экспериментальных данных (количество точек должно быть больше порядка полинома хотя бы на 1), n – порядок полинома. В общем случае n может принимать совершенно любые значения, однако реально сталкиваться с полиномами выше 3–4 степени приходится редко. Вектор результата функции regress содержит первые три строки служебных, а остальные – значения коэффициентов полинома, расположенные сверху вниз исходя из возрастания степени членов, к которым они относятся. Построить кривую полинома регрессии можно, просто присвоив его коэффициентам значения, полученные в результате выполнения функции regress: R:=regress(x,y,3) S t : N 3 t i 3 i 3 Ri Однако можно поступить и проще – задать полином с помощью функции interp(s,x,y,t). Для этого в качестве ее параметра s следует определить вектор коэффициентов, вычисленный функцией regress (именно для interp, кстати, в нем и имеются служебные строки). S t : interp( R, x, y, t ) Задание 4. 1. Рассчитать псевдоэкспериментальные данные на основе полинома третьей степени с известными коэффициентами: y x3 23x 2 15x 100 путем добавления случайной погрешности, распределенной по нормальному закону: a. Взять 26 точек: i=0…25; b. Создать 25 точек, используя функцию rnorm(n,m,σ). Мат. Ожидание – 0, среднеквадратическое отклонение 3; c. Добавить к каждой точке псевдоэкспериментальные данные, определяемой уравнением y x3 23x 2 15x 100 , случайную ошибку. 2. Изобразить графически псевдоэкспериментальные точки и исходный полином без внесенных ошибок. 5 3. Используя функцию regress, рассчитать полиномиальную регрессию. 4. Сравнить полученные коэффициенты полинома регрессии с коэффициентами исходного уравнения. 5. Изобразить на предыдущем графике линию регрессии. 6. Сравнить графики, сделать выводы. 7. Поменяйте порядок регрессии. 8. Понаблюдать за изменением графиков и значений коэффициентов регрессии. 3. Обобщенная регрессия Линейная регрессия предназначена для определения коэффициентов линейной функции y=ax+b, которая наилучшим образом приближает экспериментальные данные. Задача обобщенной линейной регрессии – ответить на следующий вопрос: какие значения должны принимать коэффициенты a0, a1, ..., aN, чтобы функция F(x), являющаяся линейным сочетанием N+1 произвольной функции f0(x), f1(x), ..., fN(x) (то есть F(x)=a0f0(x)+a1f1(x)+...+aNfN(x)), проходила между экспериментальными точками так, чтобы сумма квадратов расстояний от точек и до кривой F(x) была минимальной? Формулу для расчета обобщенной линейной регрессии: C1 f1(x) + C2 f2(x) +… + . . . , где fN(x) – любые функции пользователя, a CN – подлежащие определению коэффициенты. Для вычисления функции регрессии общего вида в Mathcad используются следующие встроенные функции: unfit (x,y,F) – вектор параметров линейной комбинации функций пользователя, осуществляющей регрессию данных; genfit(x,y,g,G) – вектор параметров, реализующих регрессию данных с помощью функций пользователя общего вида; • х – вектор действительных данных аргумента, элементы которого расположены в порядке возрастания; • у – вектор действительных значений того же размера; • F(x) – пользовательская векторная функция скалярного аргумента; • g – вектор начальных значений параметров регрессии размерности N; • G (x,g) – векторная функция размерности N+1, составленная из функции пользователя и ее N частных производных по каждому из параметров С. Примечание. Mathcad рассчитывает регрессию общего вида, используя алгоритмы численной оптимизации, основанные на численных методах решения систем нелинейных уравнений. Численные же методы решения систем нелинейных уравнений требуют задания начальных приближений к корням. В случае функций регрессии эти приближения задаются вектором g. К выбору начальных приближений стоит отнестись очень ответственно, так как близость значений вектора g к истинным величинам параметров зависимости как ничто другое определяет эффективность вычисления регрессии. Задание 5. Предполагается, что экспериментальные данные соответствуют функции 40 x y 2 x 5 sin n 1. Создать псевдоэкспериментальные данные путем добавления случайной погрешности, распределенной по нормальному закону: a. Взять 51 точек: i=0…50, x=0.1*i; 6 2. 3. 4. 5. 6. 7. b. Создать 51 точек, используя функцию rnorm(n,m,σ). Мат. Ожидание – 0, среднеквадратическое отклонение 2; c. Добавить к каждой точке псевдоэкспериментальные данные, определяемой 40 x уравнением y 2 x 5 sin , случайную ошибку. n Построить экспериментальные данные. Задать описывающее линейное сочетание функции вектор–функции F(x): f F ( x) : 0 f1 Найти коэффициенты регрессии с помощью функции linfit (x,y,F). Создайте функцию регрессии путем скалярного перемножения вектора–функции F(x) и вектора коэффициентов. Изобразить созданную функцию на графике, где уже нанесены экспериментальные данные. Сравнить графики, сделать выводы. Задание 6. Использовать исходные данные для предыдущего задания (задание 5). Необходимо рассчитать коэффициенты регрессии общего вида, используя функцию genfit(x,y,g,G) 1. Построить экспериментальные данные. 2. Задать вектор приближений для параметров g: 0. 1 g : 1 3. Задать описывающее линейное сочетание функции вектор–функции F(x): f0 F ( x) : f1 f 2 4. Задать вектор–функции G(x,g) a. Вычислить частные производные функции y по всем трем параметрам. Чтобы выражения производных получить в той форме, в которой они должны быть занесены в вектор–функцию F, используем для обозначения параметров имена g0, g1, g2. Важной тонкостью является то, что индексы в именах должны быть текстовыми, а не матричными. Иначе расчет производных сделан не будет. C f ( x) 0 C1 x C2e x x 1 f x f x f x a : ; b : ; c : C 0 C 1 C 2 G(x, g) : x a b c Создать вектор–функции – матрица транспонирована. Произвести расчет регрессии, задействовав функцию genfit. Сравнить с коэффициентами, полученными в задании 5. Изобразить созданную функцию на графике, где уже нанесены экспериментальные данные. Сравнить графики, сделать выводы. Сравните графики, полученные в этом и предыдущем задание. Сделать выводы. T b. 5. 6. 7. 8. 9. 7 Требования к отчету. В отчете представить решение всех заданий, исходные данные, полученные графики и требуемые выводы, а также необходимые фрагменты из Mathcad. Литература. 1. Кирьянов Д. В. Самоучитель Mathcad 11. – СПб.: БХВ–Петербург, 2003. – 560 с: ил. 2. Гурский Д., Турбина Е. Вычисления в MATHCAD 12. – СПб.: Издательство: Питер, 2006 г. – 544 стр. 8