cusum

Обнаружьте небольшие изменения в среднем значении с помощью совокупной суммы

Синтаксис

[iupper,ilower] = cusum(x)
[iupper,ilower] = cusum(x,climit,mshift,tmean,tdev)
[iupper,ilower] = cusum(___,'all')
[iupper,ilower,uppersum,lowersum] = cusum(___)
cusum(___)

Описание

пример

[iupper,ilower] = cusum(x) возвращает первый индекс верхних и более низких совокупных сумм x, которые дрейфовали вне пяти стандартных отклонений выше и ниже целевого среднего значения. Минимальный обнаруживаемый средний сдвиг установлен в одно стандартное отклонение. Целевые средние и стандартные отклонения оцениваются от первых 25 выборок x.

пример

[iupper,ilower] = cusum(x,climit,mshift,tmean,tdev) задает climit, количество стандартных отклонений, что верхним и более низким совокупным суммам позволяют дрейфовать от среднего значения. Это также задает минимальный обнаруживаемый средний сдвиг, целевое среднее значение и целевое стандартное отклонение.

[iupper,ilower] = cusum(___,'all') возвращает все индексы, в которых верхние и более низкие совокупные суммы превышают предел управления.

пример

[iupper,ilower,uppersum,lowersum] = cusum(___) также возвращает верхние и более низкие совокупные суммы.

cusum(___) без выходных аргументов строит верхние и более низкие совокупные суммы, нормированные к одному стандартному отклонению выше и ниже целевого среднего значения.

Примеры

свернуть все

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

rng('default')

rnds = rand(1,100);
trnd = linspace(0,1,100);

fnc = rnds + trnd;

plot(fnc)

Примените cusum к функции с помощью значений по умолчанию входных параметров.

cusum(fnc)

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

mfnc = mean(fnc(1:25));
sfnc = std(fnc(1:25));

cusum(fnc,5,1,mfnc,sfnc)

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

nnc = rnds - trnd;

cusum(nnc)

Сгенерируйте движение сходства сигнала об оси, которая становится нестабильной должный износиться. Добавьте белый Гауссов шум отклонения 1/9. Сбросьте генератор случайных чисел для восстанавливаемых результатов.

rng default

sz = 200;

dr = airy(2,linspace(-14.9371,1.2,sz));
rd = dr + sin(2*pi*(1:sz)/5) + randn(1,sz)/3;

Постройте растущий фоновый дрейф и получившийся сигнал.

plot(dr)
hold on
plot(rd,'.-')
hold off

Найдите среднее и стандартное отклонение, если дрейф не присутствует и нет никакого шума. Постройте идеальный бесшумный сигнал и его стабильное образование.

id = 0.3*sin(2*pi*(1:sz)/20);
st = id + sin(2*pi*(1:sz)/5);

mf = mean(st)
mf = -3.6463e-16
sf = std(st)
sf = 0.7401
plot(id)
hold on
plot(st,'.-')
hold off

Используйте диаграмму управления CUSUM, чтобы точно определить начало нестабильности. Примите, что система становится нестабильной, когда сигнал является тремя стандартными отклонениями вне своего идеального поведения. Задайте минимальный обнаруживаемый сдвиг одного стандартного отклонения.

cusum(rd,3,1,mf,sf)

Сделайте критерий нарушения более строгим путем увеличения минимального обнаруживаемого сдвига. Возвратите все экземпляры нежелательного дрейфа.

cusum(rd,3,1.2,mf,sf,'all')

Каждая дыра в гольфе имеет связанный "паритет", который указывает, что ожидаемое количество штрихов должно было снизить шар. Квалифицированные проигрыватели обычно завершают каждую дыру со многими штрихами очень близко к паритету. Необходимо проигрывать несколько дыр и позволить очкам накопиться, прежде чем явный победитель появится в соответствии.

Бен, Джен и Кен проигрывают полный раунд, который состоит из 18 дыр. Курс имеет выбор паритета 3, паритет 4 и паритет 5 дыр. В конце игры проигрыватели сводят в таблицу свои очки.

hole = 1:18;
par = [4 3 5 3 4 5 3 4 4 4 5 3 5 4 4 4 3 4];

nms = {'Ben';'Jen';'Ken'};

