Оцените подгонку кривой

В этом примере показано, как работать с подгонкой кривой.

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

load census
curvefit = fit(cdate,pop,'poly3','normalize','on')
curvefit = 
     Linear model Poly3:
     curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =       0.921  (-0.9743, 2.816)
       p2 =       25.18  (23.57, 26.79)
       p3 =       73.86  (70.33, 77.39)
       p4 =       61.74  (59.69, 63.8)

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

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

plot(curvefit,cdate,pop)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent data, fitted curve.

Постройте подгонку остаточных значений.

plot(curvefit,cdate,pop,'Residuals')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent data, zero line.

Постройте границы предсказания на подгонке.

plot(curvefit,cdate,pop,'predfunc')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent data, fitted curve, prediction bounds.

Оцените подгонку в заданной точке

Оцените подгонку в отдельном моменте путем определения значения для x , использование этой формы: y = fittedmodel(x).

curvefit(1991)
ans = 252.6690

Оцените подходящие значения во многих точках

Оцените модель в векторе из значений, чтобы экстраполировать к году 2050.

xi = (2000:10:2050).';
curvefit(xi)
ans = 6×1

  276.9632
  305.4420
  335.5066
  367.1802
  400.4859
  435.4468

Получите границы предсказания на тех значениях.

ci = predint(curvefit,xi)
ci = 6×2

  267.8589  286.0674
  294.3070  316.5770
  321.5924  349.4208
  349.7275  384.6329
  378.7255  422.2462
  408.5919  462.3017

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

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

Figure contains an axes. The axes contains 4 objects of type line. These objects represent fitted curve, prediction bounds.

Получите уравнение модели

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

curvefit
curvefit = 
     Linear model Poly3:
     curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =       0.921  (-0.9743, 2.816)
       p2 =       25.18  (23.57, 26.79)
       p3 =       73.86  (70.33, 77.39)
       p4 =       61.74  (59.69, 63.8)

Чтобы получить только уравнение модели, используйте formula.

formula(curvefit)
ans = 
'p1*x^3 + p2*x^2 + p3*x + p4'

Получите содействующие имена и значения

Задайте коэффициент по наименованию.

p1 = curvefit.p1
p1 = 0.9210
p2 = curvefit.p2
p2 = 25.1834

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

coeffnames(curvefit)
ans = 4x1 cell
    {'p1'}
    {'p2'}
    {'p3'}
    {'p4'}

Получите все содействующие значения.

coeffvalues(curvefit)
ans = 1×4

    0.9210   25.1834   73.8598   61.7444

Получите доверительные границы на коэффициентах

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

confint(curvefit)
ans = 2×4

   -0.9743   23.5736   70.3308   59.6907
    2.8163   26.7931   77.3888   63.7981

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

Чтобы получить статистику качества подгонки в командной строке, вы можете также:

  • Открытое приложение Curve Fitting и выбирает Fit> Save to Workspace, чтобы экспортировать вашу подгонку и качество подгонки к рабочей области.

  • Задайте gof выходной аргумент с помощью fit функция.

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

[curvefit,gof,output] = fit(cdate,pop,'poly3','normalize','on')
curvefit = 
     Linear model Poly3:
     curvefit(x) = p1*x^3 + p2*x^2 + p3*x + p4
       where x is normalized by mean 1890 and std 62.05
     Coefficients (with 95% confidence bounds):
       p1 =       0.921  (-0.9743, 2.816)
       p2 =       25.18  (23.57, 26.79)
       p3 =       73.86  (70.33, 77.39)
       p4 =       61.74  (59.69, 63.8)
gof = struct with fields:
           sse: 149.7687
       rsquare: 0.9988
           dfe: 17
    adjrsquare: 0.9986
          rmse: 2.9682

output = struct with fields:
        numobs: 21
      numparam: 4
     residuals: [21x1 double]
      Jacobian: [21x4 double]
      exitflag: 1
     algorithm: 'QR factorization and solve'
    iterations: 1

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

histogram(output.residuals,10)

Figure contains an axes. The axes contains an object of type histogram.

Постройте подгонку, данные и остаточные значения

plot(curvefit,cdate,pop,'fit','residuals')
legend Location SouthWest
subplot(2,1,1)
legend Location NorthWest

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent data, fitted curve. Axes 2 contains 2 objects of type line. These objects represent data, zero line.

Найдите методы

Перечислите каждый метод, который можно использовать с подгонкой.

methods(curvefit)
Methods for class cfit:

argnames       confint        formula        numcoeffs      setoptions     
category       dependnames    indepnames     plot           type           
cfit           differentiate  integrate      predint        
coeffnames     feval          islinear       probnames      
coeffvalues    fitoptions     numargs        probvalues     

Используйте help команда, чтобы узнать, как использовать подходящий метод.

help cfit/differentiate
 DIFFERENTIATE  Differentiate a fit result object.
    DERIV1 = DIFFERENTIATE(FITOBJ,X) differentiates the model FITOBJ at the
    points specified by X and returns the result in DERIV1. FITOBJ is a Fit
    object generated by the FIT or CFIT function. X is a vector. DERIV1 is
    a vector with the same size as X. Mathematically speaking, DERIV1 =
    D(FITOBJ)/D(X).
 
    [DERIV1,DERIV2] = DIFFERENTIATE(FITOBJ, X) computes the first and
    second derivatives, DERIV1 and DERIV2 respectively, of the model
    FITOBJ.
 
    See also CFIT/INTEGRATE, FIT, CFIT.