Полиномиальное аппроксимирование кривыми

Этот пример показывает, как соответствовать полиномам до шестой степени к некоторым данным о переписи с помощью Curve Fitting Toolbox™. Это также показывает, как соответствовать экспоненциальному уравнению одно термина и сравнить это с полиномиальными моделями.

Шаги показывают как:

  • Загрузите данные и создайте подгонки с помощью различных моделей библиотеки.

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

Загрузите и отобразите данные на графике

Данные для этого примера являются файлом census.mat.

load census

Рабочая область содержит две новых переменные:

  • cdate является вектор-столбцом, содержащим годы 1790 - 1990 с 10-летним шагом.

  • pop является вектор-столбцом с американскими фигурами генеральной совокупности, которые соответствуют годам в cdate.

whos cdate pop
  Name        Size            Bytes  Class     Attributes

  cdate      21x1               168  double              
  pop        21x1               168  double              
plot(cdate,pop,'o')

Создайте и постройте квадратичное

Используйте функцию fit, чтобы соответствовать полиному к данным. Вы задаете квадратичный, или полином второй степени со строкой 'poly2'. Первый вывод от fit является полиномом, и второй вывод, gof, содержит статистику качества подгонки, которую вы исследуете на более позднем шаге.

[population2,gof] = fit(cdate,pop,'poly2');

Чтобы построить подгонку, используйте функцию plot. Добавьте легенду в левом верхнем угле.

plot(population2,cdate,pop);
legend('Location','NorthWest');

Создайте и постройте выбор полиномов

Чтобы соответствовать полиномам различных степеней, поменяйте fittype струну, например, для кубического или полиномиального использования третьей степени 'poly3'. Шкала входа, cdate, является довольно большой, таким образом, можно получить лучшие результаты путем центрирования и масштабирования данных. Для этого используйте опцию 'Normalize'.

population3 = fit(cdate,pop,'poly3','Normalize','on');
population4 = fit(cdate,pop,'poly4','Normalize','on');
population5 = fit(cdate,pop,'poly5','Normalize','on');
population6 = fit(cdate,pop,'poly6','Normalize','on');

Простая модель для прироста населения говорит нам, что экспоненциальное уравнение должно соответствовать этим данным о переписи хорошо. Чтобы соответствовать одной модели экспоненциала термина, используйте 'exp1' в качестве fittype.

populationExp = fit(cdate,pop,'exp1');

Постройте все подгонки целиком и добавьте значимую легенду в левом верхнем угле графика.

hold on
plot(population3,'b');
plot(population4,'g');
plot(population5,'m');
plot(population6,'b--');
plot(populationExp,'r--');
hold off
legend('cdate v pop','poly2','poly3','poly4','poly5','poly6','exp1', ...
    'Location','NorthWest');

Постройте невязки, чтобы оценить подгонку

Чтобы построить невязки, задайте 'residuals' как тип графика в функции plot.

plot(population2,cdate,pop,'residuals');

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

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

plot(populationExp,cdate,pop,'residuals');

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

Исследуйте подгонки вне области значений данных

Исследуйте поведение подгонок до года 2050. Цель подбора кривой данным о переписи состоит в том, чтобы экстраполировать лучшую подгонку, чтобы предсказать будущие значения генеральной совокупности.

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

plot(cdate,pop,'o');
xlim([1900, 2050]);
hold on
plot(population6);
hold off

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

Постройте интервалы прогноза

Чтобы построить интервалы прогноза, используйте 'predobs' или 'predfun' как тип графика. Например, видеть прогноз ограничивает для полинома пятой степени для нового наблюдения до года 2050:

plot(cdate,pop,'o');
xlim([1900,2050])
hold on
plot(population5,'predobs');
hold off

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

plot(cdate,pop,'o');
xlim([1900,2050])
hold on
plot(population3,'predobs')
hold off

Исследуйте статистику качества подгонки

Struct gof показывает статистику качества подгонки для подгонки 'poly2'. Когда вы создали подгонку 'poly2' с функцией fit на более раннем шаге, вы задали выходной аргумент gof.

