predict

Класс: NonLinearModel

Предсказать ответ нелинейной регрессионой модели

Синтаксис

ypred = predict(mdl,Xnew)
[ypred,yci] = predict(mdl,Xnew)
[ypred,yci] = predict(mdl,Xnew,Name,Value)

Описание

ypred = predict(mdl,Xnew) возвращает предсказанный ответ mdl нелинейная регрессионная модель к точкам в Xnew.

[ypred,yci] = predict(mdl,Xnew) возвращает доверительные интервалы для истинных средних откликов.

[ypred,yci] = predict(mdl,Xnew,Name,Value) предсказывает ответы с дополнительными опциями, заданными одним или несколькими Name,Value аргументы в виде пар.

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

mdl

Нелинейная регрессионая модель, построенная fitnlm.

Xnew

Точки, в которых mdl предсказывает ответы.

  • Если Xnew является таблицей или массивом набора данных, он должен содержать имена предикторов в mdl.

  • Если Xnew - числовая матрица, она должна иметь то же количество переменных (столбцов), что и для создания mdl. Кроме того, все переменные, используемые при создании mdl должен быть числовым.

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

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

'Alpha'

Положительная скалярная величина от 0 на 1. Доверительный уровень yci 100 ( 1 - alpha)%.

По умолчанию: 0.05, что означает 95% доверительный интервал.

'Prediction'

Тип предсказания:

  • 'curve'predict предсказывает доверительные границы для установленных средних значений.

  • 'observation'predict предсказывает доверительные границы для новых наблюдений. Это приводит к более широким границам, потому что ошибка в новом наблюдении равна ошибке в оцененном среднем значении плюс изменчивость наблюдения от истинного среднего.

Для получения дополнительной информации см. polyconf.

По умолчанию: 'curve'

'Simultaneous'

Логическое значение, определяющее, являются ли доверительные границы для всех значений предиктора одновременно (true), или удерживать для каждого отдельного предикторного значения (false). Одновременные границы шире, чем отдельные границы, потому что более жестко требовать, чтобы вся кривая была в границах, чем требовать, чтобы кривая в одном предикторе значения быть в границах.

Для получения дополнительной информации см. polyconf.

По умолчанию: false

'Weights'

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

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

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

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

По умолчанию: Без весов

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

ypred

Предсказанные средние значения в Xnew. ypred - тот же размер, что и каждый компонент Xnew.

yci

Доверительные интервалы, двухколоночная матрица с каждой строкой, обеспечивающей один интервал. Значение доверительного интервала зависит от настроек пар "имя-значение".

Примеры

расширить все

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

Создайте экспоненциальную модель пробега автомобиля как функции веса от carsmall данные. Масштабируйте вес в 1000 раз, чтобы все переменные были примерно равны в размере.

load carsmall
X = Weight;
y = MPG;
modelfun = 'y ~ b1 + b2*exp(-b3*x/1000)';
beta0 = [1 1 1];
mdl = fitnlm(X,y,modelfun,beta0);

Создайте предсказанные отклики на данные.

Xnew = X;
ypred = predict(mdl,Xnew);

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

plot(X,y,'o',X,ypred,'x')
legend('Data','Predicted')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Data, Predicted.

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

Создайте экспоненциальную модель пробега автомобиля как функции веса от carsmall данные. Масштабируйте вес в 1000 раз, чтобы все переменные были примерно равны в размере.

load carsmall
X = Weight;
y = MPG;
modelfun = 'y ~ b1 + b2*exp(-b3*x/1000)';
beta0 = [1 1 1];
mdl = fitnlm(X,y,modelfun,beta0);

Создайте предсказанные отклики на наименьшие, средние и самые большие точки данных.

Xnew = [min(X);mean(X);max(X)];
[ypred,yci] = predict(mdl,Xnew)
ypred = 3×1

   34.9469
   22.6868
   10.0617

yci = 3×2

   32.5212   37.3726
   21.4061   23.9674
    7.0148   13.1086

Сгенерируйте выборочные данные из нелинейной регрессионой модели

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';
b0 = [2;2;2];
mdl = fitnlm(x,y,modelfun,b0,'Options',opts);

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

xrange = [min(x):.01:max(x)]';
[ypred,yci] = predict(mdl,xrange,'Simultaneous',true);

figure()
plot(x,y,'ko') % observed data
hold on
plot(xrange,ypred,'k','LineWidth',2)
plot(xrange,yci','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);
mdl = fitnlm(X,y,@hougen,beta0,'Weights',weights);

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

[ypred,yci] = predict(mdl,[100,100,100],'Prediction','observation', ...
    'Weights',weights)
ypred = 1.8149
yci = 1×2

    1.5264    2.1033

Совет

  • Для предсказаний с добавленным шумом используйте random.

  • Для получения синтаксиса, который может быть легче использовать с моделями, созданными из таблиц или массивов наборов данных, попробуйте feval.

Ссылки

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

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

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