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+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 имя аргумента и 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 isnan потому что первая строка в 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