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