Вы здесь

3. Регрессия

 

Регрессия

 

Линейная регрессия общего вида — LinearRegression

В подпакете LinearRegression имеются расширенные функции для проведения линейной регрессии общего вида — в дополнение к включенной в ядро функции Fit. Прежде всего это функция Regress:

  • Regress [data, { I, х, х^2 }, х] — осуществляет регрессию данных data, используя квадратичную модель;
  • Regress [data, {I, x1, x2, xlx2 }, {x1, x2 }] — осуществляет регрессию, используя в ходе итераций зависимость между переменными x 1 и х 2 ;
  • Regress [data, {f 1, f2,...}, vars] — осуществляет регрессию, используя модель линейной регрессии общего вида с уравнением регрессии, представляющим линейную комбинацию функций f i от переменных vars.

Данные могут быть представлены списком ординат {у1,у2,...} или списком


{{xll,xl2,...,yl}, {х21,х22,...,у2},...}.

Ниже приведены примеры использования функции Regress:


<<Statistics`LinearRegression`

data={{1,1.9},{2,2.95},{3,4.3},{4,4.8},{5,5}}

{{1, 1.9}, {2, 2.95}, {3, 4.3}, {4, 4.8}, (5, 5}}

(regress = Regress[data, {l,x, x^2}, x] Chop[regress, 10^(-6)])

