MathCAD — это просто! Часть 32, заключительная. Статистика: регрессии. Послесловие

Как говорил небезызвестный герой сказки Эдуарда Успенского по имени Чебурашка, "Мы строили, строили, и наконец построили! Ура!" Вот примерно такими же словами можно охарактеризовать и тот примечательный факт, что мы победоносно подошли к концу нашего с вами разговора о замечательно мощной и удобной математической среде MathCAD. Разговор этот, что и говорить, получился достаточно долгим — почти что на целый год, однако, надеюсь, был и полезен, и интересен читателям серии "MathCAD — это просто!"

Так получилось, что завершающая статья нашей серии посвящена применению MathCAD'а для решения задач математической статистики. Не могу сказать, что я это специально планировал, однако просто так получилось, что, приступив к рассказу про статистику, я понял, что после нее рассказывать, в общем-то, особенно и не о чем. Дело в том, что, наверняка большая часть читателей уже поняла, что работать в MathCAD нужно только тогда, когда есть понимание собственно математики, кроющейся в недрах расчетов, которые проводятся в этой среде. Сама же математическая среда для того, кто владеет соответствующей математикой, фактически прозрачна, говоря терминами проектировщиков компьютерных интерфейсов. Это означает, что любой знакомый с математикой человек может записать с помощью привычных ему математических символов и условие, и решение нужной ему задачи, и это не вызовет какого-то экстраординарного напряжения умственных сил. Поскольку мы уже рассмотрели большую часть всех тех функций и операторов, которые пригодятся в ежедневной работе, то переписывать справочную систему MathCAD'а, равно как и учить читателей математике, мне кажется, вряд ли стоит. Поэтому сегодня мы с вами закончим наш разговор статистикой. Мне приятно, надо сказать, что именно такой раздел, как математическая статистика, завершает наш разговор о MathCAD'е. Дело в том, что, как я уже говорил, это наиболее универсальная с прикладной точки зрения математическая теория, находящая свое применение не только в точных науках, но также и в общественных и позволяющая в разумных пределах устанавливать существование закономерностей, о природе которых человек пока что даже и не догадывается. Впрочем, даже если смотреть на статистику не с точки зрения научных исследований, а с чисто прикладной вычислительной позиции, вряд ли она от этого делается хоть сколь-нибудь менее полезной.

Итак, давайте для начала вспомним, на чем мы с вами остановились в прошлый раз. А занимались мы в прошлой статье нашей серии двумя интересными вещами: комбинаторикой и распределениями. Это, конечно, очень полезные и интересные темы, однако непосредственно к задачам математической статистики их отнести, на мой взгляд, вряд ли можно. Однако мы с вами сейчас перейдем к тому, ради чего, собственно говоря, все и было задумано — к построению регрессионных зависимостей с помощью MathCAD'а.

Регрессии

Для того, чтобы полноценно разговаривать о регрессиях, думаю, будет не лишним для начала напомнить, что же именно скрывается за этим таинственным словом. У слова этого, кстати сказать, существует масса значений, и далеко не все из них относятся к математической статистике — слово "регрессия" можно встретить даже в книгах по психологии. Но нас сейчас интересует именно статистическое значение этого термина. Регрессия — в теории вероятностей и математической статистике это зависимость среднего значения какой-либо величины от некоторой другой величины или от нескольких величин. Что это означает? Дело в том, что, в отличие от чисто функциональной зависимости у = f(х), когда каждому значению независимой переменной х соответствует одно определенное значение величины у, при регрессионной связи одному и тому же значению х могут соответствовать в зависимости от случая различные значения величины у. Другим важным понятием математической статистики, с которым вам наверняка придется столкнуться в своих расчетах, является корреляция (не стоит путать само понятие корреляции с коэффициентом корреляции, хотя последний термин нередко заменяют первым для краткости). Корреляция — это некая вероятностная или статистическая зависимость, не имеющая, вообще говоря, строго функционального характера. В отличие от функциональной, корреляционная зависимость возникает тогда, когда один из признаков зависит не только от данного второго, но и от ряда случайных факторов или же когда среди условий, от которых зависят и тот, и другой признаки, имеются общие для них обоих условия. Чем именно корреляция отличается от регрессии? Исходя из сказанного выше, очевидно, что термин корреляция — более общий, и потому хуже подходящий по ряду причин для количественного описания различных статистических величин. Кстати, раз уж я упомянул о том, что есть не только корреляция сама по себе, но еще и какой-то ее коэффициент, то, наверное, было бы неплохо сказать, что же этот самый коэффициент собой представляет. Это фактически численный показатель степени связи двух различных статистических величин друг с другом. Глядя на коэффициент корреляции, как правило, можно сказать, связано ли вообще изменение одной величины с изменением другой, и если связано, то насколько сильно. Коэффициент корреляции может принимать значения в интервале от нуля до единицы, и, соответственно, чем больше значение этого коэффициента, тем большая взаимосвязь между двумя переменными обнаруживается.

