Estimación media robusta con eficiencia de actualización O (1)

9

Estoy buscando una estimación sólida de la media que tiene una propiedad específica. Tengo un conjunto de elementos para los que quiero calcular esta estadística. Luego, agrego nuevos elementos uno a la vez, y para cada elemento adicional me gustaría volver a calcular la estadística (también conocida como algoritmo en línea). Me gustaría que este cálculo de actualización sea rápido, preferiblemente O (1), es decir, que no dependa del tamaño de la lista.

La media habitual tiene esta propiedad de que se puede actualizar de manera eficiente, pero no es robusta para los valores atípicos. Los estimadores robustos típicos de la media, como la media intercuartil y la media recortada, no pueden actualizarse de manera eficiente (ya que requieren mantener una lista ordenada).

Agradecería cualquier sugerencia de estadísticas sólidas que puedan calcularse / actualizarse de manera eficiente.

Bitwise
fuente
¿Por qué no usar un segmento inicial de datos, como los primeros 100 o los primeros 1000 o lo que sea, para erigir "cercas" para detectar valores atípicos? No tiene que actualizarlos nuevamente, por lo que no es necesario mantener estructuras de datos adicionales.
whuber
@whuber No puedo garantizar que la muestra inicial representará el resto de los datos. Por ejemplo, el orden en que recibo los datos no es aleatorio (imagine un escenario en el que primero me dan valores más altos y luego valores más bajos).
Bitwise
1
Esa es una observación crucial. Implica que debe tener más cuidado de lo habitual, porque inicialmente obtendrá una estimación "robusta" de los valores atípicos medios altos. Si continúa actualizando esa estimación, podría terminar eliminando todos los valores más bajos. Por lo tanto, necesitará una estructura de datos en la que las partes clave de toda la distribución de datos se registren y actualicen periódicamente. Consulte nuestros hilos con palabras clave "en línea" y "cuantil" para obtener ideas. Dos de estos prometedores están en stats.stackexchange.com/questions/3372 y stats.stackexchange.com/q/3377 .
whuber
Ofrecería una recompensa, pero no tengo suficiente reputación
Jason S
1
Para continuar con la idea en el primer comentario de @ whuber, puede mantener un subconjunto aleatorio muestreado uniformemente de tamaño o de todos los datos vistos hasta ahora. Este conjunto y las "cercas" asociadas se pueden actualizar en O (1) tiempo. 10001001000
Innuo

Respuestas:

4

Esta solución implementa una sugerencia hecha por @Innuo en un comentario a la pregunta:

Puede mantener un subconjunto aleatorio muestreado uniformemente de tamaño 100 o 1000 a partir de todos los datos vistos hasta ahora. Este conjunto y las "cercas" asociadas se pueden actualizar en tiempo.O(1)

Una vez que sepamos cómo mantener este subconjunto, podemos seleccionar cualquier método que nos guste para estimar la media de una población a partir de dicha muestra. Este es un método universal, sin hacer ninguna suposición, que funcionará con cualquier flujo de entrada con una precisión que pueda predecirse utilizando fórmulas de muestreo estadístico estándar. (La precisión es inversamente proporcional a la raíz cuadrada del tamaño de la muestra).


Este algoritmo acepta como entrada una secuencia de datos un tamaño de muestra , y genera una secuencia de muestras cada una de las cuales representa la población . Específicamente, para , es una muestra aleatoria simple de tamaño de (sin reemplazo).t = 1 , 2 , , m s ( t ) X ( t ) = ( x ( 1 ) , x ( 2 ) , , x ( t ) ) 1 i t s ( i ) m X ( t )x(t), t=1,2,,ms(t)X(t)=(x(1),x(2),,x(t))1its(i)mX(t)

Para que esto suceda, es suficiente que cada subconjunto de elementos de tenga las mismas posibilidades de ser los índices de en . Esto implica la posibilidad de que esté en igual a siempre que .m{1,2,,t}xs(t)x(i), 1i<t,s(t)m/ttm

Al principio solo recopilamos la secuencia hasta que se hayan almacenado elementos. En ese momento solo hay una muestra posible, por lo que la condición de probabilidad se cumple trivialmente.m

El algoritmo se hace cargo cuando . Supongamos inductivamente que es una muestra aleatoria simple de para . Establecer provisionalmente . Sea una variable aleatoria uniforme (independiente de cualquier variable previa utilizada para construir ). Si , reemplace un elemento aleatorio de por . Ese es todo el procedimiento!t=m+1s(t)X(t)t>ms(t+1)=s(t)U(t+1)s(t)U(t+1)m/(t+1)sx(t+1)

Claramente, tiene probabilidad de estar en . Además, según la hipótesis de inducción, tenía una probabilidad de estar en cuando . Con probabilidad = se habrá eliminado de , de donde su probabilidad de permanecer igualx(t+1)m/(t+1)s(t+1)x(i)m/ts(t)itm/(t+1)×1/m1/(t+1)s(t+1)