[Parameter-Table->

Estimate

SE

TStat

PValue

1

0.1

0.421613

0.237185

0.834595

x

1.89786

0.321297

5.90687

0.0274845'

X 2

-0.182143

0.0525376

-3.4669

0.0740731

RSquared->0.988994, AdjustedRSquared ->0.977988,

EstimatedVariance -> 0.0386429, ANOVATable ->

Model

DF

2

SumOfSq

6.94471

MeanSq

3.47236

FRatio

89.8577

PValue

0.0110062,

Error 2 0.0772857 0.0386429    

Total

4

7.022

func = Fit[data, {l,x,.x^2}, x]

0.1 +1.89786x-0.182143x2

Options[Regress]

{RegressionReport -> SurnmaryReport, IncludeConstant -» True, BasisNames->Automatic, Weights->Automatic, Tolerance->Automatic, ConfidenceLevel->0.95}

На рис. 12.6 показан еще один пример проведения регрессии, сопровождаемой графической визуализацией с помощью функции MultipleListPlot.

Риc. 12.6. Пример проведения регрессии с графической визуализацией

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

Нелинейная регрессия — NonlinearFit

В подпакете NonlinearFit содержатся функции для выполнения нелинейной регрессии общего вида:

  • NonlinearFit[data,model,variables,parameters] — выполняет регрессию по заданной модели (формуле) model с переменными variables и параметрами parameters для заданных данных data;
  • NonlinearRegress[data,model,variables,parameters] —выполняет регрессию по заданной модели (формуле) model с переменными variables и параметрами parameters для заданных данных data с выдачей списка диагностики.

Данные могут быть представлены списком ординат {у1,у2,...} или списком {{x11,x12,..., yl}, {х21, х22,..., у2},...}. В ходе регрессии минимизируются заданные параметры, так что заданная модель регрессии приближает данные с минимальной среднеквадратичной погрешностью.

На рис. 12.7 показан пример выполнения логарифмической регрессии. При ней модель представлена выражением a*Log[b*x]. Результатом действия функции NonlinearFit является уравнение регрессии в виде этой модели с найденными значениями параметров а и Ь. Представлена также визуализация регрессии в виде графика функции-модели и исходных точек. Следует отметить, что реализация нелинейной регрессии разными методами может давать заметно различающиеся результаты, так что представленные результаты не являются абсолютно строгими.

Рис. 12.7. Пример логарифмической регрессии

Применение функции NonlinearRegress иллюстрирует следующий пример:


NonlinearRegress [data, a*Log[b*x] ,{x},{a,b}]

{BestFitParameters -> {a -> 0.665503, b -4 4. 11893},

ParameterCITable ->

Estimate Asymptotic SE CI

a 0.665503 0.0504167 {0.525524, 0.805482},

b 4.11893 0.806289 {1.88031, 6.35754}

EstimatedVariance -> 0 . 00558058,

DF SumOfSq MeanSq

Model 2 17.7425 8.87126

ANOVATable ->

Error 4 '0.0223223 0.00558058,

Uncorrected Total 6 17.7648

Corrected Total 5 0.994689

1. -0.972212 AsymptoticCorrelationMatrix ->

Curvature

Max Intrinsic 2 . 94314 x lO'16,

FitCurvatureTable -» }

Max Parameter-Effects 2.07792

95. % Confidence Region 0.379478

Как нетрудно заметить, в данном случае выдается отчет о проведении регрессии. Более детальные данные об опциях и обозначениях в отчетах нелинейной регрессии можно найти в справочной базе данных.

Полиномиальная регрессия — PolynomialFit

К сожалению, средства регрессии в Mathematica разбросаны по разным пакетам. Так, в подпакете PolynomialFit пакета NumericalMath определена функция для полиномиальной регрессии:

  • PolynomialFit [data, n] — возвращает полином степени п, обеспечивающий наилучшее среднеквадратичное приближение для данных, представленных параметром data. Если data является списком ординат функции, то абсциссы формируются автоматически с шагом 1. Если data является списком координат {xi,yi}, то полином наилучшим образом приближает зависимости

Ниже представлен пример применения функции полиномиальной аппроксимации


<<NumericalMath`PolynomialFit`

р = PolynomialFit[{l,3.9,4.1,8.9,16,24.5,37,50},3]

FittingPolyncmial [ <> , 3]

p[5]

15.8727

Expand[p[x]]

2.35-1.44066x+0.659848x2 +0.0338384x3

Другой пример с построением графиков исходных точек и аппроксимирующего полинома дан на рис. 12.8.

Рис. 12.8. Графики точек исходной зависимости и аппроксимирующего полинома

Нетрудно заметить, что точки исходной зависимости неплохо (но не точно) укладываются на график полинома.

Сплайн-регрессия — SplineFit

Сплайны представляют собой набор полиномов невысокой степени, последовательно применяемых к наборам точек аппроксимирующей функции. Чаще всего используется кубическая сплайновая аппроксимация, при которой коэффициенты полиномов выбираются из условий равенства в стыкуемых точках не только значений функции, но также первой и второй производных. Это придает графику сплайна вид плавной кривой, точно проходящей через узловые точки и напоминающей изгибы гибкой линейки (spline в переводе — гибкая линейка).

Подпакет SplineFit пакета NumericalMath содержит функцию для проведения сплайн- регрессии, при которой сплайн-функция проходит максимально близко к аппроксимируемым точкам в смысле наилучшего среднеквадратичного приближения. Для этого используется функция SplineFit [data, type], которая возвращает сплайн функцию для данных data, используя сплайн-аппроксимацию типа type — по умолчанию это кубический сплайн Cube (другие типы — Bezier и CompositeBezier).

Рисунок 12.9 показывает пример сплайн- регрессии для обычной зависимости у(х), представленной пятью парами точек. На нем построены также графики аппроксимирующей функции и исходных точек.

Рис. 12.9. Пример сплайн- регрессии для зависимости у(х), заданной списком координат своих узловых точек

Рис. 12.10. Пример сплайн-интерполяции параметрически заданной функции

Специфика сплайн- регрессии по функции SplineFit заключается в преобразовании значений как xi, так и yi. Это позволяет представлять сплайнами в общем виде параметрически заданные функции, что поясняет рис. 12.10.

Тригонометрическая регрессия — TrigFit

Многие выражения содержат периодические тригонометрические функции, например sin(X) или cos(X). Помимо обычного спектрального представления выражений, подпакет TrigFit пакета NumericalMath имеет функции для тригонометрической регрессии:

  • TrigFit [data, n, x] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(n x) и sin(n x) и с периодом 2л;
  • TrigFit [data, n, {x,L}] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(2лuc/L) и sm(2лnx/L) и с периодом I;
  • TrigFit [data, n, {x, x0, xl} ] — дает тригонометрическую регрессию для данных data с использованием косинусов и синусов вплоть до cos(2лn(x - х 0 )/ (x-x0)) и sin(2лn(x-x 0 )/(x 1 -x 0 )) и с периодом (x1-x0).

Примеры выполнения тригонометрической регрессии даны ниже:


<<Numerical Math'TrigFit'

data = Table[l+2Sin[x]+3Cos[2x],{x, 0, 2Pi-2Pi/7, 2Pi/7}];

TrigFit[data, 0, x]

1.

TrigFit[data, 1, {x, L}]

l.+ 0.Cos 2[лx/L]+ 2. Sin [2лx/L]

Fit[Transpose!{Range[0, 2Pi-2Pi/7, 2Pi/7], data}],

{1, Cos[x], Sin[x]}, x]

1. - 4.996xl(T16Cos[x] + 2. Sin[x]

TrigFit[data, 3, {x, x0, xl}];

Chop[%]

l. + 3.Cos [4л (x-x0)/(-x0+x1)]+2. Sin [2л (x-x0)/(-x0+x1)]

 

Что нового мы узнали?

В этом уроке мы научились:

  • Вычислять ортогональные многочлены.
  • Выполнять статистические расчеты с помощью пакета Statistics.
  • Строить гистограммы.
  • Вычислять статистики распределений.
  • Использовать статистическую обработку данных.
  • Сглаживать данные.
  • Выполнять регрессию различного вида.

 


Top.Mail.Ru