Итак, о регрессиях. Давайте предположим, что у нас имеется некоторый набор данных, которые предположительно имеют некоторую зависимость между собой. Нам надо построить приближенную функцию, которая сможет описывать эту зависимость. Прежде, чем приступить, что называется, к активным действиям, нужно разобраться с тем, какой именно вид будет иметь функция, описывающая зависимость для наших данных. Этот вопрос имеет принципиальную важность по той простой причине, что разные виды регрессий с разной точностью аппроксимируют экспериментальные данные в силу различного характера реальных закономерностей, лежащих за данными, на основе которых мы собираемся строить регрессионную зависимость.

Построение регрессии в MathCAD'е

Самый простой тип регрессии — линейная. Это фактически прямая, которую мы проводим таким образом, чтобы сумма квадратов расстояний до всех экспериментальных точек от нее была минимальной (такой способ минимизации погрешностей аппроксимации называется методом наименьших квадратов). Однако, сами понимаете, описать такой регрессией можно только очень небольшое число всевозможных зависимостей. Именно поэтому гораздо чаще используют полиномиальную регрессию. Это фактически многочлен, который также строится с учетом требования минимизации погрешности приближения. В качестве основы для построения этого полинома могут браться как обычные степенные полиномы (вроде x2, x3, x23, …), так и специфические полиномы Чебышева, Лежандра и т.д., и т.п. Можно построить и другие регрессии, однако это уже довольно сложно, а потому этим заниматься мы не будем. Остановимся же мы на полиномиальной регрессии, которую и будем строить в качестве примера того, как нужно в MathCAD'е работать с регрессиями. Для построения полиномиальной регрессии в MathCAD'е используется функция regress. У нее есть три параметра. Первые два — это те самые экспериментальные данные, для которых мы и строим аналитическую приближенную зависимость (они должны быть записаны в виде вектор-столбцов). Третий же параметр задает степень полиномов, которые в конечном счете будут использоваться в нашей регрессии. С этим параметром нужно работать достаточно аккуратно. Казалось бы, схема предельно проста: чем больше степень полинома, тем с большей точностью можно аппроксимировать данные. Однако это не совсем хорошая идея, потому что чем больше степень, тем больше времени нужно MathCAD'у на построение регрессии. Да и при очень высоких степенях могут проявляться очень необычные эффекты, которые будут приводить к тому, что регрессия будет вести себя самым странным образом. Причина их, собственно говоря, кроется не только в каких-то внутренних особенностях реализации статистических расчетов в MathCAD'е, но и в самих свойствах многочленов, однако здесь, согласитесь, тот случай, когда следствие важнее причины. Поэтому вполне достаточно при построении регрессий ограничиваться пятой или шестой степенью полиномов — это очень неплохой вариант компромисса между точностью и скоростью расчетов. Хотя, если данных сравнительно немного, можно совершенно безболезненно залезть и в более высокие степени. Что ж, давайте взглянем на пример вычислений. Он довольно прост, и вы можете сами увидеть, что аргументы у функции именно такие, как я и говорил.

Как видите, всем наша регрессия хороша, кроме разве что наглядности. Что именно обозначают цифры в столбце z (см. рисунок)? Насколько хорошо такая зависимость отвечает экспериментальным данным? Может быть, стоит увеличить степень полинома, чтобы добиться большей точности? Самый лучший выход — визуализировать полученную регрессию. "На глаз" можно очень быстро (и достаточно точно) определить, чего именно не хватает в вашей регрессии до полного совершенства, и соответствующим образом ее подкорректировать. Для того, чтобы построить красивый и удобный для понимания график регрессии, нам нужно воспользоваться интерполяцией. Что такое интерполяция? Все очень просто. Интерполяция — это отыскание промежуточных значений величины по некоторым известным ее значениям. За интерполяцию в нашем случае будет отвечать такая полезная функция, как interp. У нее есть четыре параметра. Первый — вектор коэффициентов регрессионного полинома (он у нас назван z), второй и третий — вектора экспериментальных значений x и y, а четвертый — промежуточная точка, для которой мы будем вычислять значение интерполируемой функции. Как видите, все действительно просто, а потому я предлагаю вам взглянуть на следующий рисунок.

