exponenta event banner

Сравнение посадок программным способом

В этом примере показано, как подгонять и сравнивать полиномы до шестой степени с помощью панели инструментов «Фитинг кривой», подгоняя некоторые данные переписи. Также показано, как подогнать одномерное экспоненциальное уравнение и сравнить его с полиномиальными моделями.

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

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

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

Загрузка и печать данных

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

load census

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

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

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

whos cdate pop
plot(cdate,pop,'o')
  Name        Size            Bytes  Class     Attributes

  cdate      21x1               168  double              
  pop        21x1               168  double              

Создание и печать квадратичного

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

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

Для печати посадки используется метод печати.

plot(population2,cdate,pop);
% Move the legend to the top left corner.
legend('Location','NorthWest');

Создание и печать набора многочленов

Для подгонки многочленов различных степеней измените строку фиттипа, например, для многочлена кубической или третьей степени используйте «poly3». Масштаб входных данных, cdate, достаточно велик, поэтому вы можете получить лучшие результаты, центрируя и масштабируя данные. Для этого используйте параметр «Нормализовать».

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» в качестве фиттипа.

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');

Постройте график остатков для вычисления соответствия

Для печати остатков укажите «остатки» в качестве типа графика в методе печати.

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

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

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

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

Проверка посадок за пределами диапазона данных

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

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

Анализ статистики пригодности

Структура gof показывает статистику годности для вписывания «poly2». При создании подгонки «poly2» с функцией подгонки на предыдущем шаге был задан выходной аргумент 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-квадрата для остальных полиномиальных посадок очень близки друг к другу. Какой выбрать?

Сравнение коэффициентов и доверительных границ для определения наилучшего соответствия

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

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

population2

population5
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 = 

     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.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 для квадратичной посадки, что указывает на то, что подходящие коэффициенты известны довольно точно.

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

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

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

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

  274.6221
  301.8240
  330.3341

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

ci = predint(population2,cdateFuture,0.95,'observation')
ci =

  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')