Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

cusum

Detectar pequeños cambios en la media utilizando la suma acumulada

Descripción

ejemplo

[iupper,ilower] = cusum(x) devuelve el primer índice de las sumas acumuladas superior e inferior de las que han ido más allá de cinco desviaciones estándar por encima y por debajo de una media objetivo.x El desplazamiento medio mínimo detectable se establece en una desviación estándar. La media objetivo y las desviaciones estándar se estiman a partir de las primeras 25 muestras de .x

ejemplo

[iupper,ilower] = cusum(x,climit,mshift,tmean,tdev) especifica , el número de desviaciones estándar que las sumas acumuladas superior e inferior pueden desviarse de la media.climit También especifica el desplazamiento medio mínimo detectable, la media de destino y la desviación estándar de destino.

[iupper,ilower] = cusum(___,'all') devuelve todos los índices en los que las sumas acumuladas superior e inferior superan el límite de control.

ejemplo

[iupper,ilower,uppersum,lowersum] = cusum(___) también devuelve las sumas acumuladas superior e inferior.

cusum(___) sin argumentos de salida traza las sumas acumulativas superior e inferior normalizadas a una desviación estándar por encima y por debajo de la media objetivo.

Ejemplos

contraer todo

Genere y trace una señal aleatoria de 100 muestras con una tendencia lineal. Restablezca el generador de números aleatorios para obtener resultados reproducibles.

rng('default')  rnds = rand(1,100); trnd = linspace(0,1,100);  fnc = rnds + trnd;  plot(fnc)

Aplicar a la función utilizando los valores predeterminados de los argumentos de entrada.cusum

cusum(fnc)

Calcular la media y la desviación estándar de las primeras 25 muestras. Aplicar utilizando estos números como la media de destino y la desviación estándar de destino.cusum Resalte el punto en el que la suma acumulada desvía más de cinco desviaciones estándar más allá de la media objetivo. Establezca el desplazamiento medio mínimo detectable en una desviación estándar.

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

Repita el cálculo utilizando una tendencia lineal negativa.

nnc = rnds - trnd;  cusum(nnc)

Generar una señal que se asemeja al movimiento sobre un eje que se vuelve inestable debido al desgaste. Añadir ruido gaussiano blanco de varianza 1/9. Restablezca el generador de números aleatorios para obtener resultados reproducibles.

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;

Trazar la creciente deriva de fondo y la señal resultante.

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

Encuentre la media y la desviación estándar si la deriva no está presente y no hay ruido. Trazar la señal sin ruido ideal y su fondo estable.

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

Utilice el gráfico de control CUSUM para identificar el inicio de la inestabilidad. Supongamos que el sistema se vuelve inestable cuando la señal es tres desviaciones estándar más allá de su comportamiento ideal. Especifique un desplazamiento mínimo detectable de una desviación estándar.

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

Haga que el criterio de infracción sea más estricto aumentando el desplazamiento mínimo detectable. Devuelve todas las instancias de deriva no deseada.

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

Cada hoyo en el golf tiene un "par" asociado que indica el número esperado de golpes necesarios para hundir la pelota. Los jugadores habilidosos suelen completar cada hoyo con un número de golpes muy cerca de la par. Es necesario jugar varios hoyos y dejar que las puntuaciones se acumulen antes de que un ganador claro surja en un partido.

Ben, Jen y Ken juegan una ronda completa, que consta de 18 hoyos. El campo tiene una variedad de hoyos par-3, par-4 y par-5. Al final del juego, los jugadores tabulan sus puntuaciones.

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 
      ⋮

El ganador de la ronda es el jugador cuya menor suma acumulada desvía más por debajo del par al final. Calcula las sumas de los tres jugadores para determinar el ganador. Haga que cada cambio en la media sea detectable estableciendo un pequeño umbral.

[~,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 gana la ronda. Simula su próximo juego añadiendo o restando un trazo por hoyo al azar.

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')

Argumentos de entrada

contraer todo

Señal de entrada, especificada como vector.

Ejemplo: reshape(rand(100,1)*[-1 1],1,200)

Tipos de datos: single | double

Límite de control, especificado como un escalar real expresado en desviaciones estándar.

Tipos de datos: single | double

Desplazamiento medio mínimo para detectar, especificado como un escalar real expresado en desviaciones estándar.

Tipos de datos: single | double

Media de destino, especificada como un escalar real. Si no se especifica, entonces se estima como la media de las primeras 25 muestras de .tmeanx

Tipos de datos: single | double

Desviación estándar objetivo, especificada como un escalar real. Si no se especifica, entonces se estima como la desviación estándar de las primeras 25 muestras de .tdevx

Tipos de datos: single | double

Argumentos de salida

contraer todo

Los índices de puntos fuera de control, devueltos como escalares enteros o vectores. Si todas las muestras de señal están dentro de la tolerancia especificada, devuelve empty y arguments.cusumiupperilower

Sumas acumuladas superiores e inferiores, devueltas como vectores.

Más acerca de

contraer todo

Gráfico de control CUSUM

El gráfico de control CUSUM está diseñado para detectar pequeños cambios incrementales en la media de un proceso.

Dada una secuencia x1, x2, x3, …, xn con un promedio estimado mx y la desviación estándar estimada σx, defina las sumas acumuladas superiores e inferiores utilizando:

  • Suma acumulada superior

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

  • Menor suma

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

La variable n, representado en el argumento, es el número de desviaciones estándar de la media de destino, , que hacen que un desplazamiento sea detectable.cusummshifttmean

Un proceso viola el criterio CUSUM en la muestra xj si obedece Uj > cσx O Lj < –cσx. El límite de control se representa en el argumento.ccusumclimit

De forma predeterminada, la función devuelve la primera infracción que detecta. Si especifica el indicador, la función devuelve cada infracción.'all'

Consulte también

|

Introducido en R2016a