La interpolación de variables climáticas es compleja, dado que los datos disponibles generalmente varían espacialmente con mayor celeridad que la que se pueden muestrear. Para ello, se utilizan multitud de métodos que tratan de suplir la falta de datos mediante variables auxiliares. Otra manera consiste en usar métodos analísticos en los cuales se ajustan polinomios a las muestras blah blah blah.

Interpolación de datos bidimensionales

Los datos bidimensionales (de tipo x,y,w) se pueden interpolar con GRASS fácilmente usando RST. Para ello, hay que decidir:

  • La región y resolución a usar.
  • Los parámetros de interpolación.

Eligiendo la región

Sencillamente, se escoge un raster adecuado, y se usa el siguiente comando:

g.region rast=raster res=<resolución>

donde <resolución>es la resolución de la capa a interpolar. Ahora bien, dado que vamos a relizar unas pruebas para elegir los parámetros de interpolación, conviene elegir una región para hacer pruebas, usando por ejemplo, d.zoom.


Eligiendo los parámetros de interpolación

Los parámetros de interpolación se eligen mediante cross-validation. Para ello, se va a escoger un criterio objetivo (la desviación estándar ha de ser lo menor posible y ausencia de sesgos, o sea, la media ha de ser lo más cercana posible a 0). Para ello, vamos a iterar los valores de tension y suavizado:

for ((smooth=0; smooth<=20; smooth=smooth+1))

do

for ((tension=0; tension<=100; tension=tension+10))

do

v.surf.rst -c input=lluvia zcolumn="anual" cvdev=cvdevmap_${tension}_${smooth} tension=${tension} smooth=${smooth};

done

done

Y ya tenemos las cross validations hechas...

touch tension.dat

for ((smooth=0; smooth<=20; smooth=smooth+1))

do

for ((tension=0; tension<=100; tension=tension+5))

do

v.univar -g cvdevmap_${tension}_${smooth} column=flt1 type=point|awk -F "=" '{if ($1=="population_stddev"){print '${tension},'${smooth}',$2}}' >> tension.dat

done

done

Finalmente, si sólo consideramos un valor de suavizado, tendremos una gráfica con esta forma:


En efecto, parece que para la zona en cuestión, los valores por defecto (tensión de 40) producen un error medio (en el sentido RMSE) de 66 unidades (en este caso, mm de lluvia acumulados en un año), mientra que otros valores reducen ese número (aunque no de manera significativa. Vista la gráfica, puede resultar interesante ver qué superficies se han interpolado con los distitnos parámetros.

Interpolando con un Modelo de Elevación Digital

La vasta mayoría de las variables observadas en las estaciones meteorológicas varían de manera muy significativa con (entre otras cosas) la altura. Las RST permiten ajustar un polinomio a una serie de datos (x,y,z,w) y luego extraer un raster a la altura adecuada.

El procedimiento es más o menos igual al descrito anteriormente, con la salvedad de que se usa v.vol.rst, y que hay que especificar una región como un volumen, no como un plano (o sea, con resolución vertical, además de la horizontal). Para ello, seleccionaremos la región como

g.region rast=<raster_region> t=<h_max> b=<h_min> tbres=<h_res>

donde <raster_region> es un raster para especificar la región, <h_max> y <h_min> son, respectivamente altura máxima y mínima y <h_res> es la resolución vertical. A continuación, un script en Bash para llevar a cabo la cross validation

#!/bin/bash
for ((smooth=0; smooth<=20; smooth=smooth+1))
do
for ((tension=0; tension<=100; tension=tension+10))
do
v.vol.rst --o -c cvdev=cvdev_${tension}_${smooth} input=lluvia \
wcolumn="anual" tension=${tension} \
smooth=${smooth} maskmap=mascara

done

done

touch ~/clima/cross_val3d.txt
for ((smooth=0; smooth<=20; smooth=smooth+1))
do
for ((tension=0; tension<=100; tension=tension+10))
do
v.univariate -g cvdev_${tension}_${smooth} column=flt1 \
type=point|awk -F "=" '{if ($1=="population_stddev"){print '${tension},'${smooth}',$2}}' \
>> ~/clima/cross_val3d.txt

done

done


La interpolación se realiza mediante

v.vol.rst cellout=salida input=<vect_entrada> cellint=<dem_raster> wcolumn=<columna_interpolación>