exponenta event banner

polyconf

Доверительные интервалы полинома

Синтаксис

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, определяющее доверительный уровень 100*(1-alpha)%. Значение по умолчанию: 0.05.

'mu'

Двухэлементный вектор, содержащий параметры центрирования и масштабирования. С помощью этой опции polyconf использование (X-mu(1))/mu(2) вместо X.

'predopt'

Также 'observation' (по умолчанию) для вычисления интервалов прогнозирования для новых наблюдений при значениях в X, или 'curve' для вычисления доверительных интервалов для аппроксимации, оцениваемой по значениям в X. См. ниже.

'simopt'

Также 'off' (по умолчанию) для несимволических границ, или 'on' для одновременных границ. См. ниже.

'predopt' и 'simopt' параметры могут быть поняты с точки зрения следующих функций:

  • p (x) - неизвестная средняя функция, оцененная по посадке

  • l (x) - нижняя доверительная граница

  • u (x) - верхняя доверительная граница

Предположим, вы делаете новое наблюдение yn + 1 при xn + 1, так что

yn + 1 (xn + 1) = p (xn + 1) + αn + 1

По умолчанию интервал [ln + 1 (xn + 1), un + 1 (xn + 1)] является 95% доверительной границей для yn + 1 (xn + 1).

Следующие комбинации 'predopt' и 'simopt' параметры позволяют задать другие границы.

'simopt''predopt'Ограниченная величина
'off''observation'

yn + 1 (xn + 1) (по умолчанию)

'off''curve'

p (xn + 1)

'on''observation'

yn + 1 (x), для всех x

'on''curve'

p (x), для всех x

В общем, 'observation' интервалы шире, чем 'curve' интервалы, из-за дополнительной неопределенности прогнозирования нового значения отклика (кривая плюс случайные ошибки). Аналогично, одновременные интервалы шире, чем несимметричные интервалы, из-за дополнительной неопределенности ограничивающих значений для всех предикторов x.

Примеры

свернуть все

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

Создание выборочных точек данных (x,y) с квадратичным трендом.

rng('default') % For reproducibility
x = -5:5;
y = x.^2 - 20*x - 3 + 5*randn(size(x));

Подгонка многочлена второй степени к данным с помощью polyfit.

degree = 2; % Degree of the fit
[p,S] = polyfit(x,y,degree);

Оценка 95% интервалов прогнозирования с помощью polyconf.

alpha = 0.05; % Significance level
[yfit,delta] = polyconf(p,x,S,'alpha',alpha);

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

plot(x,y,'b+')
hold on
plot(x,yfit,'g-')
plot(x,yfit-delta,'r--',x,yfit+delta,'r--')
legend('Data','Fit','95% Prediction Intervals')
title(['Fit: ',texlabel(polystr(round(p,2)))])
hold off

Figure contains an axes. The axes with title Fit: {1.12} {x}^{2} - {19.54} {x} - {2} contains 4 objects of type line. These objects represent Data, Fit, 95% Prediction Intervals.

Найти корни многочлена p.

r = roots(p)
r = 2×1

   17.5152
   -0.1017

Поскольку корни - это реальные значения, их также можно построить. Оцените соответствующие значения и интервалы прогнозирования для интервала x, который включает корни. Затем постройте график корней и оценок.

if isreal(r)
    xmin = min([r(:);x(:)]);
    xrange = range([r(:);x(:)]);
    xExtended = linspace(xmin - 0.1*xrange, xmin + 1.1*xrange,1000);
    [yfitExtended,deltaExtended] = polyconf(p,xExtended,S,'alpha',alpha);

    plot(x,y,'b+')
    hold on
    plot(xExtended,yfitExtended,'g-')
    plot(r,zeros(size(r)),'ko')
    plot(xExtended,yfitExtended-deltaExtended,'r--')
    plot(xExtended,yfitExtended+deltaExtended,'r--')
    plot(xExtended,zeros(size(xExtended)),'k-')
    legend('Data','Fit','Roots of Fit','95% Prediction Intervals')
    title(['Fit: ',texlabel(polystr(round(p,2)))])
    axis tight
    hold off
end

Figure contains an axes. The axes with title Fit: {1.12} {x}^{2} - {19.54} {x} - {2} contains 6 objects of type line. These objects represent Data, Fit, Roots of Fit, 95% Prediction Intervals.

Кроме того, можно использовать polytool для интерактивной полиномиальной подгонки.

polytool(x,y,degree,alpha)

Figure Prediction Plot of Quadratic Model contains an axes and other objects of type uimenu, uicontrol. The axes contains 6 objects of type line.

Вспомогательная функция

polystr.m файл определяет polystr функция помощника.

type polystr.m % Display contents of polystr.m file
function s = polystr(p)
% POLYSTR Converts a vector of polynomial coefficients to a character string.
% S is the string representation of P.

if all(p == 0) % All coefficients are 0.
    s = '0';
else
    d = length(p) - 1; % Degree of polynomial.
    s = []; % Initialize s.
    for a = p
        if a ~= 0 % Coefficient is nonzero.
            if ~isempty(s) % String is not empty.
                if a > 0
                    s = [s ' + ']; % Add next term.
                else
                    s = [s ' - ']; % Subtract next term.
                    a = -a; % Value to subtract.
                end
            end
            if a ~= 1 || d == 0 % Add coefficient if it is ~=1 or polynomial is constant.
                s = [s num2str(a)];
                if d > 0 % For nonconstant polynomials, add *.
                    s = [s '*'];
                end
            end
            if d >= 2 % For terms of degree > 1, add power of x.
                s = [s 'x^' int2str(d)];
            elseif d == 1 % No power on x term.
                s = [s 'x'];
            end
        end
        d = d - 1; % Increment loop: Add term of next lowest degree.
    end
end
end

См. также

| |

Представлен до R2006a