Регрессия
Линейная регрессия общего вида — 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.
{{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 с выдачей списка диагностики.
Рис. 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. Графики точек исходной зависимости и аппроксимирующего полинома
Нетрудно заметить, что точки исходной зависимости неплохо (но не точно) укладываются на график полинома. Сплайны представляют собой набор полиномов невысокой степени, последовательно применяемых к наборам точек аппроксимирующей функции. Чаще всего используется кубическая сплайновая аппроксимация, при которой коэффициенты полиномов выбираются из условий равенства в стыкуемых точках не только значений функции, но также первой и второй производных. Это придает графику сплайна вид плавной кривой, точно проходящей через узловые точки и напоминающей изгибы гибкой линейки (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.
- Строить гистограммы.
- Вычислять статистики распределений.
- Использовать статистическую обработку данных.
- Сглаживать данные.
- Выполнять регрессию различного вида.
Назад | Начало |