На нем достаточно неплохо видно, что на самом деле качество нашей регрессии далеко еще от идеального, а потому степень полинома можно увеличить. Что мы, в общем-то, с успехом и сделаем, и результат этого вы сможете увидеть на соответствующем рисунке. Как говорится, различия видны невооруженным глазом.

Чтобы добиться такой хорошей точности полиномиальной аппроксимации, мы увеличили степень многочлена до девяти. Если вы попробуете немного поэкспериментировать с этим параметром функции regress, то убедитесь, что его дальнейшее увеличение будет приводить только к ухудшению результатов — на краях нашего графика появятся резкие пики, которые будут очень сильно отличаться от реальных экспериментальных значений. Если мы будем еще увеличивать степень полиномов, то обнаружим, что она достигает своего предела уже на пятнадцати — MathCAD начинает выдавать сообщение об ошибке, и построение регрессии становится совершенно невозможным.

Выводы

Что ж, как видите, строить регрессии в MathCAD'е не сложнее, чем считать интегралы. Можно было бы, конечно, несколько более широко осветить вопросы интерполяции, но, как показывает практика, тема эта, в общем-то, довольно-таки простая, а потому особенно долго останавливаться на ней действительно не имеет смысла. Стоит заметить, что для построения линейной регрессии можно также воспользоваться той же функцией regress, что и для полиномиальной, по той простой причине, что линейная функция — это полином первой степени. То есть для этого достаточно указать в regress в качестве последнего параметра единицу. Хотя в ряде литературных источников по MathCAD'у приводятся специальные формулы для линейной регрессии, мне лично кажется, что такой способ намного лучше, потому что не требует забивать себе голову лишними функциями, которых в арсенале MathCAD'а, мягко говоря, далеко не мало.

Заключение

Что ж, сегодня мы с вами подведем итоги не только всему сказанному, но и всей серии статей "MathCAD — это просто!" Думаю, благодаря ей вы, по крайней мере, прониклись мыслью о том, что при соответствующем системном подходе и достаточных знаниях математики MathCAD будет преподносить вам только приятные сюрпризы. Если вы, поработав с ним, пересядете потом работать с другими математическими пакетами (скажем, с той же Mathematica), то сможете самостоятельно ощутить, что разговоры о простом и прозрачном пользовательском интерфейсе — это не просто шутка, и что MathCAD действительно позволяет пользователю решать задачи именно на том языке, которому его учили в школе и институте, а не заставляет выучивать новый, свой собственный. Конечно, что уж там и говорить, рассказывать о разных задачах, решаемых в MathCAD'е, можно практически бесконечно. В серии статей "MathCAD — это просто!" я постарался рассказать о действительно наиболее важных и, можно сказать, основополагающих принципах и приемах работы с этой математической средой, оставляя за кадром некоторые дополнительные сведения, которые, хотя и представляют определенный интерес, но вряд ли будут востребованы особенно часто.

Напоследок хочу дать несколько общих советов, связанных не столько с MathCAD'ом, сколько с поиском информации по нему. Во-первых, не ленитесь и не бойтесь пользоваться справочной системой, особенно разделом Quicksheets, где размещены примеры. Лучший способ разобраться, как что- то делать — посмотреть, как это делают другие. Во-вторых, пользуйтесь "Яндексом" или "Гуглом", если у вас возникает какой-то вопрос или какая-то проблема, справиться с которой при помощи одной только справки не представляется возможным. MathCAD — очень популярная на постсоветском пространстве программа, и существует масса русскоязычных сайтов и форумов, где можно найти ответы на разные вопросы. В-третьих, не жадничайте и делиться на этих сайтах и форумах, если все-таки решите на них зарегистрироваться, собственными знаниями, которые, несомненно, у вас при регулярной работе с MathCAD'ом уже очень скоро появятся.

И удачи, конечно же, вам в работе с этой мощной, но дружелюбной к пользователю математической средой!

SF, spaceflyer@tut.by


Компьютерная газета. Статья была опубликована в номере 48 за 2008 год в рубрике soft

©1997-2024 Компьютерная газета