2012-06-11 15 views
9

Es solo una pregunta básica. Estoy ajustando líneas para dispersar puntos usando polyfit. Tengo algunos casos en los que mis puntos de dispersión tienen los mismos valores X y polyfit no se ajustan a una línea. Tiene que haber algo que pueda manejar esta situación. Después de todo, es solo una línea en forma.Ajuste de línea vertical usando polyfit

Puedo intentar intercambiar X e Y y luego abrir una línea. Cualquier método más fácil porque tengo muchos conjuntos de puntos de dispersión y quiero un método general para verificar líneas.

El objetivo principal es encontrar líneas correctas y eliminar características no lineales.

+0

Bien por el bien de la respuesta, intercambiando X e Y cuando tienes muy pocos valores x funciona bien. – Naresh

Respuesta

6

En primer lugar, esto sucede debido al método de ajuste que está utilizando. Al hacer polyfit, está utilizando el método de mínimos cuadrados en la distancia Y de la línea.

http://www.une.edu.au/WebStat/unit_materials/c4_descriptive_statistics/image23.gif

Obviamente, no va a funcionar para las líneas verticales. Por cierto, incluso cuando tiene algo cercano a las líneas verticales, puede obtener resultados numéricamente inestables.

Hay 2 soluciones:

  1. Intercambiar X e Y, como usted ha dicho, si se sabe que la línea es casi vertical. Luego, calcule la función lineal inversa.
  2. uso de mínimos cuadrados sobre la distancia perpendicular desde la línea, en lugar de vertical (ver imagen inferior) (más explicación en here)

http://mathworld.wolfram.com/images/eps-gif/LeastSquaresOffsets_1000.gif

+0

hmm. Poniéndolo en código en matlab. Publicaré una vez que tenga algo que funcione. – Naresh

+0

Muy buena solución :) – feelfree

+0

¿Hay alguna solución adicional disponible, Matlab polyfit basado en la distancia perpendicular de la línea? –

2

polyfit usos ordinaria de mínimos cuadrados aproximación lineal y no permitir abcisas repetidas ya que la matriz de Vandermonde resultante tendrá un rango deficiente. Sugiero tratar de encontrar algo de naturaleza más estadística. Si desea investigar método Andreys por lo general va por los nombres totales mínimos cuadrados o regresión distancia ortogonal http://en.wikipedia.org/wiki/Total_least_squares

que sería tentativamente también plantear la posibilidad de detectar cuando tiene valores de x simultáneas, a continuación, la rotación de sus datos sobre el origen , ajustando la línea y luego transformando la línea hacia atrás. No podría decir cuán poco funcionaría esto y solo usted podría decidir si era una opción basada en sus requisitos de precisión.

+0

gracias por los comentarios. Yo sé eso. Necesito una solución. Necesito ese 'algo de naturaleza más estadística'. ¿Cualquier sugerencia? – Naresh

Cuestiones relacionadas