2011-12-14 14 views
5

Estoy trabajando en un proyecto de localización y utilizando una estimación de mínimos cuadrados para determinar la ubicación de un transmisor. Necesito una manera de caracterizar estadísticamente la "idoneidad" de mi solución dentro de mi programa, que podría usarse para decirme si tengo una buena respuesta, o si necesito mediciones adicionales, o si tengo datos incorrectos. He leído un poco sobre el uso del "Coeficiente de determinación" o R-cuadrado, pero no he podido encontrar ningún buen ejemplo. Cualquier idea sobre cómo caracterizar si tengo una buena solución o si necesito mediciones adicionales sería muy apreciada.Cómo caracterizar la adecuación de la estimación de Mínimos Cuadrados

Gracias!

Mi código me las siguientes salidas da,

grid_lat y grid_lon corresponden a la latitud y longitud coordenadas de la cuadrícula de posibles ubicaciones de destino

grid_lat = [[ 38.16755799 38.16755799 38.16755799 38.16755799 38.16755799 
    38.16755799] 
    [ 38.17717199 38.17717199 38.17717199 38.17717199 38.17717199 
    38.17717199] 
    [ 38.186786 38.186786 38.186786 38.186786 38.186786 38.186786 ] 
    [ 38.1964  38.1964  38.1964  38.1964  38.1964  38.1964 ] 
    [ 38.20601401 38.20601401 38.20601401 38.20601401 38.20601401 
    38.20601401] 
    [ 38.21562801 38.21562801 38.21562801 38.21562801 38.21562801 
    38.21562801] 
    [ 38.22524202 38.22524202 38.22524202 38.22524202 38.22524202 
    38.22524202]] 

grid_lon = [[-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588] 
    [-75.83805812 -75.83006167 -75.82206522 -75.81406878 -75.80607233 
    -75.79807588]] 

grid_error corresponde a lo "bueno" de una solución de cada uno el punto es Si tenemos un error de 0.0, tenemos una solución perfecta. El error de cuadrícula se calcula para cada punto de la cuadrícula en cada posición de medición (las pistas en la medición a continuación). Cada posición de medición tiene un rango estimado para el transmisor. El "error" corresponde al rango estimado para el transmisor a partir de la medición, menos el rango real calculado entre la ubicación del rango de medición y el punto de la grilla. Cuanto menor sea el error, mayor es la posibilidad que estamos cerca de la ubicación del transmisor real

# Calculate distance between every grid point and every measurement in meters 
measured_distance = spatial.distance.cdist(grid_ecef_array, measurement_ecef_array, 'euclidean') 

measurement_error = [pow((measurement - estimated_distance),2) for measurement in measured_distance] 

mean_squared_error = [numpy.sqrt(numpy.mean(measurement)) for measurement in measurement_error] 

# Find minimum solution 
# Convert array of mean_squared_errors to 2D grid for graphing 
N3, N4 = numpy.array(grid_lon).shape 
grid_error = numpy.array(mean_squared_error).reshape((N3, N4)) 

grid_error = [[ 2.33608445 2.02805063 1.85638288 1.84620283 2.02757163 2.38035108] 
    [ 1.73675429 1.40649524 1.21799211 1.06503271 1.27373554 1.74265406] 
    [ 1.44967789 0.96835022 0.62667257 0.52804942 0.91189678 1.50067864] 
    [ 1.70155286 1.24024402 0.9642869 1.00517531 1.32606411 1.81754752] 
    [ 2.40218247 2.07449106 1.91044903 1.94272889 2.15511638 2.51683715] 
    [ 3.29679348 3.05353929 2.93662134 2.95839307 3.11583615 3.39320682] 
    [ 4.27303679 4.08195869 3.99203754 4.00926823 4.13247105 4.35378011]] 

# Generate the 3D plot with the Z coordinate being the mean squared error estimate 
plot3Dcoordinates(grid_lon, grid_lat, grid_error) 

# Generic function using matplotlib to plot coordinates 
def plot3Dcoordinates(X, Y, Z): 
    fig = plt.figure() 
    ax = Axes3D(fig) 

    surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, 
      linewidth=0, antialiased=False) 

    fig.colorbar(surf, shrink=0.5, aspect=5) 

Aquí es una imagen ejemplo de ejecución del algoritmo en una cuadrícula mucho más grande. Puedo ver visualmente que tengo una solución bastante buena porque la forma converge suavemente en un único punto mínimo (la solución), pareciendo una especie de sombrero de brujas invertido. enter image description here

La segunda imagen muestra todas las mediciones y ubicaciones con la solución graficada en la parte superior, y el punto mínimo como la solución (rojo x).

enter image description here

+0

¿Cuál es exactamente la preocupación? Parece que respondes tu propia pregunta a través de 'grid_error'. Sus detalles y tramas son geniales, pero no sabemos cuál es su programa y cómo funciona. Solo vemos las entradas y sus salidas. –

+0

Steve- puedo decir visualmente que tengo una buena respuesta, ves intervalos de confianza limpios alejándose de la X roja, que se relacionan directamente con el aumento del error cuadrático medio a medida que nos alejamos del punto objetivo. El desafío al que me enfrento es cómo determinar que tengo una buena solución o no programáticamente sin requerir una observación humana – Alex

+0

Agregué un código (justo encima de la definición de grid_error) para mostrar cómo se genera la estimación de error – Alex

Respuesta

3

Cuanto más cerca de R cuadrado es de 1,0, mejor será su ajuste es. Elija su propio umbral "lo suficientemente bueno", creo que los umbrales típicos están en el rango de .92-.98.

+0

Paul- No he podido encuentre una buena explicación de cómo se relaciona R-squared con mis datos. Por ejemplo, sé por experiencia que desarrollé este programa que una buena solución tendrá una forma de sombrero de bruja invertida limpia, con valores de error en los puntos de cuadrícula circundantes aumentando de forma lineal a medida que se aleja de la solución. Simplemente no estoy seguro de cómo el valor R-cuadrado explica esto, y también un buen forumla para usar para R-cuadrado dado los datos de prueba anteriores. ¡Gracias! – Alex

+0

En tu publicación, ya dijiste que estás haciendo una estimación de mínimos cuadrados: mira esta página (http://mathworld.wolfram.com/CorrelationCoefficient.html), la ecuación 22 da una expresión para calcular R-cuadrado, usando componentes de varianza que puede ser calculado durante los cálculos de mínimos cuadrados.Esta página también muestra algunos ajustes de ejemplo con diferentes conjuntos de datos y valores correspondientes de R-cuadrado. – PaulMcG

Cuestiones relacionadas