exponenta event banner

предсказать

Класс: нелинейная модель

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

Синтаксис

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;

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

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

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