Para analizar los datos de un experimento de biofísica, actualmente estoy tratando de hacer un ajuste de curva con un modelo altamente no lineal. La función del modelo se ve básicamente como:
Aquí, especialmente el valor de es de gran interés.
Una trama para esta función:
(Tenga en cuenta que la función del modelo se basa en una descripción matemática exhaustiva del sistema y parece funcionar muy bien, es solo que los ajustes automáticos son complicados).
Por supuesto, la función del modelo es problemática: las estrategias de adaptación que he probado hasta ahora fallan debido a la clara asíntota en , especialmente con datos ruidosos.
Mi comprensión del problema aquí es que el ajuste simple de mínimos cuadrados (he jugado con regresión lineal y no lineal en MATLAB; principalmente Levenberg-Marquardt) es muy sensible a la asíntota vertical, porque los pequeños errores en x se amplifican enormemente .
¿Alguien podría señalarme una estrategia adecuada que podría solucionar esto?
Tengo algunos conocimientos básicos de estadística, pero todavía es bastante limitado. Estaría ansioso por aprender, si tan solo supiera dónde comenzar a buscar :)
¡Muchas gracias por tu consejo!
Editar Perdón por olvidarse de mencionar los errores. El único ruido significativo está en , y es aditivo.
Edición 2 Alguna información adicional sobre los antecedentes de esta pregunta. El gráfico anterior modela el comportamiento de estiramiento de un polímero. Como @whuber señaló en los comentarios, necesita para obtener un gráfico como el anterior.
En cuanto a cómo las personas han estado ajustando esta curva hasta este punto: parece que las personas generalmente cortan la asíntota vertical hasta que encuentran un buen ajuste. Sin embargo, la opción de corte sigue siendo arbitraria, lo que hace que el procedimiento de ajuste sea poco confiable e irreproducible.
Edición 3 y 4 Gráfico fijo.
fuente
Respuestas:
Los métodos que usaríamos para ajustar esto manualmente (es decir, de Análisis de datos exploratorios) pueden funcionar notablemente bien con dichos datos.
Deseo volver a parametrizar ligeramente el modelo para que sus parámetros sean positivos:
Para una dada , supongamos que hay una x real única que satisface esta ecuación; llame a esto f ( y ; a , b ) o, por brevedad, f ( y ) cuando ( a , b ) se entiendan.y x f(y;a,b) f(y) (a,b)
Observamos una colección de pares ordenados donde la x i se desvía de f ( y i ; a , b ) por variables aleatorias independientes con medias cero. En esta discusión supondré que todos tienen una variación común, pero una extensión de estos resultados (usando mínimos cuadrados ponderados) es posible, obvia y fácil de implementar. Aquí hay un ejemplo simulado de tal colección de 100 valores, con a = 0.0001 , b = 0.1 y una varianza común de σ(xi,yi) xi f(yi;a,b) 100 a=0.0001 b=0.1 .σ2=4
Este es un ejemplo difícil (deliberadamente), como se puede apreciar por los valores no físicos (negativos) y su distribución extraordinaria (que es típicamente ± 2 unidades horizontales , pero puede variar hasta 5 o 6 en el eje x ). Si podemos obtener un ajuste razonable a estos datos que se acerque a la estimación de a , b y σ 2 utilizados, lo haremos bien.x ±2 5 6 x a b σ2
Un ajuste exploratorio es iterativo. Cada etapa consta de dos pasos: estimar (basado en los datos y anteriores estimaciones un y b de un y b , a partir del cual los valores predichos anteriores x i se pueden obtener para la x i ) y luego estimar b . Debido a que los errores están en x , los ajustes estiman el x i desde ( y i ) , en lugar de al revés. Al primer orden en los errores en x , cuando xa a^ b^ a b x^i xi b xi (yi) x x es suficientemente grande
Por lo tanto, es posible actualizar un encajando con este modelo de mínimos cuadrados (aviso de que tiene sólo un parámetro - una pendiente, un --y sin intercepción) y tomando el recíproco del coeficiente como la estimación actualizada de una .a^ a a
Luego, cuando es suficientemente pequeño, el término cuadrático inverso domina y encontramos (nuevamente al primer orden en los errores) quex
Una vez más el uso de los mínimos cuadrados (con sólo un término de pendiente ) obtenemos una estimación actualizada b a través de la raíz cuadrada de la pendiente equipada.b b^
Para ver por qué esto funciona, se puede obtener una aproximación exploratoria cruda a este ajuste trazandoxi 1/y2i xi xi yi xi 1/y2i yi en rojo, la mitad más pequeña en azul, y una línea a través del origen se ajusta a los puntos rojos.
En este punto, los valores pronosticados se pueden actualizar a través de
Itere hasta que las estimaciones se estabilicen (lo cual no está garantizado) o pasen por pequeños rangos de valores (que aún no se pueden garantizar).
Hay algunos problemas con este enfoque:
Las estimaciones son sesgadas. El sesgo se hace evidente cuando el conjunto de datos es pequeño y relativamente pocos valores están cerca del eje x. El ajuste es sistemáticamente un poco bajo.
Código
Lo siguiente está escrito en Mathematica .
x
y
data = {x,y}
fuente
Vea las preguntas importantes que @probabilityislogic publicó
-
Edite para considerar la información adicional:
Ahora tenemos que los errores están en x y aditivos. Todavía no sabemos si la varianza es constante en esa escala.
¡No estoy seguro de que eso mejore las cosas! Creo que hay métodos para ese tipo de cosas, pero en realidad no es mi área en absoluto.
Mencioné en los comentarios que le gustaría ver la regresión inversa, pero la forma particular de su función puede impedir llegar lejos con eso.
Incluso podría estar atrapado con probar métodos bastante robustos para errores en x en esa forma lineal.
-
fuente
Después de algunas semanas más de experimentación, una técnica diferente parece funcionar mejor en este caso particular: ajuste de mínimos cuadrados totales . Es una variante del ajuste de mínimos cuadrados habitual (no lineal), pero en lugar de medir los errores de ajuste a lo largo de solo uno de los ejes (que causa problemas en casos altamente no lineales como este), tiene en cuenta ambos ejes.
Hay una gran cantidad de artículos, tutoriales y libros disponibles sobre el tema, aunque el caso no lineal es más difícil de alcanzar. Incluso hay algo de código MATLAB disponible.
fuente