nlinfit

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

Описание

пример

beta = nlinfit(X,Y,modelfun,beta0) возвращает вектор оцененных коэффициентов для нелинейной регрессии ответов в Y на предикторах в X использование модели, заданной как modelfun. Коэффициенты оцениваются с помощью итерационной оценки методом наименьших квадратов с начальными значениями, заданными beta0.

пример

beta = nlinfit(X,Y,modelfun,beta0,options) подходит для нелинейной регрессии, используя параметры управления алгоритма в структуре options. Можно вернуть любой из выходных аргументов в предыдущих синтаксисах.

пример

beta = nlinfit(___,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера можно задать веса наблюдений или неконстантную модель ошибки. Можно использовать любой из входных параметров в предыдущих синтаксисах.

пример

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(___) дополнительно возвращает невязки, R, якобиан modelfun, J, оценочную дисперсионно-ковариационную матрицу для оценочных коэффициентов, CovB, оценку отклонения термина ошибки, MSEи структуру, содержащую подробности о модели ошибки, ErrorModelInfo.

Примеры

свернуть все

Загрузите выборочные данные.

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

Подбор модели Hougen-Watson к данным о скорости с помощью начальных значений в beta0.

beta = nlinfit(X,y,@hougen,beta0)
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

Сгенерируйте выборочные данные из нелинейной регрессионой модели y=b1+b2exp{-b3x}+ϵ, где b1, b2, и b3 являются коэффициентами, и член ошибки обычно распределяется со средним 0 и стандартным отклонением 0,1.

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

rng('default') % for reproducibility
b = [1;3;2];
x = exprnd(2,100,1);
y = modelfun(b,x) + normrnd(0,0.1,100,1);

Установите устойчивые опции модели.

opts = statset('nlinfit');
opts.RobustWgtFun = 'bisquare';

Подгонка нелинейной модели с помощью опций устойчивой подгонки.

beta0 = [2;2;2];
beta = nlinfit(x,y,modelfun,beta0,opts)
beta = 3×1

    1.0041
    3.0997
    2.1483

Загрузите выборочные данные.

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

Задайте вектор известных весов наблюдений.

W = [8 2 1 6 12 9 12 10 10 12 2 10 8]';

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

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',W);
beta
beta = 5×1

    2.2068
    0.1077
    0.0766
    0.1818
    0.6516

Отображение стандартных ошибок коэффициентов.

sqrt(diag(CovB))
ans = 5×1

    2.5721
    0.1251
    0.0950
    0.2043
    0.7735

Загрузите выборочные данные.

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

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

 a = 1; b = 1;
 weights = @(yhat) 1./((a + b*abs(yhat)).^2);

Подгонка модели Hougen-Watson к данным о скорости с помощью заданной функции весов наблюдений.

[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',weights);
beta
beta = 5×1

    0.8308
    0.0409
    0.0251
    0.0801
    1.8261

Отображение стандартных ошибок коэффициентов.

sqrt(diag(CovB))
ans = 5×1

    0.5822
    0.0297
    0.0197
    0.0578
    1.2810

Загрузите выборочные данные.

S = load('reaction');
X = S.reactants;
y = S.rate;
beta0 = S.beta;

Подгонка модели Hougen-Watson к данным о скорости с помощью объединенной модели ошибки.

[beta,R,J,CovB,MSE,ErrorModelInfo] = nlinfit(X,y,@hougen,beta0,'ErrorModel','combined');
beta
beta = 5×1

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

Отобразите информацию о модели ошибки.

ErrorModelInfo
ErrorModelInfo = struct with fields:
              ErrorModel: 'combined'
         ErrorParameters: [0.1517 5.6783e-08]
           ErrorVariance: [function_handle]
                     MSE: 1.6245
          ScheffeSimPred: 6
          WeightFunction: 0
            FixedWeights: 0
    RobustWeightFunction: 0

Входные параметры

свернуть все

Переменные предиктора для нелинейной регрессионой функции, заданные в виде матрицы. Как правило, X - проект значений предиктора (независимая переменная) с одной строкой для каждого значения в Yи по одному столбцу для каждого предиктора. Однако X может быть любым массивом, который modelfun может принять.

Типы данных: single | double

Значения отклика (зависимая переменная) для подбора кривой нелинейной регрессионой функции, заданные как вектор с одинаковым числом строк, как X.

Типы данных: single | double

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

Например, чтобы задать hougen нелинейная регрессионная функция, используйте указатель на функцию @hougen.

Типы данных: function_handle

Начальные значения коэффициентов для алгоритма оценки методом наименьших квадратов, заданные как вектор.

Примечание

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

Типы данных: single | double

Опции алгоритма оценки, заданные как структура, которую вы создаете используя statset. Следующая statset параметры применимы к nlinfit.

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

Уровень выхода отображения во время оценки, заданный как один из 'off', 'iter', или 'final'. Если вы задаете 'iter', выход отображается при каждой итерации. Если вы задаете 'final', выход отображается после окончательной итерации.

Индикатор того, нужно ли проверять на наличие недопустимых значений, таких как NaN или Inf от целевой функции, заданной как 'on' или 'off'.

Максимальное количество итераций для алгоритма оценки, заданное в виде положительного целого числа. Итерации продолжаются до тех пор, пока оценки не окажутся в пределах допуска сходимости или максимального количества итераций, заданных MaxIter достигается.

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

Примечание

RobustWgtFun должно иметь значение [] когда вы используете веса наблюдений, W.

В следующей таблице описаны возможные векторы символов и строковые скаляры. Пусть r обозначают нормированные невязки и w обозначают устойчивые веса. Функция индикации I [x] равна 1, если выражение x true, и 0 в противном случае .

Функция весаУравнениеКонстанта настройки по умолчанию
'' (по умолчанию) Нет устойчивого подбора кривой
'andrews'

w=I[|r|<π]×sin(r)/r

1.339
'bisquare'

w=I[|r|<1]×(1r2)2

4.685
'cauchy'

w=1(1+r2)

2.385
'fair'

w=1(1+|r|)

1.400
'huber'

w=1max(1,|r|)

1.345
'logistic'

w=tanh(r)r

1.205
'talwar'

w=I[|r|<1]

2.795
'welsch'

w=exp{r2}

2.985

Можно также задать указатель на функцию, который принимает вектор нормированных невязок как вход и возвращает вектор устойчивых весов как выход. Если вы используете указатель на функцию, вы должны предоставить Tune константа.

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

Если для задания используется указатель на функцию RobustWgtFun, затем необходимо задать значение для Tune.

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

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'ErrorModel','proportional','ErrorParameters',0.5 задает пропорциональную модель ошибки с начальным значением 0,5 для оценки параметра ошибки

Форма термина ошибки, заданная как разделенная разделенными запятой парами, состоящая из 'ErrorModel' и 'constant', 'proportional', или 'combined' указывает модель ошибки. Каждая модель определяет ошибку при использовании стандартного среднего нуля и переменной отклонения модуля e в сочетании с независимыми компонентами: значение функции f, и один или два параметра a и b.

'constant' (по умолчанию)y=f+ae
'proportional'y=f+bfe
'combined'y=f+(a+b|f|)e

Единственная допустимая модель ошибки при использовании Weights является 'constant'.

Примечание

options.RobustWgtFun должно иметь значение [] при использовании модели ошибки, отличной от 'constant'.

Начальные оценки для параметров модели ошибки в выбранном ErrorModel, заданная как разделенная разделенными запятой парами, состоящая из 'ErrorParameters' и скалярное значение или двухэлементный вектор.

Модель ошибкиПараметрыЗначения по умолчанию
'constant' a1
'proportional'b1
'combined'a, b[1,1]

Для примера, если 'ErrorModel' имеет значение 'combined'можно задать начальное значение 1 для a и начальное значение 2 для b следующим образом.

Пример: 'ErrorParameters',[1,2]

Вы можете использовать только 'constant' модель ошибки при использовании Weights.

Примечание

options.RobustWgtFun должно иметь значение [] при использовании модели ошибки, отличной от 'constant'.

Типы данных: double | single

Веса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и вектор действительных положительных весов или указатель на функцию. Можно использовать веса наблюдений для снижения веса наблюдений, которые вы хотите иметь меньше влияния на подобранную модель.

  • Если W является вектором, тогда он должен быть того же размера, что и Y.

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

Примечание

options.RobustWgtFun должно иметь значение [] при использовании весов наблюдений.

Типы данных: double | single | function_handle

Выходные аргументы

свернуть все

Предполагаемые коэффициенты регрессии, возвращенные как вектор. Количество элементов в beta равен количеству элементов в beta0.

Давайте f(Xi,b) обозначить нелинейную функцию, заданную как modelfun, где xi являются предикторами для i наблюдений, i = 1,..., N иb являются коэффициентами регрессии. Вектор коэффициентов, возвращенных в beta минимизирует взвешенное уравнение методом наименьших квадратов,

i=1Nwi[yif(xi,b)]2.

Для невзвешенной нелинейной регрессии все условия веса равны 1.

Невязки для подобранной модели, возвращенные как вектор.

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

  • Если вы задаете модель ошибки, отличную от 'constant' использование аргумента пары "имя-значение" ErrorModel, тогда вы больше не можете интерпретировать R как модель подгонки невязок.

Якобиан нелинейной регрессионой модели, modelfun, возвращенная как N -by - p матрица, где N - количество наблюдений, а p - количество оцененных коэффициентов.

  • Если вы задаете веса наблюдений, используя аргумент пары "имя-значение" Weights, затем J - взвешенная функция модели якобиана.

  • Если вы задаете модель ошибки, отличную от 'constant' использование аргумента пары "имя-значение" ErrorModel, тогда вы больше не можете интерпретировать J как функцию модели якобиан.

Предполагаемая дисперсионно-ковариационная матрица для подгоняемых коэффициентов, beta, возвращенный как p -by - p матрица, где p - количество оцененных коэффициентов. Если модель Якобиана, J, имеет полный ранг столбца, затем CovB = inv(J'*J)*MSE, где MSE - средняя квадратичная невязка.

Средняя квадратичная невязка (MSE) подобранной модели, возвращенная в виде скалярного значения. MSE является оценкой отклонения термина ошибки. Если модель Якобиана, J, имеет полный ранг столбца, затем MSE = (R'*R)/(N-p), где N количество наблюдений и p - количество оцененных коэффициентов.

Информация о модели ошибки подгонки, возвращенная как структура со следующими полями:

ErrorModelВыбранная модель ошибки
ErrorParametersПредполагаемые параметры ошибки
ErrorVarianceУказатель на функцию, который принимает N -by p матрицу, X, и возвращает вектор N -by-1 отклонений ошибок с помощью предполагаемой модели ошибки
MSEСредняя квадратичная невязка
ScheffeSimPredПараметр Шеффе для одновременных интервалов предсказания при использовании предполагаемой модели ошибки
WeightFunctionЛогический с true значений если вы использовали пользовательскую функцию веса ранее в nlinfit
FixedWeightsЛогический с true значений если вы использовали фиксированные веса ранее в nlinfit
RobustWeightFunctionЛогический с true значений если вы использовали робастный подбор кривой ранее в nlinfit

Подробнее о

свернуть все

Взвешенные невязки

weighted residual является невязкой, умноженным на квадратный корень соответствующего веса наблюдения.

Учитывая оцененные коэффициенты регрессии, b, невязка для i наблюдения

ri=yif(xi,b),

где yi - наблюдаемая реакция и f(xi,b) - подобранная реакция в предикторах xi.

Когда вы подбираете взвешенную нелинейную регрессию с wi весов, i = 1,..., N, nlinfit возвращает взвешенные невязки,

ri*=wi(yif(xi,b)).

Взвешенная функция модели Якобиан

weighted model function Jacobian является нелинейной моделью Якобиана, умноженной на квадратный корень матрицы веса наблюдений.

Учитывая оцененные коэффициенты регрессии, b, предполагаемая модель якобиан, J,для нелинейной функции f(xi,b) имеет элементы

Jij=f(xi,b)bj,

где bj - j-й элемент b.

Когда вы подбираете взвешенную нелинейную регрессию с матрицей диагональных весов W,nlinfit возвращает взвешенную матрицу Якобия,

J*=W1/2J.

Совет

  • Чтобы создать оценки ошибок для предсказаний, используйте необязательные выходные аргументы R, J, CovB, или MSE как входы nlpredci.

  • Чтобы создать оценки ошибок на оценочных коэффициентах, beta, используйте необязательные выходные аргументы R, J, CovB, или MSE как входы nlparci.

  • Если вы используете опцию робастного фитинга, RobustWgtFun, вы должны использовать CovB- и может понадобиться MSE- как входы для nlpredci или nlparci чтобы убедиться, что доверительные интервалы должным образом учитывают устойчивую подгонку.

Алгоритмы

  • nlinfit лечит NaN значения в Y или modelfun(beta0,X) как отсутствующие данные и игнорирует соответствующие наблюдения.

  • Для некомбусной оценки, nlinfit использует алгоритм нелинейного метода наименьших квадратов Левенберга-Марквардта [1].

  • Для устойчивой оценки, nlinfit использует алгоритм итерационно-перевзвешенного метода наименьших квадратов ([2], [3]). При каждой итерации устойчивые веса пересчитываются на основе невязки каждого наблюдения от предыдущей итерации. Эти веса снижают выбросы веса, так что их влияние на подгонку уменьшается. Итерации продолжаются до тех пор, пока веса не сходятся.

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

Ссылки

[1] Seber, G. A. F., and C. J. Wild. Нелинейная регрессия. Hoboken, NJ: Wiley-Interscience, 2003.

[2] DuMouchel, W. H., and F. L. O'Brien. «Интеграция робастной опции в окружение нескольких регрессионных вычислений». Информатика и статистика: материалы 21-го симпозиума по интерфейсам. Александрия, VA: Американская статистическая ассоциация, 1989.

[3] Голландия, П. У. и Р. Э. Уэлш. Робастная регрессия с использованием итерационно переоцененных методом наименьших квадратов. Коммуникации в статистике: теория и методы, A6, 1977, с. 813-827.

Представлено до R2006a