Ajuste de ecuaciones a los datos es un procedimiento estadístico, por lo que es mejor para el uso de software estadístico para el propósito. Potente, fácil de usar software libre, disponible para todos en el R Proyecto.
Debido a que la muestra de datos son demasiado escasos para mostrar todas las capacidades esenciales de R
, para ilustrar su uso, vamos a agregar un cuarto enlace correspondiente a la "cruda" (fuente) en el punto (5,5) a la "bpc" (destino) punto (565440.0, 6452443.9). Aunque R
puede leer muchos formatos de archivo, con un pequeño número de enlaces es sencillo de escribir, lo cual puede ser hecho como este, con dos líneas de código:
source <- t(matrix(c(6.42775,3.61140, 2.7524,4.1539, 6.0293,6.4965, 5.0,5.0), nrow=2))
dest <- t(matrix(c(567742,6450622, 562285,6450858, 566709,6454802, 565440.0,6452443.9), nrow=2))
Estos crear matrices en la que cada fila muestra un par de coordenadas. Como un cheque, usted puede obtener una mejor forma de matriz como la visualización de estos datos por volver a escribir los nombres de las variables en el símbolo del sistema (>
). Por ejemplo:
> source
[,1] [,2]
[1,] 6.42775 3.6114
[2,] 2.75240 4.1539
[3,] 6.02930 6.4965
[4,] 5.00000 5.0000
Ahí están, uno por línea. Independientemente, una vez que los enlaces en R
en esta forma, la búsqueda de las mejores (mínimos cuadrados) ajuste es muy sencillo:
lm(dest ~ source)
Eso es todo allí está a él. Aquí es lo que se ve el resultado:
Coefficients:
[,1] [,2]
(Intercept) 558910.8 6444331.5
source1 1461.7 152.8
source2 -156.1 1469.9
Esta transformación de la matriz se multiplica origen de coordenadas en el derecho. Un ejemplo que aparece a continuación.
Es una buena idea para investigar la solución más estrechamente. Volvamos a empezar, esta vez de guardar el ajuste:
a <- lm(dest ~ source)
Resumen de los resultados para obtener más información:
> summary(a)
Response Y1 :
Call:
lm(formula = Y1 ~ source)
Residuals:
1 2 3 4
-0.3227 -0.4617 -0.5605 1.3449
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.589e+05 4.062e+00 137586.8 4.63e-06 ***
source1 1.462e+03 5.642e-01 2590.7 0.000246 ***
source2 -1.561e+02 7.387e-01 -211.3 0.003013 **
---
Signif. codes: 0 ‘***' 0.001 ‘**' 0.01 ‘*' 0.05 ‘.' 0.1 ‘ ' 1
Residual standard error: 1.562 on 1 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 3.447e+06 on 2 and 1 DF, p-value: 0.0003809
<SNIP>
Este es el resultado de la x coordenadas sólo. El extirpados de material es otro panel de salida encabezada por la "Respuesta " Y2"; es para que los y las coordenadas. En cada panel se desea comprobar que el residual de error estándar (expresado en coordenadas del mundo, generalmente metros) es aceptablemente pequeño. Entonces quieres comprobar que los residuos de los mismos (que se enumeran en la parte superior) de forma individual dentro de su rango de tolerancia para un ajuste: estas son las diferencias entre los datos y los valores pronosticados. El residual error estándar nos dice que el típico discrepancia entre una cocina equipada coordenada x y la intención (gcp) de la coordenada x es de alrededor de 1,56 metros.
Como ustedes saben, relativamente alta precisión numérica es necesario en este tipo de trabajo. Este resumen no tiene la suficiente precisión para, digamos, un mundo de archivo. En su lugar, extraer los coeficientes con
> print(a$coefficients, digits=10)
[,1] [,2]
(Intercept) 558910.7522289 6444331.5258144
source1 1461.6779888 152.7722764
source2 -156.0974128 1469.8705760
Como un ejemplo de cómo estos coeficientes de trabajo, podemos preguntar, R
para realizar la multiplicación de la matriz de encontrar donde (por ejemplo) el punto (5,5) va, recordando que el intercepto es manejado por la ampliación de estas dos dimensiones de los vectores de tres dimensiones mediante la inserción de un 1 en el principio:
> print(c(1, 5,5) %*% a$coefficients, digits=10)
[,1] [,2]
[1,] 565438.6551 6452444.74
La primera coordenada es de aproximadamente 1.35 baja y el segundo es acerca de 0.84 alta: estos son los aspectos negativos de la denuncia de los residuos.
Mucho, mucho más se puede hacer aquí. Por ejemplo, una matriz de "raw" puntos ahora puede ser transformada en un solo mando, el más complejo de ajuste puede ser hecho (como el polinomio se ajusta de orden superior); etc. El poder, la flexibilidad y la precisión de este software recomiendan como un propósito general de la solución a este problema de la transformación de los puntos de un sistema de coordenadas a otro.
Por cierto, la repetición de estos análisis sólo con los tres puntos en el ejemplo se genera la matriz de transformación afín
[,1] [,2]
(Intercept) 558915.7606071 6444328.3973676
1 1463.4093542 151.6907917
2 -158.5614756 1471.4097348
R
ofrece servicios útiles para el análisis de tales matrices. Por ejemplo, podemos constatar que esta transformación no un Euclidiana de movimiento (es decir, una composición de un uniforme de escala, rotación y traslación). Como un ejemplo, la Descomposición de Valor Singular se obtiene a través de
m <- tail(a$coefficients, 2) # The scale-rotation-skew portion of `a`
a.svd <- svd(m)
El resultado tiene tres partes: una rotación, dos factores de escala, y otro de rotación. Los factores de escala son diferentes:
> a.svd$d
[1] 1480.859 1470.313
Por lo tanto, podemos pensar que esta transformación como la inclusión de un reescalado factor que varía entre 1470 y 1481, dependiendo de la orientación. Usted puede trabajar con las orientaciones de la enfermedad vesicular porcina si te gusta analizando a.svd$v
y a.svd$u
, pero en los SIG esto rara vez se hace: simplemente queremos obtener un buen ajuste. Lo que los diferentes factores de escala en la SVD nos dicen, sin embargo, es que su plugin de QGIS no podrá ser de hasta el trabajo. Busca una solución que le permite especificar los coeficientes de la matriz de transformación (a
) directamente.