Полиномиальные доверительные интервалы
Y = polyconf(p,X)
[Y,DELTA] = polyconf(p,X,S)
[Y,DELTA] = polyconf(p,X,S,param1
,val1
,param2
,val2
,...)
Y = polyconf(p,X)
оценивает полиномиальный p
в значениях в X
. p
является вектором коэффициентов в убывающих степенях.
[Y,DELTA] = polyconf(p,X,S)
берет выходные параметры p
и S
из polyfit
и генерирует 95% интервалов прогноза Y ± DELTA
для новых наблюдений в значениях в X
.
[Y,DELTA] = polyconf(p,X,S,
задает дополнительное название параметра / пары значения, выбранные из следующего списка.param1
,val1
,param2
,val2
,...)
Параметр | Значение |
---|---|
'alpha' | Значение между 0 и 1 определением доверительного уровня % |
'mu' | Двухэлементный вектор, содержащий центрирование и масштабные коэффициенты. При использовании этой опции |
'predopt' | Любой |
'simopt' | Любой |
'predopt'
и параметры 'simopt'
могут быть поняты с точки зрения следующих функций:
p (x) — неизвестная средняя функция оценивается подгонкой
l (x) — более низкая доверительная граница
u (x) — верхняя доверительная граница
Предположим, что вы делаете новое наблюдение y n +1 в x n +1, так, чтобы
y n +1 (x n +1) = p (x n +1) + ε n +1
По умолчанию, интервал [l n +1 (x n +1), u n +1 (x n +1)] является 95%-й доверительной границей на y n +1 (x n +1).
Следующие комбинации 'predopt'
и параметров 'simopt'
позволяют вам задавать другие границы.
'simopt' | 'predopt' | Ограниченная величина |
---|---|---|
'off' | 'observation' | y n +1 (x n +1) (значение по умолчанию) |
'off' | 'curve' | p (x n +1) |
'on' | 'observation' | y n +1 (x), для всего x |
'on' | 'curve' | p (x), для всего x |
В целом интервалы 'observation'
более широки, чем интервалы 'curve'
из-за дополнительной неуверенности в предсказании нового значения ответа (кривая плюс случайные ошибки). Аналогично, одновременные интервалы более широки, чем неодновременные интервалы из-за дополнительной неуверенности в ограничении значений для всех предикторов x.
Этот пример использует код от функции, взятой в качестве примера, документации polydemo
и вызывает функцию, взятую в качестве примера, документации polystr
, чтобы преобразовать вектор коэффициентов p
в текст для многочленного выражения, отображенного в заголовке фигуры. Это комбинирует функции polyfit
, polyval
, roots
и polyconf
, чтобы произвести отформатированное отображение данных с аппроксимацией полиномом.
Файлы документации Statistics and Machine Learning Toolbox™ в качестве примера расположены в подкаталоге \help\toolbox\stats\examples
вашей корневой папки MATLAB® (matlabroot
). Этот подкаталог не находится на пути MATLAB при установке. Чтобы использовать файлы в этом подкаталоге, или добавьте подкаталог в путь MATLAB (addpath
) или сделайте подкаталог вашей текущей рабочей папкой (cd
).
Отобразите моделируемые данные с квадратичным трендом, подходящим квадратичным полиномом, и 95% интервалов прогноза для новых наблюдений:
xdata = -5:5; ydata = xdata.^2 - 5*xdata - 3 + 5*randn(size(xdata)); degree = 2; % Degree of the fit alpha = 0.05; % Significance level % Compute the fit and return the structure used by % POLYCONF. [p,S] = polyfit(xdata,ydata,degree); % Compute the real roots and determine the extent of the % data. r = roots(p)'; % Roots as a row vector. real_r = r(imag(r) == 0); % Real roots. % Assure that the data are row vectors. xdata = reshape(xdata,1,length(xdata)); ydata = reshape(ydata,1,length(ydata)); % Extent of the data. mx = min([real_r,xdata]); Mx = max([real_r,xdata]); my = min([ydata,0]); My = max([ydata,0]); % Scale factors for plotting. sx = 0.05*(Mx-mx); sy = 0.05*(My-my); % Plot the data, the fit, and the roots. hdata = plot(xdata,ydata,'md','MarkerSize',5,... 'LineWidth',2); hold on xfit = mx-sx:0.01:Mx+sx; yfit = polyval(p,xfit); hfit = plot(xfit,yfit,'b-','LineWidth',2); hroots = plot(real_r,zeros(size(real_r)),... 'bo','MarkerSize',5,... 'LineWidth',2,... 'MarkerFaceColor','b'); grid on plot(xfit,zeros(size(xfit)),'k-','LineWidth',2) axis([mx-sx Mx+sx my-sy My+sy]) % Add prediction intervals to the plot. [Y,DELTA] = polyconf(p,xfit,S,'alpha',alpha); hconf = plot(xfit,Y+DELTA,'b--'); plot(xfit,Y-DELTA,'b--') % Display the polynomial fit and the real roots. approx_p = round(100*p)/100; % Round for display. htitle = title(['{\bf Fit: }',... texlabel(polystr(approx_p))]); set(htitle,'Color','b') approx_real_r = round(100*real_r)/100; % Round for display. hxlabel = xlabel(['{\bf Real Roots: }',... num2str(approx_real_r)]); set(hxlabel,'Color','b') % Add a legend. legend([hdata,hfit,hroots,hconf],... 'Data','Fit','Real Roots of Fit',... '95% Prediction Intervals')