exponenta event banner

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;

Подгоните модель Хугена-Ватсона к данным скорости, используя начальные значения в beta0.

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

    1.2526
    0.0628
    0.0400
    0.1124
    1.1914

Создайте данные выборки из модели нелинейной регрессии y=b1+b2⋅exp {- 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]';

Подгоните модель Хугена-Ватсона к данным скорости с использованием указанных весов наблюдения.

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

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

[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;

Поместите модель Хугена-Ватсона в данные скорости с использованием комбинированной модели ошибок.

[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] × (1 − r2) 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[yi−f (xi, b)] 2.

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

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

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

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

Якобиан нелинейной регрессионной модели, modelfun, возвращается в виде матрицы N-за-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Параметр Scheffé для интервалов одновременного прогнозирования при использовании расчетной модели ошибок
WeightFunctionЛогический со значением true если ранее использовалась пользовательская функция веса в nlinfit
FixedWeightsЛогический со значением true если фиксированные веса использовались ранее в nlinfit
RobustWeightFunctionЛогический со значением true если ранее использовался надежный фитинг в nlinfit

Подробнее

свернуть все

Взвешенные остатки

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

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

ri = yi f (xi, b),

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

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

ri * = wi (yi f (xi, b)).

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

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

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

Jij=∂f (xi, b) ∂bj,

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

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

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] Себер, G.A.F. и C. J. Wild. Нелинейная регрессия. Хобокен, Нью-Джерси: Wiley-Interscience, 2003.

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

[3] Холланд, П. У. и Р. Э. Уэлш. «Надежная регрессия с использованием итеративно повторно взвешенных наименьших квадратов». Сообщения в статистике: теория и методы, A6, 1977, стр. 813-827.

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