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' для одновременных границ. См. ниже.

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

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

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

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

Предположим, что вы делаете новый y наблюдения n + 1 в x n + 1, так что

<reservedrangesplaceholder8> <reservedrangesplaceholder7> +1 (x <reservedrangesplaceholder5> +1) = p (x <reservedrangesplaceholder2> +1) + <reservedrangesplaceholder1> <reservedrangesplaceholder0> +1

По умолчанию интервал [<reservedrangesplaceholder11> <reservedrangesplaceholder10> +1 (x <reservedrangesplaceholder8> +1), <reservedrangesplaceholder7> <reservedrangesplaceholder6> +1 (x <reservedrangesplaceholder4> +1)] является 95%-й доверительной границей на <reservedrangesplaceholder3> <reservedrangesplaceholder2> +1 (x <reservedrangesplaceholder0> +1).

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

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

y n + 1 (x n + 1) (по умолчанию)

'off''curve'

p (x <reservedrangesplaceholder0> +1)

'on''observation'

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

'on''curve'

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

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

Примеры

свернуть все

Подгонка полинома к набору выборочных данных и оценка 95% интервалов предсказания и корней установленного полинома. Постройте график данных и оценок и отобразите подобранное полиномиальное выражение с помощью функции helper 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);

Постройте график данных, установленный полином и интервалы предсказания. Отобразите установленное полиномиальное выражение с помощью функции helper 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.

Функция помощника

The 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