Evaluación de picos en series temporales de datos de señal celular

9

Estoy midiendo la existencia de respuesta en las mediciones de la señal celular. Lo que hice primero fue aplicar un algoritmo de suavizado (Hanning) a la serie de datos de tiempo, luego detectar picos. Lo que obtengo es esto: series de tiempo de respuesta de señal celular

Si quisiera hacer que la detección de la respuesta sea un poco más objetiva que "sí, ves un aumento en la caída continua", ¿cuál sería el mejor enfoque? ¿Es para obtener la distancia de los picos desde una línea base determinada por regresión lineal?

(Soy un codificador de Python y casi no entiendo las estadísticas)

Gracias

Radek
fuente
44
No creo que exista "el mejor enfoque". Hay muchas formas de analizar o informar picos en series de tiempo. Su pregunta no da pistas para entender lo que podría estar buscando. Tal vez consulte con artículos en su campo, para obtener sugerencias o puntos de referencia.
ttnphns
No sé qué información proporcionar para darle las pistas. Básicamente, tiene un gráfico que tiene una tendencia a la baja (obtiene menos respuesta de una celda a medida que pasa el tiempo) y en algún punto intermedio puede ver un aumento en la producción. Eso es. ¿Crees que básicamente depende de mí decir subjetivamente que decir 10% de aumento en la respuesta = lo que busco?
Radek
1
Suponiendo que a veces ve el comportamiento como se muestra, y a veces solo una disminución continua (aproximadamente), tendrá muchas más posibilidades de obtener una respuesta razonable aquí si reemplaza un gráfico grande por 6-10 pequeños, donde la mitad tiene este aumento y la otra mitad no.
AVB
¿Puede tener más de un máximo local (protuberancia)?
Emre
1
¿Por qué no publicas tus datos? Me ocuparé de esto. El filtro presuntivo que usted y otros han sugerido tiene efectos secundarios. Si desea una forma objetiva de manejar esto, podría darle algunos consejos. ¡Pero todo comienza con los datos, no con la presunción!
IrishStat

Respuestas:

2

De modo que, según su comentario del 25 de octubre, le interesa encontrar y caracterizar algorítmicamente dos características principales: la disminución de la respuesta inicial seguida de un ciclo de respuesta incrementada y la disminución posterior. Supongo que los datos se observan a intervalos de tiempo discretos.

Esto es lo que intentaría:

  1. Use una rutina como numpy.ma.polyfit para ajustar, por ejemplo, un polinomio de cuarto grado a través de sus datos. Esto debería explicar la caída inicial seguida de la subida / bajada, pero suavizar las numerosas pero menores fluctuaciones. Esperemos que este grado de polinomio sea lo suficientemente flexible como para ajustarse bien a otras series similares. Creo que el objetivo principal sería obtener una función que tenga en cuenta el patrón principal que está buscando.
  2. Utilice las rutinas de Python para calcular la derivada de la función polinómica que se ajusta a los datos. Las rutinas de ejemplo son scipy.misc.derivative y numpy.diff. Está buscando los valores de tiempo donde la primera derivada es cero, lo que indica un posible mínimo o máximo local de la función. Se podría utilizar una segunda prueba derivada para confirmar qué punto corresponde a un mínimo o máximo. Presumiblemente tendrá tres de esos puntos si el gráfico que mostró es representativo. Tenga en cuenta que el proyecto sabio podría ser muy valioso aquí.
  3. En este punto, tendrá los valores de tiempo asociados con

    a. el inicio de la descomposición inicial

    si. el inicio del repunte

    C. el comienzo de la segunda decadencia

Luego puede hacer lo que quiera analíticamente para evaluar los cambios.

Puede ser mejor dejar que los datos hablen por sí mismos: en varias series, cuando aplica este método, ¿cuál es el cambio de tamaño típico en la fase ascendente, cuándo ocurre típicamente en el período de descomposición y cuánto dura? ¿Y cómo se ve la distribución de esta mejora en términos de dónde, qué tan grande y por cuánto tiempo? Conociendo estas estadísticas, puede caracterizar mejor un repunte particular como dentro de la tolerancia, con respecto a dónde ocurre, así como su tamaño y duración. La clave desde mi punto de vista sería identificar fácilmente dónde están ocurriendo estos cambios. El resto de lo que he descrito es sencillo de calcular.

Josh Hemann
fuente
44
Los polinomios no funcionarán con estos datos a menos que haga que el grado sea tan grande que amenace con introducir picos espurios.
whuber
Tal vez debería aclarar mi respuesta de que todavía necesita aplicar la función de Hanning y luego hacer el ajuste polinómico. Es posible que tenga que cambiar la ventana de Hanning para obtener una función más fluida. ¿O estás diciendo que un polinomio de bajo grado no funcionará para los datos suavizados?
Josh Hemann el
55
Un polinomio de bajo grado definitivamente no funcionará, Josh. Se necesita un suave locales - pensar en una lisa o kernel ciertos tipos de estrías - y necesita no ser un polinomio, que tiene propiedades terribles. (Polinomios pueden introducir, enormes picos espurios entre lo que de otro modo parece ser la serie de datos de buen comportamiento.)
whuber
F(X)=F(X0 0)+(X-X0 0)F(X0 0)+(X-X0 0)22!F(X0 0)+...
3
Gracias por aclarar ese punto, @Sameer. Estoy de acuerdo en que un ajuste polinomial local de bajo grado podría ser efectivo y no quise decir lo contrario en mi comentario anterior (que pretendía que "polinomio" se entendiera como un ajuste global ). Sin embargo, en cuanto a si es "mejor", tengo que estar de acuerdo con un comentario de ttnphns a la pregunta original: todo depende. Esperaría que los ajustes cuadráticos locales con una serie de datos densos se aproximen estrechamente a los suavizados del núcleo gaussiano, lo que nos da un enfoque. Otro sentido de "mejor" es el BLUP de kriging, que puede tener forma de spline.
whuber
1

Aquí hay algunas ideas, pero de arriba a abajo que pueden funcionar ...

Derivadas: si toma su matriz y resta los elementos entre sí para obtener una matriz de uno menos puntos, pero esa es la primera derivada. Si ahora suaviza eso y busca el cambio de signo, eso puede detectar su golpe.

Promedios móviles: Tal vez el uso de 2 promedios móviles rezagados (exponenciales o en ventanas) podría revelar la gran protuberancia al ignorar la pequeña. Básicamente, el ancho del promedio móvil de la ventana más pequeña debe ser mayor que el ancho de los bultos que desea ignorar. El EMA más ancho debe ser más ancho pero no demasiado ancho para detectar la protuberancia.

Busca cuando cruzan y restan el retraso (ventana / 2) y eso es una estimación de dónde está tu golpe. http://www.stockopedia.com/content/trading-the-golden-cross-does-it-really-work-69694/

Modelos lineales: haga una serie de modelos lineales de ancho suficiente que tengan varios pequeños bultos de ancho, digamos 100 puntos. Ahora recorra el conjunto de datos generando regresiones lineales en la variable X. Basta con mirar el coeficiente de X y ver dónde ocurrió el gran cambio de signo. Eso es un gran golpe.

Lo anterior es solo una conjetura de mi parte y probablemente haya mejores formas de hacerlo.

Chris
fuente