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 mustBeNumeric.

Аргументы name-value

Задайте дополнительные разделенные запятой пары 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

Доверительные интервалы, матрица 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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)

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);
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.