exponenta event banner

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;

Подгоните модель Хугена-Ватсона к данным скорости, используя начальные значения в 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;

Подгоните модель Хугена-Ватсона к данным скорости, используя начальные значения в 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+b2⋅exp{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;

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

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;

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

[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Параметр Scheffé для интервалов одновременного прогнозирования при использовании расчетной модели ошибок
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 все еще пытается построить доверительные интервалы для любых оцениваемых точек прогнозирования.

Например, предположим, что линейная функция 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] Лейн, T.P. и W. H. DuMouchel. «Одновременные доверительные интервалы в множественной регрессии». Американский статистик. Том 48, № 4, 1994, стр. 315-321.

[2] Себер, G.A.F. и C. J. Wild. Нелинейная регрессия. Хобокен, Нью-Джерси: Wiley-Interscience, 2003.

См. также

| |

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