nlpredci

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

Синтаксис

[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Covar',CovB)
[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Covar',CovB,Name,Value)
[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Jacobian',J)
[Ypred,delta] = nlpredci(modelfun,X,beta,R,'Jacobian',J,Name,Value)

Описание

пример

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

Загрузка демонстрационных данных.

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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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 все еще пытается создать доверительные интервалы для любых точек прогноза 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] Маршрут, T. P. и В. Х. Думучель. “Одновременные Доверительные интервалы во Множественной регрессии”. Американский Статистик. Издание 48, № 4, 1994, стр 315–321.

[2] Seber, G. A. F. и C. J. Дикий. Нелинейная регрессия. Хобокен, NJ: Wiley-межнаука, 2003.

Смотрите также

| |

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