mt(11t+1)=mt+1,

exactamente como sea necesario. Por inducción, entonces, todas las probabilidades de inclusión de la en la son correctas y está claro que no hay una correlación especial entre esas inclusiones. Eso prueba que el algoritmo es correcto.x(i)s(t)

La eficiencia del algoritmo es porque en cada etapa se calculan como máximo dos números aleatorios y como máximo se reemplaza un elemento de una matriz de valores . El requisito de almacenamiento es .O(1)mO(m)

La estructura de datos para este algoritmo consiste en la muestra junto con el índice de la población que muestrea. Inicialmente tomamos y procedemos con el algoritmo para Aquí hay una implementación para actualizar con un valor para producir . (El argumento juega el papel de y es . El llamador mantendrá el índice ).stX(t)s=X(m)t=m+1,m+2,.R(s,t)x(s,t+1)ntsample.sizemt

update <- function(s, x, n, sample.size) {
  if (length(s) < sample.size) {
    s <- c(s, x)
  } else if (runif(1) <= sample.size / n) {
    i <- sample.int(length(s), 1)
    s[i] <- x
  }
  return (s)
}

Para ilustrar y probar esto, usaré el estimador habitual (no robusto) de la media y compararé la media estimada a partir de con la media real de (el conjunto acumulativo de datos visto en cada paso ) Elegí una secuencia de entrada algo difícil que cambia con bastante suavidad pero que periódicamente experimenta saltos dramáticos. El tamaño de la muestra de es bastante pequeño, lo que nos permite ver las fluctuaciones de muestreo en estas parcelas.X ( t ) m = 50s(t)X(t)m=50

n <- 10^3
x <- sapply(1:(7*n), function(t) cos(pi*t/n) + 2*floor((1+t)/n))
n.sample <- 50
s <- x[1:(n.sample-1)]
online <- sapply(n.sample:length(x), function(i) {
  s <<- update(s, x[i], i, n.sample)
  summary(s)})
actual <- sapply(n.sample:length(x), function(i) summary(x[1:i]))

En este punto onlinees la secuencia de estimaciones medias producidas al mantener esta muestra de valores, mientras que es la secuencia de estimaciones medias producidas a partir de todos los datos disponibles en cada momento. El gráfico muestra los datos (en gris), (en negro) y dos aplicaciones independientes de este procedimiento de muestreo (en colores). El acuerdo está dentro del error de muestreo esperado:50actualactual

plot(x, pch=".", col="Gray")
lines(1:dim(actual)[2], actual["Mean", ])
lines(1:dim(online)[2], online["Mean", ], col="Red")

Figura


Para estimadores robustos de la media, busque en nuestro sitio términos y relacionados. Entre las posibilidades que vale la pena considerar se encuentran las medias Winsorizadas y los estimadores M.

whuber
fuente
No me queda claro cómo se ve el umbral de rechazo en este enfoque (por ejemplo, el umbral más allá del cual las observaciones se rechazan como valores atípicos). ¿Puedes agregarlos a la trama?
user603
@ user603 El "umbral de rechazo", o cualquier método robusto que se utilice para estimar la media, es irrelevante: elija el método que desee para estimar la media. (No todos los métodos robustos funcionan erigiendo umbrales y rechazando datos, por cierto). Esto se haría en el código de mi respuesta reemplazándolo summarypor una variante robusta.
whuber
Algo no me queda claro en este ejemplo. ¿Son los datos grises "buenos" o "atípicos"? Si lo anterior, parece que el ajuste está sesgado (debería encajarlos mejor ya que la situación sería similar a la tendencia a la baja de @ Bitwise que nos gustaría seguir). Si los datos grises en valores de índice más altos son atípicos, entonces parece que el ajuste está sesgado hacia arriba. ¿Cuál es el objetivo que desea encajar aquí? El ajuste actual parece dividido entre esos dos escenarios.
Deathkill14
@Death Como se explica en el texto que precede inmediatamente a la figura, los datos grises son el flujo de datos original. Su media continua es la curva negra. Las curvas de colores se basan en el algoritmo. Las desviaciones verticales de las curvas de color en relación con la curva negra se deben a la aleatoriedad en el muestreo. La cantidad de desviación esperada en cualquier índice es proporcional a la desviación estándar de los valores grises que preceden a ese índice e inversamente proporcional a la raíz cuadrada del tamaño de la muestra (tomada como 50 en este ejemplo).
whuber
3

Puede pensar en relacionar su problema con el de la tabla de control recursivo. Tal cuadro de control evaluará si una nueva observación está bajo control. Si es así, esta observación se incluye en la nueva estimación de la media y la varianza (necesaria para determinar los límites de control).

Aquí se puede encontrar información sobre gráficos de control robustos, recursivos y univariados . Uno de los textos clásicos sobre control de calidad y cuadros de control parece estar disponible en línea aquí .