Ben = [4 3 4 2 3 5 2 3 3 4 3 2 3 3 3 3 2 3];
Jen = [4 3 4 3 4 4 3 4 4 4 5 3 4 4 5 5 3 3];
Ken = [4 3 4 3 5 5 4 4 4 4 5 3 5 4 5 4 3 5];

T = table(hole',par',Ben',Jen',Ken', ...
    'VariableNames',['hole';'par';nms])
T=18×5 table
    hole    par    Ben    Jen    Ken
    ____    ___    ___    ___    ___

      1      4      4      4      4 
      2      3      3      3      3 
      3      5      4      4      4 
      4      3      2      3      3 
      5      4      3      4      5 
      6      5      5      4      5 
      7      3      2      3      4 
      8      4      3      4      4 
      9      4      3      4      4 
     10      4      4      4      4 
     11      5      3      5      5 
     12      3      2      3      3 
     13      5      3      4      5 
     14      4      3      4      4 
     15      4      3      5      5 
     16      4      3      5      4 
      ⋮

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

[~,b,~,Bensum] = cusum(Ben-par,1,1e-4,0);
[~,j,~,Jensum] = cusum(Jen-par,1,1e-4,0);
[~,k,~,Kensum] = cusum(Ken-par,1,1e-4,0);

plot([Bensum;Jensum;Kensum]')
legend(nms,'Location','best')

Бен выигрывает раунд. Моделируйте их следующую игру путем добавления или вычитания штриха на дыру наугад.

Ben = Ben+randi(3,1,18)-2;
Jen = Jen+randi(3,1,18)-2;
Ken = Ken+randi(3,1,18)-2;

[~,b,~,Bensum] = cusum(Ben-par,1,1e-4,0);
[~,j,~,Jensum] = cusum(Jen-par,1,1e-4,0);
[~,k,~,Kensum] = cusum(Ken-par,1,1e-4,0);

plot([Bensum;Jensum;Kensum]')
legend(nms,'Location','best')

Входные параметры

свернуть все

Входной сигнал, заданный как вектор.

Пример: reshape(rand(100,1)*[-1 1],1,200)

Типы данных: single | double

Управляйте пределом, заданным как действительный скаляр, выраженный в стандартных отклонениях.

Типы данных: single | double

Минимальный средний сдвиг, чтобы обнаружить, заданный как действительный скаляр, выраженный в стандартных отклонениях.

Типы данных: single | double

Целевое среднее значение, заданное как действительный скаляр. Если tmean не задан, то он оценивается как среднее значение первых 25 выборок x.

Типы данных: single | double

Целевое стандартное отклонение, заданное как действительный скаляр. Если tdev не задан, то он оценивается как стандартное отклонение первых 25 выборок x.

Типы данных: single | double

Выходные аргументы

свернуть все

Из-под контроля укажите индексы, возвращенные как целочисленные скаляры или векторы. Если все выборки сигнала в заданном допуске, то cusum возвращает пустые аргументы iupper и ilower.

Верхние и более низкие совокупные суммы, возвращенные как векторы.

Больше о

свернуть все

Диаграмма управления CUSUM

Диаграмма управления CUSUM разработана, чтобы обнаружить небольшие инкрементные изменения в среднем значении процесса.

Учитывая последовательность x 1, x 2, x 3, …, xn с предполагаемым средним mx и оцененным стандартным отклонением σx, задает верхнее и более низкое совокупное использование сумм процесса:

  • Верхняя совокупная сумма

    Ui={0,i=1max (0,Ui1+ximx12nσx),i>1

  • Более низкая сумма

    Li={0,i=1min(0,Li1+ximx+12nσx),i>1

Переменная n, представленная в cusum аргументом mshift, является количеством стандартных отклонений от целевого среднего значения, tmean, которые делают сдвиг обнаруживаемым.

Процесс нарушает критерий CUSUM в демонстрационном xj, если это повинуется Uj > c σx или Lj < –cσx. Предел управления c представлен в cusum аргументом climit.

По умолчанию функция возвращает первое нарушение, которое она обнаруживает. Если вы задаете флаг 'all', функция возвращает каждое нарушение.

Смотрите также

|

Введенный в R2016a