Обработка данных

Пакет располагает средствами для проведения интерполяции и экстраполяции данных, их аппроксимации (приближения) и сглаживания.

Интерполяция производится с целью получения промежуточных значений функции по ее значениям в узловых точках. Ее целесообразно применять к данным, полученным с минимальной погрешностью, т.к. интерполирующая функция точно проходит через узлы. Линейную интерполяцию реализуют функцией linterp(vx, vy, x). В ней вектор vxсодержит упорядоченные по нарастанию абсциссы узловых точек, vy – вектор их ординат, а x – абсцисса точки, значение функции в которой хотят получить. Кубическую сплайн-интерполяцию производят функцией interp(vs, vx, vy, x), для которой вектор vs вторых производных в узловых точках можно найти с помощью одной из трех функций: lspline(vx, vy), pspline(vx, vy), cspline(vx, vy). Ниже показаны примеры проведения названных видов интерполяции.

Функции lspline, pspline и cspline дают практически одинаковые результаты в пределах интервала интерполяции. Отличие в поведении функции интерполяции будет ощутимо заметным только вблизи граничных точек интервала.

Экстраполяцию (предсказание) значений вектора y по его m ближайшим к правой границе выбранным точкам на n последующих точек можно осуществить с помощью функции predict(y, m, n). Покажем, как предсказать поведение функции, на конкретном примере.

Из приведенного примера видно, что результат экстраполяции (утолщенные участки кривых на рисунках) существенно зависит от размера интервала предсказания и параметра m.

Аппроксимация имеющихся данных некоторой зависимостью получило название регрессии. Пакет позволяет осуществлять регрессию разного вида. Самым простым видом аппроксимации является линейная регрессия. Линейная регрессия, как следует из ее названия, представляет собой линейную зависимость между независимой переменной – фактором – x и функцией отклика lin(x): lin(x) = b1 + b2x. В ней b1постоянная регрессии, а b2 – коэффициент регрессии. На рисунке слева показана совокупность значений величины x и соответствующая ей совокупность значений величины y – это точки, отмеченные крестиками (исходные данные). Можно провести линейную зависимость некоторым образом близко к ним. Видно, что в ней b1 = lin(0), а b2 – это тангенс угла наклона прямой по отношению к оси абсцисс. Степень близости прямой к исходным данным обычно оценивают суммой квадратов отклонений ординат от значений функции отклика во всех n точках: . Поскольку значения коэффициентов b1 и b2 находят их условия минимума величины U, способ их нахождения получил название метода наименьших квадратов. Метод реализован в функциях линейной регрессии MathCAD line(x, y), intercept(x, y) и slope(x, y). Первая из них возвращает вектор коэффициентов b1 и b2, вторая – коэффициент b1 и третья - b2.

Даже из приведенного выше примера видно, что линейная регрессия не всегда адекватно описывает характер реальной зависимости между величинами. Поэтому в системе реализованы и другие функции регрессии. Полиномиальная регрессия проводится с помощью функции regress(x, y, st), в которой параметр st определяет степень полинома. Функция возвращает вектор коэффициентов, в котором первые три являются служебными, а остальные – коэффициентами многочлена, начиная с младших его степеней. Саму полиномиальную регрессию производят функцией interp(p, x, y, xx), в которой аргументом p является созданный функцией regress вектор коэффициентов. Выше показаны оба из рассмотренных видов регрессии, при этом использованы те же векторы v и s данных, что и в примерах интерполяции и экстраполяции. Матрица представляет собой обратную матрицу коэффициентов уравнений системы, полученных в результате взятия частных производных по неизвестным коэффициентам С1, C2, C3 от условия и приравнивания их нулю (условие минимума U). Правые части этих уравнений представлены вектором . Вектор решения системы уравнений получен прямым использованием метода Крамера. Помимо функции regress можно использовать другую функцию полиномиальной регрессии – loess(x, y, int). Эта функция использует параметр int, задающий интервалы для отдельных полиномов, из которых получается результирующая функция регрессии. Значение параметра подбирают, исходя из условий задачи (разработчики системы рекомендуют int = 0.75).

Еще шесть функций пакета предназначены для проведения специальных видов регрессии:

- expfit(x, y, g) - экспоненциальной - ;

- lgsfit(x, y, g) - логистической – ;

- sinfit(x, y, g) - синусоидальной – a·sin(x + b) + c;

- pwfit(x, y, g) - степенной - ;

- logfit(x, y, g) – логарифмической - a·ln(x + b) + c;

- lnfit(x, y) – логарифмической с двумя параметрами - a·ln(x) + b.

Функции возвращают векторы коэффициентов соответствующих функциональных зависимостей, используя при этом вектор их начальных приближений g. (Вторая часть имен функций является сокращением английского fitting – усреднение). Полученные коэффициенты используют для описания соответствующей функции регрессии.

MathCAD содержит также функции для проведения регрессии общего вида: linfin(x, y, F) и genfit(x, y, g, Fc). Первая из них возвращает коэффициенты, с которыми затем строится линейная комбинация функций, представленных в векторе F, - C1f1(x) + C2f2(x) + … . Другая использует вектор g начальных приближений и вектор Fc функций, на основе которых строится регрессия как сумма этих функций. Чтобы найти N коэффициентов, функция genfit должна иметь в векторе Fc N+1 функцию. Имя вектора коэффициентов должно присутствовать в списке параметров Fc. Покажем это на примере.

Степень близости той или иной проведенной зависимости к исходным данным оценивают так называемой дисперсией остатков. Это величина, определяемая суммой квадратов отклонений во всех узловых точках между исходными данными и результатом аппроксимации:

,

где n – объем выборки данных, а - аппроксимирующая функция.

Кроме рассмотренных функций регрессии, MathCAD содержит более простые в применении функции сглаживания данных. Назовем их:

- medsmooth(y, n) (y – вектор равномерно распределенных на интервале сглаживаемых данных, n – число окон сглаживания);

- ksmooth(x, y, b) (x, y – векторы данных, b – ширина окна сглаживания);

- supsmooth(x, y) (x, y – векторыданных).

Две последние функции лучше всего сглаживают соответственно стационарные и сложные нестационарные сигналы [1].