이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

cusum

누적 합을 사용하여 평균의 미세한 변화 감지

설명

예제

[iupper,ilower] = cusum(x)는 목표 평균에서 위와 아래로 5 표준편차를 벗어나게 변동한, x의 상부 및 하부 누적 합에 대한 첫 번째 인덱스를 반환합니다. 감지 가능한 최소 평균 이동이 1 표준편차로 설정됩니다. 목표 평균과 표준편차는 x의 처음 25개 샘플에서 추정됩니다.

예제

[iupper,ilower] = cusum(x,climit,mshift,tmean,tdev)는 허용 가능한 표준편차 개수, 즉 상부 및 하부 누적 합이 평균에서 벗어날 수 있는 표준편차 개수인 climit를 지정합니다. 또한 감지 가능한 최소 평균 이동, 목표 평균, 목표 표준편차도 지정합니다.

[iupper,ilower] = cusum(___,'all')은 상부 및 하부 누적 합이 관리 한계를 초과하는 모든 인덱스를 반환합니다.

예제

[iupper,ilower,uppersum,lowersum] = cusum(___)은 상부 및 하부 누적 합도 반환합니다.

cusum(___)에 출력 인수를 지정하지 않으면 목표 평균 위와 아래의 1 표준편차로 정규화된 상부 및 하부 누적 합을 플로팅합니다.

예제

모두 축소

선형 추세를 갖고 100개 샘플로 구성된 랜덤 신호를 생성하고 플로팅합니다. 재현 가능한 결과를 얻기 위해 난수 생성기를 재설정합니다.

rng('default')

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

fnc = rnds + trnd;

plot(fnc)

입력 인수의 디폴트 값을 사용하여 cusum을 함수에 적용합니다.

cusum(fnc)

처음 25개 샘플의 평균과 표준편차를 계산합니다. 이러한 수치를 목표 평균과 목표 표준편차로 사용하여 cusum을 적용합니다. 누적 합이 목표 평균에서 5 표준편차를 벗어나게 변동하는 점을 강조 표시합니다. 감지 가능한 최소 평균 이동을 1 표준편차로 설정합니다.

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 관리도를 사용하여 불안정성이 시작되는 지점을 찾아냅니다. 신호가 이상적인 동작에서 3 표준편차를 벗어난 경우 시스템이 불안정한 것으로 가정합니다. 감지 가능한 최소 이동을 1 표준편차로 지정합니다.

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

감지 가능한 최소 이동을 증가시켜 위반 기준을 더 엄격하게 합니다. 원치 않는 변동이 발생한 모든 경우를 반환합니다.

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

골프장의 각 홀에는 공을 넣는 데 필요한 타수를 나타내는 "par"(파)가 있습니다. 숙련된 선수는 대개 해당 파에 매우 근접한 타수를 기록하며 각 홀을 끝냅니다. 시합에서 확실한 우승자로 부상하려면 여러 홀에서 경기를 하고 점수를 누적해야 합니다.

Ben, Jen, Ken이 18홀로 구성된 전체 1라운드 경기를 합니다. 코스는 par-3, par-4, par-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 
      ⋮

라운드가 끝났을 때 하부 누적 합이 가장 낮은 par로 이동한 선수가 우승하게 됩니다. 우승자를 결정하기 위해 세 선수의 합을 계산합니다. 임계값을 작게 설정하여 모든 평균 이동을 감지 가능하게 합니다.

[~,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 = 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

목표 평균으로, 실수형 스칼라로 지정됩니다. 지정하지 않을 경우 tmeanx의 처음 25개 샘플의 평균으로 추정됩니다.

데이터형: single | double

목표 표준편차로, 실수형 스칼라로 지정됩니다. 지정하지 않을 경우 tdevx의 처음 25개 샘플의 표준편차로 추정됩니다.

데이터형: single | double

출력 인수

모두 축소

이탈 점 인덱스로, 정수 스칼라 또는 정수 벡터로 반환됩니다. 모든 신호 샘플이 지정된 허용오차 내에 있는 경우 cusum은 빈 iupper 인수와 ilower 인수를 반환합니다.

상부 및 하부 누적 합으로, 벡터로 반환됩니다.

세부 정보

모두 축소

CUSUM 관리도

CUSUM 관리도는 공정 평균의 점진적 변화를 감지하도록 설계되었습니다.

수열 x1, x2, x3, …, xn과 함께 추정 평균 mx와 추정 표준편차 σx가 주어진 경우 다음을 사용하여 상부 및 하부 누적 공정 합을 정의합니다.

  • 상부 누적 합

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

  • 하부 누적 합

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

cusum에서 mshift 인수로 표현되는 변수 n은 이동을 감지할 수 있는, 목표 평균 tmean에서 벗어난 표준편차 개수입니다.

공정이 Uj > cσx 또는 Lj < –cσx를 따르는 경우 이 공정은 샘플 xj에서 CUSUM 기준을 위반합니다. 관리 한계 c는 cusum에서 climit 인수로 표현됩니다.

기본적으로 함수는 처음 감지한 위반을 반환합니다. 'all' 플래그를 지정하면 함수는 모든 위반을 반환합니다.

참고 항목

|

R2016a에 개발됨