¿Cómo comparar las características de dos curvas?

11

Necesito comparar dos curvas f (x) yg (x). Están en el mismo rango x (digamos -30 a 30). f (x) puede tener algunos picos afilados o picos y valles lisos. g (x) puede tener los mismos picos y valles. Si es así, quiero medir qué tan bien coinciden estas características sin inspección visual. He tratado de resolver este problema de la siguiente manera.

  1. Normalice ambas funciones dividiendo cada punto de datos por el área total de la función. Ahora el área de la función normalizada es 1.0
  2. En cada x, obtenga el valor mínimo de f (x) yg (x). Esto me dará una nueva función que es básicamente el área superpuesta entre f (x) yg (x).
  3. Cuando integro la función resultante del paso 2 obtengo el área de superposición total de 1.0

Sin embargo, esto no me dice si los picos y los valles coinciden o no. No estoy seguro de si esto se puede hacer, pero si alguien conoce un método, agradecería su ayuda.

== EDITAR == Para aclarar, he incluido una imagen.

Curvas de muestra

La diferencia entre las dos curvas (negro y azul) puede no ser la misma, pero tendrá formas complementarias.

Antecedentes: las funciones son la densidad proyectada de estados (PDOS) de los orbitales atómicos de un compuesto. Entonces tengo estados para s, p, d orbitales. Quiero determinar si el material tiene hibridaciones sp, pd o dd (mezcla orbital). Los únicos datos que tengo son los PDOS. Si, por ejemplo, el PDOS de s orbital (función f (x)) tiene los picos y valles a las mismas energías (valores x) del PDOS de p orbital (función g (x)), entonces hay sp sp que se mezcla en ese material.

laalee
fuente
1
Tal vez llevarlo a mathoverflow.net ?
Eufórico el
1
Me pregunto si la gente de audio digital tiene problemas similares.
Dan Pichelman
Gracias Euphoric, también haré la pregunta en mathoverflow.net
laalee
@laalee No haga su pregunta en más de un sitio en la red de Stack Exchange. También Math Overflow es matemática de nivel de investigación. Math Stack Exchange no es de nivel de investigación. Puedo migrar esto a Matemáticas o en otro lugar si lo deseas.
Ingeniero mundial el
Me disculpo. Traté de eliminarlo en mathoverflow pero no pude encontrar una manera. Le agradecería si pudiera eliminarlo. Gracias
laalee

Respuestas:

4

Este es un problema común y a menudo difícil en química analítica, física, espectroscopía, etc. Los enfoques utilizados pueden variar desde la simple comparación de RMSD hasta métodos muy sofisticados. Si la tarea no es fácil de hacer mediante inspección visual (los humanos están exquisitamente desarrollados para el reconocimiento de características), entonces probablemente será difícil hacerlo computacionalmente.

Un enfoque es tratar de eliminar las "líneas de base" para que las funciones tengan un valor cero, excepto cuando haya características de pico o valle. Esto se hace mejor con el ajuste de curvas utilizando un polinomio de bajo orden o, mejor aún, un modelo de principios más apropiado de cómo puede y debe verse la línea de base. Si los picos son muy agudos, simplemente puede suavizar la función y restar la función suavizada de la función original.

Después de eliminar la línea de base, puede normalizar y generar residuos o hacer RMSD (enfoques simples) o tratar de detectar características de pico / valle ajustando un gaussiano (o cualquier modelo que sea apropiado) a cada característica que busque. Si puede ajustar los picos, puede comparar las ubicaciones de los picos y los anchos medios.

Eche un vistazo a SciPy si conoce Python. Buena suerte.

Ratzlaugh Genérico
fuente
Gracias por tu respuesta. Sin embargo, no tengo claro cómo encontrar una línea de base. Cada caso tendrá una función diferente que no puedo predecir con anticipación.
laalee
3

Esto está "fuera de mi alcance", por lo que podría estar malinterpretando el problema por completo, pero tal vez podría aplicar una distancia cuadrática media (RMSD) a las funciones. Si solo está interesado en los picos y valles, aplíquelo a las áreas alrededor de esos picos y valles (es decir, para algunas x +/- algunas épsilon donde la derivada de cualquiera de las funciones es cero). Si el RMSD de ese rango es cercano a cero, creo que tienes una buena coincidencia.

dbc60
fuente
Esto considera la diferencia entre los valores, que pueden no ser cero, aunque las formas son similares.
laalee
3

Tal como lo entiendo, la información que está buscando es transmitida por el "cuadro de variaciones" de la función. ¡Lamento mucho no saber el nombre en inglés para esto!

