nlpredci

Нелинейная регрессия предсказания доверия интервалы

Описание

пример

[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Covar',CovB) возвращает предсказания, Ypred, и 95% доверительных интервалов, половинные ширины, delta, для нелинейной регрессионой модели modelfun при входных значениях X. Перед вызовом nlpredci, использование nlinfit для подгонки modelfun и получите оцененные коэффициенты, beta, невязки, R, и дисперсионно-ковариационная матрица, CovB.

пример

[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Covar',CovB,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение".

пример

[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Jacobian',J) возвращает предсказания, Ypred, и 95% доверительных интервалов, половинные ширины, delta, для нелинейной регрессионой модели modelfun при входных значениях X. Перед вызовом nlpredci, использование nlinfit для подгонки modelfun и получите оцененные коэффициенты, beta, невязки, R, и Якобиан, J.

Если вы используете устойчивую опцию с nlinfit, тогда вы должны использовать Covar синтаксис, а не Jacobian синтаксис. Дисперсионно-ковариационная матрица, CovB, требуется, чтобы правильно принять во внимание прочный подбор кривой.

пример

[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Jacobian',J,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение".

Примеры

свернуть все

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

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

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

[beta,R,J] = nlinfit(X,y,@hougen,beta0);

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

[ypred,delta] = nlpredci(@hougen,mean(X),beta,R,'Jacobian',J)
ypred = 5.4622
delta = 0.1921

Вычислите 95% доверительный интервал для значения кривой.

[ypred-delta,ypred+delta]
ans = 1×2

    5.2702    5.6543

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

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

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

[beta,R,J] = nlinfit(X,y,@hougen,beta0);

Получите прогнозируемый ответ и 95% -ную половинную ширину интервала предсказания для нового наблюдения с уровнями реагентов [100,100,100].

[ypred,delta] = nlpredci(@hougen,[100,100,100],beta,R,'Jacobian',J,...
                         'PredOpt','observation')
ypred = 1.8346
delta = 0.5101

Вычислите 95% интервал предсказания для нового наблюдения.

[ypred-delta,ypred+delta]
ans = 1×2

    1.3245    2.3447

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

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.5,100,1);

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

opts = statset('nlinfit');
opts.RobustWgtFun = 'bisquare';
beta0 = [2;2;2];
[beta,R,J,CovB,MSE] = nlinfit(x,y,modelfun,beta0,opts);

Постройте график подобранной регрессионной модели и одновременных 95% доверительных границ.

xrange = min(x):.01:max(x);
[ypred,delta] = nlpredci(modelfun,xrange,beta,R,'Covar',CovB,...
                         'MSE',MSE,'SimOpt','on');
lower = ypred - delta;
upper = ypred + delta;

figure()
plot(x,y,'ko') % observed data
hold on
plot(xrange,ypred,'k','LineWidth',2)
plot(xrange,[lower;upper],'r--','LineWidth',1.5)

Figure contains an axes. The axes contains 4 objects of type line.

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

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

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

a = 1; b = 1;
weights = @(yhat) 1./((a + b*abs(yhat)).^2);
[beta,R,J,CovB] = nlinfit(X,y,@hougen,beta0,'Weights',weights);

Вычислите 95% -ный интервал предсказания для нового наблюдения с уровнями реагентов [100,100,100] использование функции веса наблюдения.

[ypred,delta] = nlpredci(@hougen,[100,100,100],beta,R,'Jacobian',J,...
                         'PredOpt','observation','Weights',weights);
[ypred-delta,ypred+delta]
ans = 1×2

    1.5264    2.1033

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

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

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

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

Вычислите 95% -ный интервал предсказания для нового наблюдения с уровнями реагентов [100,100,100] использование модели аппроксимации отклонений ошибок.

[ypred,delta] = nlpredci(@hougen,[100,100,100],beta,R,'Jacobian',J,...
                         'PredOpt','observation','ErrorModelInfo',S);
[ypred-delta,ypred+delta]
ans = 1×2

    1.3245    2.3447

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

свернуть все

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

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

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

Входные значения для предсказаний, заданные как матрица. nlpredci делает предсказание для ковариат в каждой строке X. Должен быть столбец в X для каждого коэффициента в модели.

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

Предполагаемые коэффициенты регрессии, заданные как вектор подобранных коэффициентов, возвращенных предыдущим вызовом nlinfit.

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

Невязки для установленного modelfun, заданный как вектор невязок, возвращенных предыдущим вызовом nlinfit.

Предполагаемая дисперсионно-ковариационная матрица для подгоняемых коэффициентов, beta, заданная как дисперсионно-ковариационная матрица, возвращенная предыдущим вызовом в nlinfit.

Предполагаемый якобиан нелинейной регрессионой модели, modelfun, заданная как якобианская матрица, возвращенная предыдущим вызовом в nlinfit.

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

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

Пример: 'Alpha',0.1,'PredOpt','observation' задает 90% интервалов предсказания для новых наблюдений.

Уровень значимости для интервала доверия, заданный как разделенная запятой пара, состоящий из 'Alpha' и скалярное значение в области значений (0,1). Если Alpha имеет значение α, затем nlpredci возвращает интервалы с доверительным уровнем 100 × (1- α)%.

Уровень доверия по умолчанию является 95% (α = 0,05).

Пример: 'Alpha',0.1

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

Информация о подгонке модели ошибки, заданная как разделенная разделенными запятой парами, состоящая из 'ErrorModelInfo' и структуру, возвращенную предыдущим вызовом в nlinfit.

ErrorModelInfo влияет на возвращенный интервал предсказания только тогда, когда PredOpt имеет значение 'observation'. Если вы не используете ErrorModelInfo, затем nlpredci принимает, что модель отклонения ошибок 'constant'.

Структура модели ошибки, возвращенная nlinfit имеет следующие поля:

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

Средняя квадратичная невязка (MSE) для подобранной нелинейной регрессионой модели, заданная как разделенная разделенными запятой парами, состоящая из 'MSE' и значение MSE, возвращенное предыдущим вызовом nlinfit.

Если вы используете устойчивую опцию с nlinfitЗатем необходимо задать MSE при прогнозировании новых наблюдений, чтобы правильно учитывать устойчивый подбор кривой. Если вы не задаете MSE, то nlpredci вычисляет MSE из невязок, R, и не принимает во внимание прочный подбор кривой.

Для примера, если mse - значение MSE, возвращаемое nlinfit, тогда можно задать 'MSE',mse.

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

Интервал предсказания для вычисления, заданный как разделенная разделенными запятой парами, состоящая из 'PredOpt' и любой из них 'curve' или 'observation'.

  • Если вы задаете значение 'curve', затем nlpredci возвращает доверительные интервалы для предполагаемой кривой (значение функции) при наблюдениях X.

  • Если вы задаете значение 'observation', затем nlpredci возвращает интервалы предсказания для новых наблюдений в X.

Если вы задаете 'observation' после использования устойчивой опции с nlinfit, затем необходимо также задать значение для MSE для обеспечения устойчивой оценки средней квадратичной невязки.

Пример: 'PredOpt','observation'

Индикатор для определения одновременных границ, заданный как разделенная разделенными запятой парами, состоящая из 'SimOpt' и любой из них 'off' или 'on'. Используйте значение 'off' для вычисления несовпадающих границ и 'on' для одновременных границ.

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

  • Если вы задаете вектор весов, то он должен иметь то же количество элементов, что и количество наблюдений (строк) в X.

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

Заданные веса, W, nlpredci оценивает отклонение ошибок при наблюдении i по mse*(1/W(i)), где mse - средняя квадратичная невязка, заданное с помощью MSE.

Пример: 'Weights',@WFun

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

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

свернуть все

Предсказанные отклики, возвращенные как вектор с одинаковым числом строк, как X.

Половинные ширины доверительного интервала, возвращенные как вектор с одинаковым числом строк, как X. По умолчанию delta содержит половинные ширины для несовпадающих 95% доверительных интервалов для modelfun при наблюдениях в X. Можно вычислить нижнюю и верхнюю границы доверительных интервалов следующим Ypred-delta и Ypred+delta, соответственно.

Если 'PredOpt' имеет значение 'observation', затем delta содержит половинные ширины для интервалов предсказания новых наблюдений в значениях в X.

Подробнее о

свернуть все

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

Когда предполагаемая модель Якобяна не имеет полного ранга, тогда может оказаться невозможным создать разумные доверительные интервалы во всех точках предсказания. В этом случае nlpredci все еще пытается создать доверительные интервалы для любых estimable точек предсказания.

Для примера предположим, что вы подбираете линейную функцию f(xi,β)=β1xi1+β2xi2+β3xi3 в точках в матрице проекта

X=(110110110101101101).

Предполагаемый якобиан по значениям в X - сама матрица проекта, J=X. Таким образом, якобиан не имеет полного ранга:

rng('default') % For reproducibility
y = randn(6,1);

linfun = @(b,x) x*b;
beta0 = [1;1;1];
X = [repmat([1 1 0],3,1); repmat([1 0 1],3,1)];   

[beta,R,J]  = nlinfit(X,y,linfun,beta0);
Warning: The Jacobian at the solution is ill-conditioned, and
some model parameters may not be estimated well (they are not
identifiable).  Use caution in making predictions. 
> In nlinfit at 283 

В этом примере nlpredci можно вычислить интервалы предсказания только в точках, которые удовлетворяют линейной зависимости

xi1=xi2+xi3.

Если вы пытаетесь вычислить доверительные интервалы для предсказаний в неопознанных точках, nlpredci возвращает NaN для соответствующего интервала половинных ширин:

xpred = [1 1 1;0 1 -1;2 1 1];
[ypred,delta] = nlpredci(linfun,xpred,beta,R,'Jacobian',J)
ypred =

   -0.0035
    0.0798
   -0.0047


delta =

       NaN
    3.8102
    3.8102
Здесь первый элемент delta является NaN потому что первая строка в xpred не удовлетворяет необходимой линейной зависимости и, следовательно, не является оценочной контрастностью.

Совет

  • Чтобы вычислить доверительные интервалы для сложных параметров или данных, необходимо разделить задачу на ее реальные и мнимые части. При вызове nlinfit:

    1. Задайте вектор параметра beta как конкатенация действительной и мнимой частей исходного вектора параметра.

    2. Конкатенируйте действительную и мнимую части вектора отклика Y как один вектор.

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

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

Алгоритмы

  • nlpredci лечит NaN значения в невязках, Rили якобиан, J, как отсутствующие значения и игнорирует соответствующие наблюдения.

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

Ссылки

[1] Переулок, Т. П. и В. Х. Дюмушель. «Одновременные доверительные интервалы в множественных регрессиях». Американский статистик. Том 48, № 4, 1994, стр. 315-321.

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

См. также

| |

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