предсказать

Класс: 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: 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

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

Примеры

развернуть все

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

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

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')

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

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

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)

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

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

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