gof
gof = struct with fields:
           sse: 159.0293
       rsquare: 0.9987
           dfe: 18
    adjrsquare: 0.9986
          rmse: 2.9724

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

Большой SSE для 'exp1' указывает, что это - плохая подгонка, который вы уже определенный путем исследования подгонки и невязок. Самое низкое значение SSE сопоставлено с 'poly6'. Однако поведение этой подгонки вне области значений данных делает его плохим выбором для экстраполяции, таким образом, вы уже отклонили эту подгонку путем исследования графиков с новыми пределами по осям.

Следующее лучшее значение SSE сопоставлено с аппроксимацией полиномом пятой степени, 'poly5', предположив, что это может быть лучшая подгонка. Однако SSE и настроенные значения R-квадрата для остающихся аппроксимаций полиномом - все очень друг близко к другу. Какой необходимо выбрать?

Сравните коэффициенты и доверительные границы, чтобы определить лучшую подгонку

Решите лучший подходящий вопрос путем исследования коэффициентов и доверительных границ для остающихся подгонок: полином пятой степени и квадратичное.

Исследуйте population2 и population5 путем отображения моделей, подходящих коэффициентов и доверительных границ для подходящих коэффициентов:

population2
population2 = 
     Linear model Poly2:
     population2(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)
population5
population5 = 
     Linear model Poly5:
     population5(x) = p1*x^5 + p2*x^4 + p3*x^3 + p4*x^2 + p5*x + p6
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =      0.5877  (-2.305, 3.48)
       p2 =      0.7047  (-1.684, 3.094)
       p3 =     -0.9193  (-10.19, 8.356)
       p4 =       23.47  (17.42, 29.52)
       p5 =       74.97  (68.37, 81.57)
       p6 =       62.23  (59.51, 64.95)

Можно также получить доверительные интервалы при помощи confint:

ci = confint(population5)
ci = 2×6

   -2.3046   -1.6841  -10.1943   17.4213   68.3655   59.5102
    3.4801    3.0936    8.3558   29.5199   81.5696   64.9469

Доверительные границы на коэффициентах определяют свою точность. Проверяйте подходящие уравнения (например, f(x)=p1*x+p2*x...), чтобы видеть образцовые условия для каждого коэффициента. Обратите внимание на то, что p2 относится к термину p2*x в 'poly2' и термину p2*x^4 в 'poly5'. Не сравнивайте нормированные коэффициенты непосредственно с ненормированными коэффициентами.

Границы пересекают нуль на p1, p2 и коэффициентах p3 для полинома пятой степени. Это означает, что вы не можете быть уверены, что эти коэффициенты отличаются от нуля. Если условия модели высшего порядка могут иметь коэффициенты нуля, они не помогают с подгонкой, которая предполагает что эта модель по подгонкам данные о переписи.

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

Однако маленькие доверительные границы не пересекают нуль на p1, p2 и p3 для квадратичной подгонки, указывая, что подходящие коэффициенты известны справедливо точно.

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

Оцените лучшую подгонку в новых точках запроса

Теперь вы выбрали лучшую подгонку, population2, для экстраполирования этих данных о переписи, оцените пригодное для некоторых новых точек запроса:

cdateFuture = (2000:10:2020).';
popFuture = population2(cdateFuture)
popFuture = 3×1

  274.6221
  301.8240
  330.3341

Чтобы вычислить 95% доверительных границ на прогнозе для генеральной совокупности в будущем, используйте метод predint:

ci = predint(population2,cdateFuture,0.95,'observation')
ci = 3×2

  266.9185  282.3257
  293.5673  310.0807
  321.3979  339.2702

Постройте предсказанную будущую генеральную совокупность, с доверительными интервалами, против подгонки и данных.

plot(cdate,pop,'o');
xlim([1900,2040])
hold on
plot(population2)
h = errorbar(cdateFuture,popFuture,popFuture-ci(:,1),ci(:,2)-popFuture,'.');
hold off
legend('cdate v pop','poly2','prediction', ...
    'Location','NorthWest')

Для получения дополнительной информации см. Полиномиальные Модели.

Для просмотра документации необходимо авторизоваться на сайте