Esta tabla está asociada a una función diferenciable f y usted la construye encontrando las raíces de f ' y determina el signo de f' en cada intervalo entre estos ceros.

Por lo tanto, si los ceros de f ' y g' coinciden más o menos y los signos de estas funciones coinciden, tendrán un perfil similar.

Lo primero que intentaría programar sería:

  1. Seleccione un pequeño ε
  2. Dibuje aleatoriamente un gran número N de puntos x [i] en el intervalo donde se definen las funciones.

  3. Para cada nodo, calcule las diferencias F [i] = f (x [i] + ε) - f (x [i] - ε) y G [i] = g (x [i] + ε) - g (x [i] - ε) .

  4. Si en cada nodo, F [i] y G [i] son ambos más pequeños que ε² O ambos tienen el mismo signo, concluya que las dos funciones tienen casi el mismo perfil.

¿Funciona?

Michael Le Barbier Grünewald
fuente
Gracias michipili por tu perspicaz respuesta. Actualmente estoy tratando de cumplir un plazo. Pero implementaré esto tan pronto como pueda y te lo
haré
1

Fuerza bruta: descubra el valor flotante distinto de cero más pequeño con este valor como paso, recorra todo el dominio y verifique si los valores son iguales.

== EDITAR ==

Hmmm ... Si por "la misma forma" te refieres a g (x) = c * f (x), esta solución debería modificarse - para cada elemento de dominio calcules f (x) / g (x) y verifica si el resultado es el mismo para cada punto (por supuesto, si g (x) == 0, entonces verifica si f (x) == 0, no está tratando de dividir).

Si "la misma forma" significa "los óptimos locales y los puntos de flexión son los mismos" ... Bueno, encuentre los óptimos locales y los puntos de flexión para f (x) yg (x) (como conjuntos de elementos de dominio) y verifique, si esos Los conjuntos son iguales.

Tercera opción: f (x) = g (x) + c. Simplemente verifique si cada elemento del dominio tiene la misma diferencia f (x) -g (x). Es casi idéntico al primer caso, pero en lugar de la división, tienes una diferencia.

== TODAVÍA OTRA EDICIÓN ==

Bueno ... El segundo enfoque de la edición anterior puede ser útil. Además, puede fusionarlo con el signo de comparación de la primera derivada (no simbólico, pero calculado como df (x) = f (x) - f (x-step)). Si ambas funciones tienen el mismo signo de derivada en todo el dominio, verifique optimas y puntos de flexión, solo para estar seguro. Yo diría que estas condiciones deberían ser suficientes para hacer lo que necesita.

Filip Malczak
fuente
Gracias Filip por tu respuesta. Pero las funciones pueden no tener valores iguales pero tienen la misma forma.
laalee
Muevo este comentario para responder como editar. Echale un vistazo.
Filip Malczak
Gracias Filip por tu respuesta. He agregado una imagen para aclarar mi problema.
laalee
1

qué tan bien coinciden estas características sin inspección visual.

Probablemente la forma más directa es calcular el coeficiente de correlación de Pearson . Es decir, use su f (x) como X y g (x) como Y. Efectivamente "trace g (x) en función de f (x) y vea qué tan bien forma una línea recta".

El coeficiente de correlación es popular porque es fácil de calcular y a menudo se justifica simplemente agitando las manos. Puede ser una buena aproximación inicial para algunos usos, pero definitivamente no es una panacea.

Para obtener mejores resultados en aplicaciones del mundo real, debe comprender lo que sucede en los datos, es decir, el proceso que genera los datos. A menudo hay algún tipo de fondo , y las características interesantes se superponen a ese fondo. Si arroja todos los datos en un cuadro negro, puede terminar comparando principalmente los fondos: el cuadro negro no sabe qué parte de los datos es la parte interesante. Entonces, para obtener mejores resultados, a menudo es una buena idea eliminar los fondos de alguna manera y luego comparar lo que queda. Ajustar líneas o curvas o promedios y restar o dividir por ellos, filtrado de paso bajo, banda o alto, alimentar los datos a través de alguna función no lineal ... lo que sea.

Definitivamente no hay una única respuesta correcta. Obtendrá tantos resultados diferentes como pruebe los métodos. Pero, algunos de los resultados son mejores que algunos de ellos. El razonamiento teórico puede ayudar a comenzar en la dirección correcta, pero la forma de establecer parámetros y ajustar su método, en última instancia, solo se puede encontrar probándolos y comparando los resultados del mundo real.

Joonas Pulakka
fuente