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)

Figure contains an axes object. The axes object 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 имя аргумента и 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