Intuitivamente, usando la media a, y una varianza como entradas, puede determinar si una nueva observación en el tiempo es un valor atípico por varios enfoques. Una sería declarar un valor atípico si está fuera de un cierto número de desviaciones estándar de (dado , pero esto puede tener problemas si los datos lo hacen no conforme a ciertos supuestos de distribución. Si desea seguir este camino, supongamos que ha determinado si un nuevo punto no es un valor atípico y desea incluirlo en su estimación media sin una tasa especial de olvido. Entonces no puedes hacerlo mejor que:μt1σt12txtμt1σt12)

μt=t1tμt1+1txt

Del mismo modo, deberá actualizar la varianza de forma recursiva:

σt2=t1tσt12+1t1(xtμt)2

Sin embargo, es posible que desee probar algunos gráficos de control más convencionales. Se recomiendan otros cuadros de control que son más sólidos para la distribución de los datos y que aún pueden manejar la no estacionariedad (como el de su proceso que sube lentamente) son EWMA o CUSUM (consulte el libro de texto vinculado anteriormente para obtener más detalles sobre los gráficos y sus límites de control). Estos métodos generalmente serán menos intensivos en cómputo que los robustos porque tienen la ventaja de que simplemente necesitan comparar una sola observación nueva con información derivada de observaciones no atípicas. Puede refinar sus estimaciones del proceso a largo plazo y utilizado en los cálculos de límite de control de estos métodos con las fórmulas de actualización proporcionadas anteriormente, si lo desea.μμσ2

Con respecto a un gráfico como el EWMA, que olvida las observaciones antiguas y da más peso a las nuevas, si cree que sus datos son estacionarios (lo que significa que los parámetros de la distribución generadora no cambian), no hay necesidad de olvidar exponencialmente las observaciones más antiguas. Puede establecer el factor de olvido en consecuencia. Sin embargo, si cree que no es estacionariedad, deberá seleccionar un buen valor para el factor de olvido (nuevamente, consulte el libro de texto para obtener una forma de hacerlo).

También debo mencionar que antes de comenzar a monitorear y agregar nuevas observaciones en línea, necesitará obtener estimaciones de y (los valores de los parámetros iniciales basados ​​en un conjunto de datos de entrenamiento) que no están influenciados por valores atípicos. Si sospecha que hay datos atípicos en sus datos de capacitación, puede pagar el costo único de usar un método robusto para estimarlos.σ 2 0μ0σ02

Creo que un enfoque en este sentido conducirá a la actualización más rápida para su problema.

Muerte mortal14
fuente
1
Usar gráficos de control es una idea interesante. Sin embargo, parece que podría ser difícil superar los desafíos descritos en los comentarios a la pregunta. En el caso no estacionario, si está "olvidando" valores anteriores, parece posible que las estimaciones estén muy sesgadas. Por ejemplo, ¿cómo funcionarían sus sugerencias en una secuencia de datos dada por ? (Esto cae muy gradualmente, salta repentinamente y sube muy gradualmente, salta repentinamente de nuevo, y así sucesivamente.)xt=cos(πt/106)+2t/106
whuber
@Bitwise dice que la muestra inicial puede no representar datos futuros. Sin información sobre cuán diferente será el resto de los datos, esencialmente no puede hacer nada. Sin embargo, si los datos iniciales tienen información sobre la no estacionariedad del proceso (digamos una tendencia a la baja), entonces se pueden permitir nuevas observaciones para tener en cuenta el hecho de que esperamos que sean más bajas. Sin embargo, se necesita información sobre la no estacionariedad. Usted propone un tipo patológico de no estacionariedad. Algunos métodos, por ejemplo, el EWMA son óptimos para un proceso específico, pero en general son bastante buenos. Su proceso requeriría un trabajo más personalizado.
Deathkill14
(Detecto un matemático en ti, porque es un movimiento muy matemático descartar como "patológico" algo que no puedes manejar :-). Pero le ruego que difiera con su pronóstico: métodos como los sugeridos por @Innuo pueden proteger contra tales "patologías" y todo lo demás que el mundo real podría arrojarle, especialmente cuando la aleatorización se incorpora al muestreo.
whuber
En realidad, estoy de acuerdo en que uno no debe descartar un problema que enfrenta. ¿Podría por favor vincularme a los métodos discutidos por @Innuo (no puedo encontrarlos en esta publicación, ¿estaban en los enlaces que proporcionó anteriormente y los extrañé?). Gracias.
Deathkill14
@Innuo publicó un breve comentario en stats.stackexchange.com/questions/56494/… sugiriendo que una muestra aleatoria uniforme de todos los datos observados previamente podría mantenerse en tiempo. Aunque no está del todo claro exactamente cómo se haría eso, acoplarlo con un estimador robusto de la media constituiría una solución universal, aplicable a cualquier flujo de datos. O(1)
whuber