Você está na página 1de 19

Anlisis exploratorio de datos

05/06/12

1 de 19

Anlisis exploratorio de datos

II. Datos bioclimticos y altitud


En est seccin integraremos datos bioclimticos, que refieren a variables derivadas de temperatura y precipitacin mensual, en la intencin de ofrecer valores con mayor sentido biolgico. Tomaremos los datos del WorldClim (http://www.worldclim.org/) de Robert J. Hijmans et al. (http://www.worldclim.org/worldclim_IJC.pdf) Los datos se procesarn con el software para clculo estadstico R (http://ww w.r-project.org/), se probo que el ejercicio funcionara en Mac OS X 10.7.4, Windows 7 64 bits, en R 2.15.
Nota: Instalar R en general es sencillo, siga las instrucciones del sito mencionado.

Para ejecutar el ejercicio que se presenta en esta seccin, se deben instalar los paquetes de R, sp, raster y rgdal, los dos primeros ya fueron instalados en la primer parte (obtencin y limpieza de datos). En una consola de R, escriba
install.package(sp) install.package(raster) install.package(rgdal)

Nota: Para instalar rgdal en Mac OS X siga las recomendaciones que se indican en http://cran.cnr.berkeley.edu/web/views/Spatial.html. Se debe instalar la librera gdal, la cual ha sido migrada a OS X por varios grupos, el que siempre nos ha resultado se encuentra en http://www.kyngchaos.com/software/frameworks#gdal_complete. Si tiene GRASS (http://grass.fbk.eu/) instalado en OS X, ya tiene instaladas las libreras de gdal y no es necesario volverlo hacer.
> install.packages("sp") Installing package(s) into /Users/rjimenez/Library/R/2.15/library (as lib is unspecified) trying URL 'http://cran.cnr.Berkeley.edu/bin/macosx/leopard/contrib/2.15/sp_0.9-99.tgz' Content type 'application/x-gzip' length 1121173 bytes (1.1 Mb) opened URL ================================================== ....

Como ayuda para trabajar en R existen ambientes integrados de desarrollo (IDE en ingls), que facilitan el uso de R, actualmente destaca RStudio (http://rstudio.org/), pero existen varios ms, vea http://stackoverflow.com/questions/1097367/what-ides-are-available-for-r-in-linux y http://www.sciviews.org/_rgui/projects/Editors.html. Recalcamos por importante, que en R (casi) todo lo que existe son objetos y (casi) todo lo que pasa son llamadas (ejecuciones) a funciones. Por ello en estos ejercicios a las variables (casi) siempre les llamamos objetos. Existen objetos tan sencillos como un entero y tan complejos (o ms) como objectos SpatialPointsDataFrames, que son puntos (coordenadas x, y) con atributos.

05/06/12

2 de 19

Anlisis exploratorio de datos

Incorporar los datos bioclimticos del WorldClim


Se pueden incorporar de varias formas en R, propondremos dos. La primera consiste en manualmente descargar los archivos del sitio de WorldClim y descomprimirlos en un solo directorio, para procesarlos con R haremos un pequeo programa que realizara el trabajo de forma automtica. Primero debemos bajar los archivos del sito de Web a nuestra computadora. Ya que utilizaremos los datos de ~1 km, usamos (http://www.worldclim.org/tiles.php), los tiles (mosaicos) a descargar en este ejercicio son el: 11, 12, 13, 22 y 23, se utilizara el formato GeoTIFF, las variables bioclimticas se encuentran en un archivo comprimido (zip) con las 19 variables bioclimticas (http://www.worldclim.org/bioclim). Por ejemplo para el tile 22 una vez descomprimido el archivo bio_22_tif.zip tendremos los siguientes 19 archivos, uno por cada variable bioclimtica.
rauljimenez:bio rjimenez$ ls -l *_22.tif -rwxr-xr-x@ 1 rjimenez staff 5009830 Nov -rwxr-xr-x@ 1 rjimenez staff 4955340 Nov -rwxr-xr-x@ 1 rjimenez staff 6999515 Nov -rwxr-xr-x@ 1 rjimenez staff 5758893 Nov -rwxr-xr-x@ 1 rjimenez staff 3522553 Nov -rwxr-xr-x@ 1 rjimenez staff 4457221 Nov -rwxr-xr-x@ 1 rjimenez staff 6539294 Nov -rwxr-xr-x@ 1 rjimenez staff 4683335 Nov -rwxr-xr-x@ 1 rjimenez staff 6302570 Nov -rwxr-xr-x@ 1 rjimenez staff 5103815 Nov -rwxr-xr-x@ 1 rjimenez staff 4943881 Nov -rwxr-xr-x@ 1 rjimenez staff 4591966 Nov -rwxr-xr-x@ 1 rjimenez staff 3275430 Nov -rwxr-xr-x@ 1 rjimenez staff 7093640 Nov -rwxr-xr-x@ 1 rjimenez staff 4921947 Nov -rwxr-xr-x@ 1 rjimenez staff 4999156 Nov -rwxr-xr-x@ 1 rjimenez staff 4799351 Nov -rwxr-xr-x@ 1 rjimenez staff 5100560 Nov -rwxr-xr-x@ 1 rjimenez staff 5090612 Nov 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 #En Windows usar dir *_22.tif 2011 bio10_22.tif 2011 bio11_22.tif 2011 bio12_22.tif 2011 bio13_22.tif 2011 bio14_22.tif 2011 bio15_22.tif 2011 bio16_22.tif 2011 bio17_22.tif 2011 bio18_22.tif 2011 bio19_22.tif 2011 bio1_22.tif 2011 bio2_22.tif 2011 bio3_22.tif 2011 bio4_22.tif 2011 bio5_22.tif 2011 bio6_22.tif 2011 bio7_22.tif 2011 bio8_22.tif 2011 bio9_22.tif

Nota: En R tambin podemos trabajar con los datos en formato Band Interleaved by Line (BIL), en el ejercicio puede remplazar los archivos GeoTIFF por los BIL y el proceso funcionar, en el cdigo se indican las lneas que debe cambiar, este formato esta formado de 2 archivo un encabezado (.hdr) y los datos (.bil), por ejemplo bio1_11.bil y bio1_11.hdr, este formato no requiere el paquete rgdal, que en ocasiones es latoso de instalar.

Descomprimimos los archivos en un solo directorio, as que tendremos 95 archivos (19 variables * 5 mosaicos {11, 12, 13, 22, 23}), haremos un programa para procesarlos, de otra forma tendramos que
05/06/12 3 de 19

Anlisis exploratorio de datos

importa uno por uno (95!) y luego unir por variable (bio1, bio2, ..., bio19) para tener un objeto raster por cada variable bioclimtica (19). La estructura general de estos ejercicios como se indico en la primer parte es: Ruta de trabajo/data. El subdirectorio data nos indica donde esta la ruta principal de los datos. Para que el ejercicio funcione, debe crear los mismos directorios en su computadora o cambiar el cdigo donde corresponda. Los datos los hemos dividido en: data/specimens /worldclim /alt /geographic (especmenes. Datos de presencia, catlogos, ausencias etc) (datos bioclimticos del WorldClim) (datos remuestreados de altitud del SRTM 90m) (cartografa digital)

Empecemos por cargar la librera para manejar rasters en R, ya que no es suficiente instalar un paquete, en cada sesin de R que se utilice, debe cargarlo, una forma es con la funcin library, solo la librera base no necesita cargarse en cada sesin (y algunas otras), cuando cargue raster, este a su vez cargara la librera sp, si es que no ha sido cargada previamente. Tambin definamos un par de objetos (variables) en R, que nos permitirn indicar donde estn nuestros datos y donde queremos salvar los resultados de nuestro trabajo.
Nota: Recuerde, debe cambiar dichas rutas segn donde vaya a trabajar en su computadora.

En particular con el objeto (variable) pathToBioClimaticFiles, indicamos donde estn nuestros archivos del WorldClim, los 95 archivos que obtuvo de descargarlos del sito de Web del WorldClim y descomprimirlos en un solo directorio, que en en nuestro caso se encuentran en ...data/worldclim/bio/, esto es, en /Users/rjimenez/Dropbox/project/data/worldclim/bio/.
Nota: En Windows, casi siempre la ruta comienza con la unidad de disco utilizada, por ejemplo, c:\usuarios\... .
library(raster) ## pathToData = ruta principal donde se encuentran sus datos, ## en otras secciones, vimos que tendremos datos de colecta de las especies, climas, etc. ## pathToBioclimaticFiles = ruta donde se encuentran los archivos de WorldClim # cmbielo segn corresponda pathToData <- "/Users/rjimenez/Dropbox/project/data/" pathToBioclimaticFiles <- paste(pathToData ,"worldclim/bio/", sep = "") # Esto es, pathToBioclimaticFiles = del objeto pathToData ms el texto worldclim/bio/, en este caso # "/Users/rjimenez/Dropbox/project/data/worldclim/bio/

Aunque por experiencia, no es recomendable no organizar los datos, los objetos anteriores pueden dejarse con cadena vaca (sin dato), esto es, pathToData <- y pathToBioClimaticFiles <- , si los archivos se encuentran en la ruta de trabajo, pero debe asegurarse de ello.
# setwd(/la ruta/donde se encuentran/nuestros archivos/) setwd(/Users/rjimenez/Dropbox/project/data/worldclim/bio/) #para este ejemplo

Para saber en que ruta se encuentra, en la sesin actual, en la consola de R utilice la funcin getwd, que significa get working directory.
05/06/12 4 de 19

Anlisis exploratorio de datos

> getwd() [1] "/Users/rjimenez/Dropbox/workspace/R"

Nota: En cualquier caso, para nuestro ejercicio suponemos que en dicho directorio solo tendremos archivos con extensin tif de las variables bioclimticas, que se desean procesar en R (en nuestro ejercicio las 19 existentes), aunque cuando buscamos los archivo, se hace un filtro para archivos que empiezan con bio seguido de un nmero.

Averiguamos cuales son las variables bioclimticas que tenemos (archivos), con la funcin list.files con un patrn bio#_.tif, esto es, todo lo que empiece con bio[un_nmero]_[cualquier_cosa_o_nada].tif.
> > > > > files <- list.files(path = pathToBioclimaticFiles, pattern = '^bio[0-9]+_.*\\.tif$') # Para usar BIL en vez de GeoTiff, en vez de la anterior lnea utilice la siguiente # files <- list.files(path = pathToBioclimaticFiles, pattern = '^bio[0-9]+_.*\\.bil$') # En este punto files contiene el nombre de los archivos de las 95 variables bioclimticas/region files [1] "bio10_11.tif" "bio10_12.tif" "bio10_13.tif" "bio10_22.tif" "bio10_23.tif" "bio11_11.tif" [7] "bio11_12.tif" "bio11_13.tif" "bio11_22.tif" "bio11_23.tif" "bio12_11.tif" "bio12_12.tif" [13] "bio12_13.tif" "bio12_22.tif" "bio12_23.tif" "bio13_11.tif" "bio13_12.tif" "bio13_13.tif" [19] "bio13_22.tif" "bio13_23.tif" "bio14_11.tif" "bio14_12.tif" "bio14_13.tif" "bio14_22.tif" [25] "bio14_23.tif" "bio15_11.tif" "bio15_12.tif" "bio15_13.tif" "bio15_22.tif" "bio15_23.tif" [31] "bio16_11.tif" "bio16_12.tif" "bio16_13.tif" "bio16_22.tif" "bio16_23.tif" "bio17_11.tif" [37] "bio17_12.tif" "bio17_13.tif" "bio17_22.tif" "bio17_23.tif" "bio18_11.tif" "bio18_12.tif" [43] "bio18_13.tif" "bio18_22.tif" "bio18_23.tif" "bio19_11.tif" "bio19_12.tif" "bio19_13.tif" [49] "bio19_22.tif" "bio19_23.tif" "bio1_11.tif" "bio1_12.tif" "bio1_13.tif" "bio1_22.tif" [55] "bio1_23.tif" "bio2_11.tif" "bio2_12.tif" "bio2_13.tif" "bio2_22.tif" "bio2_23.tif" [61] "bio3_11.tif" "bio3_12.tif" "bio3_13.tif" "bio3_22.tif" "bio3_23.tif" "bio4_11.tif" [67] "bio4_12.tif" "bio4_13.tif" "bio4_22.tif" "bio4_23.tif" "bio5_11.tif" "bio5_12.tif" [73] "bio5_13.tif" "bio5_22.tif" "bio5_23.tif" "bio6_11.tif" "bio6_12.tif" "bio6_13.tif" [79] "bio6_22.tif" "bio6_23.tif" "bio7_11.tif" "bio7_12.tif" "bio7_13.tif" "bio7_22.tif" [85] "bio7_23.tif" "bio8_11.tif" "bio8_12.tif" "bio8_13.tif" "bio8_22.tif" "bio8_23.tif" [91] "bio9_11.tif" "bio9_12.tif" "bio9_13.tif" "bio9_22.tif" "bio9_23.tif"

Ya decidimos que en este ejercicio procesaremos las 19 variables, as que puede resultar ocioso buscar que variables bioclimticas estn contenidas en nuestros archivos, pero dejamos el siguiente cdigo, por que puede ser til en otros casos, el cdigo de forma automtica revisa que variables existen (archivos), gracias a que sabemos que la nomenclatura que presentan los nombres de los archivos del WorldClim, es: bio[variableBioclimtica]_[mosaico].tif (.bil), por ello, extrayendo del nombre del archivo la parte de [variableBioclimtica] podemos saber que variables estn presentes, lo hacemos con las siguientes 3 lneas.
> bioVars <- gsub("^bio([0-9]+)_.*\\.tif$", "\\1", files, ignore.case = TRUE) > # bioVars <- gsub("^bio([0-9]+)_.*\\.bil$", "\\1", files, ignore.case = TRUE) # para BIL > bioVars <- unique(as.numeric(bioVars)) > bioVars <- sort(bioVars) > # En este punto bioVars es un vector con las 19 variables, s dejo todos los archivos > bioVars [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Si solo desea procesar algunas variables, puede en vez de dejar los 19 archivos de todos los mosaicos, dejar solo las que desea en la ruta de los archivos de WorldClim. Las 3 instrucciones anteriores para este ejercicio es lo mismo que decir bioVars <- c(1:19).
> # Si va procesar las 19 variables bioclimticas > bioVars <- c(1:19) > bioVars

05/06/12

5 de 19

Anlisis exploratorio de datos


[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

> # Si va procesar las primeras 10 variables > bioVars <- c(1:10) > bioVars [1] 1 2 3 4 5 6 7 8 9 10 > # si va procesar las variables 1, 3, 5 y 7, > bioVars <- c(1, 3, 5, 7) > bioVars [1] 1 3 5 7

La diferencia es que con las tres instrucciones se verifica por sistema la existencia de las variables bioclimticas (archivos), ya que los datos provienen de la funcin list.files. Importar rasters en R se puede hacer con la funcin raster del paquete raster, en trminos generales es
nombre_del_objeto_raster_en_R <- raster(ruta/nombre_del_archivo)

Tambin queremos unir en un solo raster los mosaicos 11, 12, 13, 22 y 23 por cada variable bioclimtica, que se puede hacer con la funcin merge del paquete raster, que es una instruccin para unir rasters y formar uno de extensin mayor.
nombre_del_objeto <- merge(raster1, raster2, ...)

Esto es, tendramos que teclear en la consola de R.


bio1_11 <- raster(ruta/bio1_11.tif) ... bio19_11 <- raster(ruta/bio19_11.tif) bio2_12 <- raster(ruta/bio1_12.tif) ...

y as para los 95 archivos. Y luego unirlos.


bio1 <- merge(bio1_11, bio1_12, bio1_13, bio1_22, bio1_23) ... bio19 <- merge(bio19_11, bio19_12, bio19_13, bio19_22, bio19_23)

Hacemos mejor una pequea funcin para que en vez de teclear todo, se procese de forma automtica
grids <- sapply(bioVars, function(x) { bioN <- paste('bio', x, '_', sep = '') # bio1_, bio2_, ..., bio19_ tiles <- files[grep(bioN, files)] # p. Ejem. Para x = 1. tiles contendr # "bio1_11.tif" "bio1_12.tif" # "bio1_13.tif" "bio1_22.tif" "bio1_23.tif" tiles <- paste(pathToBioclimaticFiles, tiles, sep = "") # se le agrega la ruta al archivo rasterToMerge <- toString(paste('raster(', tiles, ')', sep = '"')) #Funcin raster toMerge <- paste('merge(', rasterToMerge, ')', sep = '') #Funcin merge merged <- eval(parse(text = toMerge)) # Se ejecuta })

Con este cdigo lo que estamos haciendo es por cada variable bioclimtica en nuestro caso 19, la siguiente instruccin, ejemplo para variable bio1:
bio1 <- merge(raster("/rutaDondeSeEncuentranlosDatos/bio1_11.tif"), raster("/rutaDondeSeEncuentranlosDatos/bio1_12.tif"), raster("/rutaDondeSeEncuentranlosDatos/bio1_13.tif"), raster("/rutaDondeSeEncuentranlosDatos/bio1_22.tif"), raster("/rutaDondeSeEncuentranlosDatos/bio1_23.tif"))

05/06/12

6 de 19

Anlisis exploratorio de datos

Una vez procesado el objeto grids, es una lista que contiene todos los rasters. En realidad cada raster esta en un archivo temporal en su computadora en formato grd (formato base del paquete raster). Para comprobar se puede usar teclear grids en la consola de R, para conocer sus valor.
> class(grids) [1] "list" # grids es una lista > grids [[1]] class : RasterLayer dimensions : 7200, 10800, 77760000 (nrow, ncol, ncell) ... # Hartas cosas coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 values : /private/var/folders/w3/2z2vxh6x2gl570wv5fqyh3bw0000g/T/R_raster_tmp/rjimenez/raster_tmp_4791847441.grd ...# Hartas cosas # ...lista de las otras 18 variables .................

Nota: Este proceso (la ejecucin del objeto grids) con una laptop MacBook Pro, 16 GB en memoria, 2.3 GHz Intel Core i7, tardo hasta 7 minutos (paciencia!).

Como se observa, la lista tiene como nombre [[1]], ..., [[19]], podemos cambiar el nombre de las capas, por: bio1, bio2, ..., bio19, como corresponde.
names(grids) <- paste('bio', bioVars, sep='')

Recuerde que bioVars es un vector que nos indica que variables bioclimticas tenemos, en nuestro ejercicio todas, esto es, de 1 hasta la 19, entonces la funcin paste genera bio1, bio2, ..., bio19. Que es lo mismo que hacer la siguiente instruccin, nada ms nos ahorramos teclear las 19 bio_un_nmero.
names(grids) <- c('bio1', 'bio2', hasta, 'bio19')

En R podemos unir todos los rasters en uno de multicapas, en un solo objeto de clase RasterStack.
mexBio <- stack(grids)

Una vez unidos, puede desplegar el raster con la funcin plot, indicando la capa deseada:
> > > > > plot(mexBio, y = 'bio1) # y es la capa # {bio1, bio2, ..., bio19} # o por nmero # y =1 (1, 2, ... 19)

Nota: Tambin se pueden unir datos con brick, mexBio <- brick(grids), tendrn un objeto de la clase RasterBrick, que por lo que indica el manual, la diferencia principal es que los valores de las capas, se almacenan en un solo archivo, no uno por capa y por ello algunas operaciones pueden ser ms rpidas, puede cambiar por este tipo de objeto y el ejercicio funcionara sin problemas.
05/06/12 7 de 19

Anlisis exploratorio de datos

Recortando un raster Supongamos que no queremos toda la extensin de nuestro raster mexBio, digamos que estamos interesados en las coordenadas de -120, 12 a -85, 34, con la instruccin crop del paquete raster, se puede realizar el recorte, podemos indicar las coordenadas extremas de varias formas, una es usando la funcin extent del paquete raster.
> bbox <- extent(-120, 12, -85, 34) > bbox class : Extent xmin : -120 xmax : 12 ymin : -85 ymax : 34 # Recortamos mexBio > mexBio <- crop(mexBio, bbox)

Nota: Se puede importar un ShapeFile y pasarlo directo a la funcin de crop, se tomarn las coordenadas extremas del ShapeFile para hacer el recorte. Por ejemplo, usando la funcin readShapePoly del paquete maptools:
mex <- readShapePoly("/Users/rjimenez/Dropbox/project/data/geographic/contdv1mgw/contdv1mgw") bioMex <- crop(bioMex, mex)

Puede visualizar para ver el resultado


> plot(mexbio, y=bio1)

O puede desplegar varias variables a la vez.


> par(mfrow=c(2,2)) > plot(bioMex, y = c("bio1", "bio3", "bio7", "bio17"))

05/06/12

8 de 19

Anlisis exploratorio de datos

La segunda forma que presentamos de procesar en R los datos del WorldClim, es hacer todo desde R, con la funcin getData del paquete raster, en dicha funcin debe indicar que tipo de datos queremos obtener y algunos datos de resolucin espacial y que mosaico requerimos.
Nota: Hemos puesto la leyenda #length (comentario para R, esto es, no se ejecuta) para que sepa de que el tamao son los archivos, aunque cuando se ejecuta la funcin, se indica el tamao.
bio_11 <- getData('worldclim', var='bio', res=0.5, lon=-126, lat=35, path = pathToBioclimaticFiles) #length 95.6 Mb ### http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/bio_11.zip bio_12 <- getData('worldclim', var='bio', res=0.5, lon=-100, lat=35, path = pathToBioclimaticFiles) #length (95.6 Mb) ### http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/bio_12.zip bio_13 <- getData('worldclim', var='bio', res=0.5, lon=-75, lat=35, path = pathToBioclimaticFiles) #length 59.7 Mb ### http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/bio_13.zip bio_22 <- getData('worldclim', var='bio', res=0.5, lon=-100, lat=21, path = pathToBioclimaticFiles) # #length 31.5 Mb ### http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/bio_22.zip bio_23 <- getData('worldclim', var='bio', res=0.5, lon=-75, lat=21, path = pathToBioclimaticFiles) # #length 47.1 Mb ### http://biogeo.ucdavis.edu/data/climate/worldclim/1_4/tiles/cur/bio_23.zip

En este caso getData, nos regresa un objeto RasterStack (bio_11, bio_12, bio_13, bio_22, bio_23), con las 19 variables bioclimticas, del mosaico correspondiente, hagamos la unin de los mosaicos (tiles).
mexBio <- merge(bio_11, bio_12, bio_13, bio_22, bio_23)

Le ponemos nombre a las capas, a diferencia de la primer forma, en la que le pusimos nombre a las capas vista como un objeto del tipo lista de los 19 rasters, en este caso getData entrega un RasterStack, como la clase RasterStack es del tipo S4 (la nueva representacin orientada a objetos en R), una forma de acceder a los slots del objeto es a travs del smbolo @ y sabemos del manual que los datos de los nombres de la capa se encuentran en layerNames, sin embargo cuando sea posible, es mejor no escribir directamente a un slot, en este caso podemos usar la funcin layerNames.
layerNames(mexBio) <- c("bio1", "bio2", "bio3", "bio4", "bio5", "bio6", "bio7", "bio8", "bio9", "bio10", "bio11", "bio12", "bio13", "bio14", "bio15", "bio16", "bio17", "bio18", "bio19")

Nota: Con slots, por ejemplo, tendramos mexBio@layerNames <- paste('bio', c(1:19), sep ='')

Y recortamos.
mexBio <- crop(bioMex, bbox)

Un slot puede verse como un elemento o propiedad de un objeto de clase tipo S4, por ejemplo:
> setClass("coordenada", representation(x="numeric", y="numeric")) > miCoordenada <- new("coordenada", x = -102, y = 28) > miCoordenada@x [1] -102 > # Tambien se puede usar la funcin slot > slot(miCoordenada, "x") [1] -102

Esta segunda forma de procesar las variables bioclimticas en R resulta en un cdigo ms sencillo que la primer forma que se propuso, tarda ms la ejecucin, sin contar con el tiempo de descarga del archivo, en la misma computadora tomo alrededor de 17 minutos, la primer tcnica es de aplicacin
05/06/12 9 de 19

Anlisis exploratorio de datos

ms general, para cualquier tipo de raster que podamos tratar en R. Mucha de la capacidad de importar y exportar archivos rasters en R depende de rgdal, sin embargo, si no tuvo xito instalndolo, en lo que lo resuelve, puede usar el formato BIL en el ejercicio y no requiere rgdal, de hecho getData baja los archivo en formato BIL, no los GeoTIFF como hicimos en la primer propuesta. Con getData('worldclim',var = 'bio',res = 0.5,path = pathToBioclimaticFiles, ...), se crea un directorio \wc0.5\ dentro de pathToBioclimaticFiles, con todos los archivos, que en el caso de BIL son dos por variable, uno el encabezado y otro los datos, por ejemplo bio1_11.bil, bio1_11.hdr. Datos de elevacin Digamos que tambin queremos agregar los datos de altitud, estos se pueden obtener del Shuttle Radar Topography Mission (SRTM) (http://srtm.csi.cgiar.org/). Que genero datos mundiales de 90 metros de resolucin espacial. Obtenemos los datos con getData, para Mexico, Belice, Guatemala, El Salvador, Honduras, Costa Rica y Nicaragua, para ello usaremos el vocablo 'alt' dentro de getData, que obtiene los datos remuestreados del SRTM a la misma resolucin espacial de las variables bioclimticas (~1 Km). Indiquemos donde se encuentra nuestro directorio de archivos de elevacin y obtengamos los datos de elevacin.
pathToElevationFiles <- paste(pathToData ,"alt/", sep = "") altMEX <- getData('alt', country = 'MEX', path = pathToElevationFiles) altBLZ <- getData('alt', country = 'BLZ', path = pathToElevationFiles) altGTM <- getData('alt', country = 'GTM', path = pathToElevationFiles) altSLV <- getData('alt', country = 'SLV', path = pathToElevationFiles) altHND <- getData('alt', country = 'HND', path = pathToElevationFiles) altCRI <- getData('alt', country = 'CRI', path = pathToElevationFiles) altNIC <- getData('alt', country = 'NIC', path = pathToElevationFiles)

Nota: recuerden si quiere dejar los archivo en el directorio de trabajo, entonces puede dejar en blanco la variable pathToElevationFiles <- '' y pathToData <- ''.

Existe un problema con la funcin getData para los datos de altitud para Estados Unidos, el mismo a sido reportado y Robert J. Hijmans (autor del paquete raster), menciono que en la siguiente versin se corregira dicho error, la versin que hemos utilizado en el ejercicio es la 1.9-92 (1-May-2012). Entonces debemos importar los datos para Estados Unidos, sin la ayuda de getData, otra vez tenemos varias formas, presentamos dos. La primera, baje el archivo a su computadora de la direccin http://divagis.org/data/msk_alt/USA_msk_alt.zip y descomprima los archivos en la ruta pathToElevationFiles, importe el archivo USA1_msk_alt.gri a R y asegure una proyeccin correcta.
altUSA <- raster("RutaDelArchivo/USA1_msk_alt.gri") projection(altUSA) <- "+proj=longlat +datum=WGS84"

La segunda forma, es hacer todo dentro de R, use el siguiente cdigo, que baja, descomprime los datos

05/06/12

10 de 19

Anlisis exploratorio de datos

y lee el archivo.
pathToElevationFiles = paste(pathToData ,"alt/", sep = "") gridfilename <- paste(pathToElevationFiles, "USA1_msk_alt.gri", sep = "") #Si el archivo ya existe (ya fue descargado en otra ocasin), no lo vuelve a descargar if (!file.exists(gridfilename)) { fileNameAltEUA <- "http://diva-gis.org/data/msk_alt/USA_msk_alt.zip" tmp <- tempfile() # bajamos el archivo download.file(fileNameAltEUA, tmp) # Con la siguiente sentencia descomprimimos los archivo de USA_msk_alt.zip # en la ruta pathToElevationFiles en este caso "/Users/rjimenez/Dropbox/project/data/alt/ unzip(tmp, exdir=pathToElevationFiles) unlink(tmp) } altUSA <- raster(gridfilename) # importamos a R projection(altUSA) <- "+proj=longlat +datum=WGS84"

Unimos todos los rasters de elevacin.


alt <- merge(altUSA, altMEX, altBLZ, altGTM, altSLV, altHND, altCRI, altNIC) #Y recortamos a nuestras coordenadas extremas alt <- crop(alt, bbox)

Con los datos de elevacin podemos calcular por ejemplo, pendiente y aspecto, entre otros parmetros.
slopeAspect <- terrain(alt, opt=c('slope', 'aspect'), unit='degrees')

Agregamos la capa de altitud a nuestras 19 capas bioclimticas


mexBioAlt <- stack(mexBio, alt) #Nombramos las ultima variable mexBioAlt@layernames[20] <- c("elevacion")

Salvemos lo hecho Para salvar dependiendo del formato elegido, en algunos casos es indispensable tener rgdal, como ya mencionamos, en el siguiente ejemplo que es GeoTIFF, es el caso.
# nos aseguramos que el paquete rgdal este cargado
if (require(rgdal)) { #Opciones de GeoTIFF tiffOptions <- c("COMPRESS=DEFLATE", "TFW=YES", "PREDICTOR=2", "ZLEVEL=9" ) #Nombre y ruta del archivo tiffFileName <- paste(pathToBioclimaticFiles, "mexBioAlt.tif", sep = "") #Escribimos el archivo writeRaster(mexBioAlt, filename=tiffFileName, format="GTiff", datatype = 'INT2S', options=tiffOptions, overwrite=TRUE) }

Nota: si quiere saber que formatos tiene para salvar su raster, puede usar la funcin writeFormats() del paquete raster. Los formatos que no requieren rgdal son: raster, BIL, BIP, BSQ, SAGA, ascii, IDRISI, y CDF, este ltimo requiere la librera de ncdf.

El archivo mexBioAlt.tif se guardara en pathToBioclimaticFiles, y contiene todas las capas, este archivo se puede leer en R con la funcin stack para leer todas las capas, o raster una sola capa.
mexBioAlt <- stack(ruta/mexBioAlt.tif)

05/06/12

11 de 19

Anlisis exploratorio de datos

Podemos salvarlo en otros formatos, usemos BIL.


BILFileName <- paste(pathToBioclimaticFiles, "mexBioAlt3.bil", sep = "") writeRaster(mexBioAlt, filename=BILFileName, format="BIL", datatype = 'INT2S', overwrite=TRUE)

Con el amable permiso de Robert J. Hijmans, podemos redistribuir el resultado de este proceso, se puede obtener con el siguiente cdigo o descargue el archivo (se proporciona la direccin en el siguiente cdigo) e importndolo con la funcin stack, vase ltimas dos lneas del siguiente cdigo.
pathToData = "/Users/rjimenez/Dropbox/project/data/" # Ponemos nuestro archivo en .../data/worldclim/bio pathToBioclimaticFiles = paste(pathToData ,"worldclim/bio/", sep = "") gridfilename <- paste(pathToBioclimaticFiles, "mexBioAlt.tif", sep = "") #En caso que querer descargar el archivo en formato BIL, # comentar la lnea de arriba (ponerle un # al principio de la lnes) # y descomentar la siguiente #gridfilename <- paste(pathToElevationFiles, "mexBioAlt.bil", sep = "") #Si el archivo ya existe (ya fue descargado en otra ocasin), no lo vuelve a descargar if (!file.exists(gridfilename)) { urlTofileNameBioMexAlt <- "http://dl.dropbox.com/u/7804123/sdm/mexBioAlt_GeoTIFF.zip" ## 53.5 MB #En caso que querer descargar el archivo en formato BIL, # comentar la lnea de arriba (ponerle un # al principio de la lnes) # y descomentar la siguiente #urlTofileNameBioMexAlt <- "http://dl.dropbox.com/u/7804123/sdm/mexBioAlt_BIL.zip" ## 75.8 MB tmp <- tempfile() # bajamos el archivo download.file(urlTofileNameBioMexAlt, tmp) # Con la siguiente sentencia descomprimimos los archivo de USA_msk_alt.zip # en la ruta pathToElevationFiles en este caso "/Users/rjimenez/Dropbox/project/data/alt/ unzip(tmp, exdir=pathToElevationFiles) unlink(tmp) } mexBioAlt <- stack(gridfilename) # importamos a R # Para ponerle nombre a las capas. mexBioAlt@layernames = c("bio1","bio2","bio3","bio4","bio5","bio6","bio7","bio8","bio9","bio10", "bio11","bio12","bio13","bio14","bio15","bio16","bio17","bio18","bio19","elevacion")

Integrar los registros de presencia de especmenes con los datos tipo raster. Del ejercicio de la primer seccin, ya tenemos los registros de especmenes del genero Casearia, que se obtuvieron del GBIF y se les realizo algunos procesos de limpieza. En el caso del ejercicio de la primer seccin los registros quedaron como un objeto de la clase sp (del paquete sp de R), en especifico de la clase SpatialPointsDataFrame. Si quiere ver que datos contiene, por ejemplo los primero 5 registros, acceda al slot data del objeto.
> class(specimens) [1] "SpatialPointsDataFrame" attr(,"package") [1] "sp" > specimens@data[1:5,] Date.collected scientificName 737 1984-08-09 Casearia sylvestris 738 1985-07-03 Casearia corymbosa 739 1984-09-10 Casearia sylvestris 740 1985-05-03 Casearia corymbosa 741 1985-07-03 Casearia corymbosa

05/06/12

12 de 19

Anlisis exploratorio de datos

Nota: recuerde que una forma de ver los slots de un objeto de clase S4, es con @.

Si tiene sus propios datos, por ejemplo, en formato texto (ASCII, UTF8, ...), lalos con read.table o read.csv, por ejemplo, el archivo que salvamos de la seccin previa casearia.csv.
rauljimenez:specimens rjimenez$ # veamos las primeras 8 lineas de nuestro archivo rauljimenez:specimens rjimenez$ # desde una terminal en Mac o Linux, rauljimenez:specimens rjimenez$ # en Windows use more casearia.csv en un terminal de DOS rauljimenez:specimens rjimenez$ head -8 casearia.csv Date.collected,Latitude,Longitude,scientificName 09/08/1984,14.9,-92.25,Casearia sylvestris 03/07/1985,14.888,-92.482,Casearia corymbosa 10/09/1984,14.9,-92.25,Casearia sylvestris 03/05/1985,14.92,-92.38,Casearia corymbosa 03/07/1985,14.888333,-92.48167,Casearia corymbosa 03/05/1985,14.92,-92.38,Casearia nitida 30/11/1984,14.99,-92.448,Casearia sylvestris

En R, como hemos venido haciendo indicamos las rutas, para luego leer los datos.
> > > > > > > > > > > pathToSpecimensFiles <- paste(pathToData ,"specimens/", sep = "") specimensFilename <- paste(pathToSpecimensFiles, "casearia.csv", sep = "") # En este caso: # fileEncoding = UTF-8. Ya que el archivo contiene acentos y otro tipo de caracteres, # este tipo ha resultado la mejor forma de decodificar los archivos de texto del GBIF. # na.string=c(). Cadena vaca para los valores faltantes. # header = TRUE. EL archivo tiene encabezado que contiene el nombre de los campos. # stringAsFactor = FALSE. Los campos con valores de caracteres no se tomaran como variables # categricas, esto es deseable para algunos campos pero no para todos. # ya una vez importado los datos puede usar la funcin asFactor(). misDatos <- read.csv(specimensFilename, na.strings=c(""), header=TRUE, fileEncoding = "UTF-8", stringsAsFactors = FALSE) > class(misDatos) [1] data.frame

Vamos a suponer que sus datos tiene los mismos campos que tratamos en la primer seccin, esto es, fecha de colecta, latitud, longitud y nombre cientfico y sigue la nomenclatura de GBIF (Darwin Core), esto es, suponemos que nuestro archivo y por ende el objeto misDatos, tienen los siguientes campos Date.collected, Latitude, Longitude, scientificName, como en el ejemplo anterior de casearia.csv. Haremos el ejercicio con ambos tipos de objetos, de clase sp {SpatialPointsDataFrame} y del tipo data.frame (los datos que obtuvo con read.csv (misDatos)). La funcin extract del paquete raster nos ofrece la funcionalidad de obtener los datos de un raster basados en la ubicacin de otros datos espaciales, en trminos generales es.
extract(nuestro_raster, nuestro_objeto_clase_SpatialPoints)

En el caso de usar los datos de la primer seccin, esto es, de clase SpatialPointsDataFrame tendramos.
> specimensMexVars1 <- extract(mexBioAlt, specimens, method = bilinear) > class(specimensMexVars1) [1] "matrix"

Donde method corresponde al mtodo de extraccin de los datos del raster, si omite el parmetro, que
05/06/12 13 de 19

Anlisis exploratorio de datos

es lo mismo que method = simple, se toma el valor del pixel que corresponda a la coordenada, el mtodo bilinear, como en el ejemplo de arriba, se trata del valor interpolado de los cuatro vecinos ms cercanos al punto (coordenadas), existe otro mtodo que permite indicar un radio alrededor del punto, del cual se extraer el valor. Si sus datos provienen de la lectura de un archivo de texto, como lo ejemplificamos anteriormente (misDatos), esto es, tiene un Data Frame como clase de su objeto que contiene los datos de registros de presencia de especies puede hacer lo siguiente.
> # Extraer las coordenadas y dejarlas en un objeto > misDatosCoordenadas <- cbind(misDatos$Longitude, misDatos$Latitude) > specimensMexVars2 <- extract(mexBioAlt, misDatosCoordenadas, method = 'bilinear') > class(specimensMexVars2) [1] "data.frame"

Hemos generado los objetos specimensMexVars1 y specimensMexVars2, utilizando la funcin extract con un objeto clase sp y Data Frame respectivamente, el resultado (valores) es el mismo en ambos casos, la diferencia es que para el primer caso (clase sp) el resultado es de tipo matriz y para el segundo caso (Data Frame) es de tipo Data Frame. El resultado son los valores de las 20 variables (19 bioclimticas y elevacin) que corresponden en valor a la interpolacin de los cuatro vecinos ms cercanos al punto (coordenadas) de presencia de la especie.
Nota: Ambos objetos specimensMexVars1 y specimensMexVars2,matriz o Data Frame, respectivamente, tienen una correspondencia uno a uno con nuestros datos de especmenes, esto es, specimens y misDatos, respectivamente.

Podemos revisar que datos tenemos.


> # para el caso en que la funcin extract fue ejecutada contra un datos de clase SpatialPoints > head(specimensMexVars1) bio1 bio2 bio3 bio4 bio5 bio6 bio7 bio8 bio9 bio10 bio11 bio12 [1,] 265.5 127.00 77.00 652.0000 346 182.7500 163.2500 263.0000 258.75 274.75 257.7500 2621.750 [2,] 277.0 131.00 77.00 719.1080 359 189.9796 169.0204 275.0204 268.00 287.00 267.9796 1939.054 [3,] 265.5 127.00 77.00 652.0000 346 182.7500 163.2500 263.0000 258.75 274.75 257.7500 2621.750 [4,] 275.0 130.09 76.09 747.0800 357 188.0000 169.0000 274.0000 266.00 285.00 265.1000 2033.750 [5,] 277.0 131.00 77.00 719.5007 359 189.9700 169.0300 275.0300 268.00 287.00 267.9700 1939.553 [6,] 275.0 130.09 76.09 747.0800 357 188.0000 169.0000 274.0000 266.00 285.00 265.1000 2033.750 bio13 bio14 bio15 bio16 bio17 bio18 bio19 elevacion [1,] 495.5000 8.75 82.5 1233.0000 30.25 460.5000 112.50000 160.50000 [2,] 390.1988 3.00 90.0 961.2768 11.00 268.8796 68.06000 17.55920 [3,] 495.5000 8.75 82.5 1233.0000 30.25 460.5000 112.50000 160.50000 [4,] 396.3200 4.00 87.0 979.2200 14.90 307.0200 84.50000 41.67000 [5,] 390.2110 3.00 90.0 961.3625 11.00 269.0694 68.09996 17.53958 [6,] 396.3200 4.00 87.0 979.2200 14.90 307.0200 84.50000 41.67000 > > # Para el caso en que la funcin extract fue ejecutada contra datos en un data frame > head(specimensMexVars2) bio1 bio2 bio3 bio4 bio5 bio6 bio7 bio8 bio9 bio10 bio11 bio12 [1,] 265.500 127.00 77.00 652.0000 346 182.7500 163.2500 263.0000 258.750 274.750 257.7500 2621.750 [2,] 277.000 131.00 77.00 719.1080 359 189.9796 169.0204 275.0204 268.000 287.000 267.9796 1939.054 [3,] 265.500 127.00 77.00 652.0000 346 182.7500 163.2500 263.0000 258.750 274.750 257.7500 2621.750 [4,] 275.000 130.09 76.09 747.0800 357 188.0000 169.0000 274.0000 266.000 285.000 265.1000 2033.750 [5,] 277.000 131.00 77.00 719.5007 359 189.9700 169.0300 275.0300 268.000 287.000 267.9700 1939.553 [6,] 275.000 130.09 76.09 747.0800 357 188.0000 169.0000 274.0000 266.000 285.000 265.1000 2033.750 bio13 bio14 bio15 bio16 bio17 bio18 bio19 elevacion [1,] 495.5000 8.75 82.5 1233.0000 30.250 460.5000 112.50000 160.50000 [2,] 390.1988 3.00 90.0 961.2768 11.000 268.8796 68.06000 17.55920 [3,] 495.5000 8.75 82.5 1233.0000 30.250 460.5000 112.50000 160.50000 [4,] 396.3200 4.00 87.0 979.2200 14.900 307.0200 84.50000 41.67000 [5,] 390.2110 3.00 90.0 961.3625 11.000 269.0694 68.09996 17.53958

05/06/12

14 de 19

Anlisis exploratorio de datos


[6,] 396.3200 4.00 87.0 979.2200 14.900 307.0200 84.50000 41.67000

Los objetos del tipo sp se pueden visualizar de forma sencilla.


> plot(data, col = "green", pch =20)

Si quiere que el resultado de la extraccin ( specimensMexVars1, specimensMexVars2) este integrada a su objeto, con los datos de los especmenes, puede utilizar la funcin cbind. Recordemos lo que los datos actualmente contienen, unamos con cbind y verifiquemos el resultado.
> # Antes de unirlos > specimens@data[1:5,] Date.collected scientificName 737 1984-08-09 Casearia sylvestris 738 1985-07-03 Casearia corymbosa 739 1984-09-10 Casearia sylvestris 740 1985-05-03 Casearia corymbosa 741 1985-07-03 Casearia corymbosa > # Unimos > specimens@data <- cbind(specimens@data, specimensMexVars1) > # Despues de unirlo > specimens@data[1:5,] Date.collected scientificName bio1 bio2 bio3 bio4 737 1984-08-09 Casearia sylvestris 265.5 127.00 77.00 652.0000 738 1985-07-03 Casearia corymbosa 277.0 131.00 77.00 719.1080 739 1984-09-10 Casearia sylvestris 265.5 127.00 77.00 652.0000 740 1985-05-03 Casearia corymbosa 275.0 130.09 76.09 747.0800 741 1985-07-03 Casearia corymbosa 277.0 131.00 77.00 719.5007 bio9 bio10 bio11 bio12 bio13 bio14 bio15 bio16 737 258.75 274.75 257.7500 2621.750 495.5000 8.75 82.5 1233.0000 738 268.00 287.00 267.9796 1939.054 390.1988 3.00 90.0 961.2768 739 258.75 274.75 257.7500 2621.750 495.5000 8.75 82.5 1233.0000 740 266.00 285.00 265.1000 2033.750 396.3200 4.00 87.0 979.2200 741 268.00 287.00 267.9700 1939.553 390.2110 3.00 90.0 961.3625 elevacion 737 160.50000 738 17.55920 739 160.50000 740 41.67000 741 17.53958

bio5 bio6 bio7 bio8 346 182.7500 163.2500 263.0000 359 189.9796 169.0204 275.0204 346 182.7500 163.2500 263.0000 357 188.0000 169.0000 274.0000 359 189.9700 169.0300 275.0300 bio17 bio18 bio19 30.25 460.5000 112.50000 11.00 268.8796 68.06000 30.25 460.5000 112.50000 14.90 307.0200 84.50000 11.00 269.0694 68.09996

Nota: Recuerde (del manual del paquete sp) que los datos de coordenadas en la clase sp estn en el slot coords.

Para el caso misDatos, sera igual de simple.


> # Antes de unirlos > misDatos[1:5,] Date.collected Latitude Longitude scientificName 737 1984-08-09 14.90000 -92.25000 Casearia sylvestris 738 1985-07-03 14.88800 -92.48200 Casearia corymbosa 739 1984-09-10 14.90000 -92.25000 Casearia sylvestris 740 1985-05-03 14.92000 -92.38000 Casearia corymbosa 741 1985-07-03 14.88833 -92.48167 Casearia corymbosa > misDatos <- cbind(misDatos, specimensMexVars2) > misDatos[1:5,] Date.collected Latitude Longitude scientificName bio1 bio2 bio3 bio4 bio5 bio6 737 1984-08-09 14.90000 -92.25000 Casearia sylvestris 265.5 127.00 77.00 652.0000 346 182.7500 738 1985-07-03 14.88800 -92.48200 Casearia corymbosa 277.0 131.00 77.00 719.1080 359 189.9796

05/06/12

15 de 19

Anlisis exploratorio de datos

739 740 741 737 738 739 740 741 737 738 739 740 741

1984-09-10 14.90000 -92.25000 Casearia sylvestris 265.5 127.00 77.00 652.0000 346 1985-05-03 14.92000 -92.38000 Casearia corymbosa 275.0 130.09 76.09 747.0800 357 1985-07-03 14.88833 -92.48167 Casearia corymbosa 277.0 131.00 77.00 719.5007 359 bio7 bio8 bio9 bio10 bio11 bio12 bio13 bio14 bio15 bio16 bio17 163.2500 263.0000 258.75 274.75 257.7500 2621.750 495.5000 8.75 82.5 1233.0000 30.25 169.0204 275.0204 268.00 287.00 267.9796 1939.054 390.1988 3.00 90.0 961.2768 11.00 163.2500 263.0000 258.75 274.75 257.7500 2621.750 495.5000 8.75 82.5 1233.0000 30.25 169.0000 274.0000 266.00 285.00 265.1000 2033.750 396.3200 4.00 87.0 979.2200 14.90 169.0300 275.0300 268.00 287.00 267.9700 1939.553 390.2110 3.00 90.0 961.3625 11.00 bio19 elevacion 112.50000 160.50000 68.06000 17.55920 112.50000 160.50000 84.50000 41.67000 68.09996 17.53958

182.7500 188.0000 189.9700 bio18 460.5000 268.8796 460.5000 307.0200 269.0694

Misclaneos
Si quiere extraer los datos de longitud y latitud de su objeto clase SpatialPoints, lo puede hacer accediendo al slot de las coordenadas (coords), por ejemplo, con la siguiente instruccin.
> misCoordenadas <- specimens@coords > # Que da como resultado una matriz > class(misCoordenadas) [1] "matrix" > # si los quiere ver como un data frame > misCoordenadas <- as.data.frame(specimens@coords) > class(misCoordenadas) [1] "data.frame" > datos[1:7,] Longitude Latitude 1 -92.25000 14.90000 2 -92.48200 14.88800 3 -92.25000 14.90000 4 -92.38000 14.92000 5 -92.48167 14.88833 6 -92.38000 14.92000 7 -92.44800 14.99000

Tal vez falta decir como convertimos datos tabulares a un objeto espacial de puntos, suponiendo que lo nico que sabe es que los datos tienen como sistema de referencia coordenado la longitud y latitud, esto es, no conoce otros datos, como por ejemplo el datum. Podemos construir el objeto de clase SpatialPoints de la siguiente forma.
> coordinates(misDatos) <- ~Longitude+Latitude > crs <- CRS("+proj=longlat") > proj4string(misDatos) <- crs # Listo ya es un SpatialPoints, como contiene datos que le agregamos de un data frame # en realidad se trata de un SpatialPointsDataFrame > class(misDatos) [1] "SpatialPointsDataFrame" attr(,"package") [1] "sp"

05/06/12

16 de 19

Anlisis exploratorio de datos

Salvar lo hecho Para guardar sus datos, proponemos dos formas, salvarlo como ShapeFile o como datos tabulares mediante un archivo delimitado por comas (csv). Como ShapeFile.
> # Otra vez, le indicamos en que ruta y nombre queremos salvar el resultado, > # Claro puede directamente en la funcin writeOGR escribir la ruta y nombre > pathToSpecimensFiles = paste(pathToData ,"specimens/", sep = "") > specimensFilename <- "mexBioAlt" > writeOGR(specimens, pathToSpecimensFiles, specimensFilename, driver="ESRI Shapefile") Warning message: In writeOGR(specimens, specimensFilename, "specimens", driver = "ESRI Shapefile") : Field names abbreviated for ESRI Shapefile driver

Nota: El objeto a convertir a ShapeFile debe ser del tipo SpatialPoints. Si quiere usar misDatos debe convertirlos a un SpatialPoint , como se indico arriba: coordinates(misDatos) <- ~Longitude+Latitude

Al ejecutar la funcin writeOGR nos advierte que ha abreviado los nombres de los campos, recordemos que el formato ShapeFile para sus atributos se basa en (el viejsimo) DBF por ello intentara abreviar los nombres de los campos a 8 o menos caracteres (solo aquellos campos con nombre que tengan ms de 8 caracteres). Como se ve en la figura Date.collected, scientificName, han sido cambiados por Dt.cllc, scntfcN, respectivamente.
Nota: depende de la funcin que se utilice, no siempre es 8 caracteres mximo para nombre de un campo, pueden ser un poco ms.

Los archivos del ShapeFile quedan en: .../data/specimens/ Son tres archivos: mexBioAlt.dbf mexBioAlt.shp mexBioAlt.shx Esta funcin (writeOGR) es del paquete rgdal, si no lo pudo instalar, instale maptool (es ms fcil) y utilice writePointsShape.
Nota: Existen otros paquetes en R para escribir y leer ShapeFiles.
> library(maptools) # previamente debi haberla instalado (install.package...) ... > #Convertimos a SpatiaPoints ya que lo requiere al funcin writePointsShape > coordinates(misDatos) <- ~Longitude+Latitude > proj4string(misDatos) <- CRS("+proj=longlat") > pathToSpecimensFiles = paste(pathToData ,"specimens/", sep = "") > specimensFilename <- paste(pathToSpecimensFiles, "mexBioAlt", sep = "") > writePointsShape(misDatos, specimensFilename)

En este caso aunque no marco ninguna advertencia, tambin a recortado los nombre de los campos.

05/06/12

17 de 19

Anlisis exploratorio de datos

Como se ve en la figura Date.collected, scientificName, han sido cambiados por Date_colle, scientific, respectivamente.

Como archivo de texto delimitado por comas (csv): Si los datos estn en un objeto de clase SpatialPoints, use @ para acceder al slot de los datos, los cuales estn en el slot data.
PathToSpecimensFiles = paste(pathToData ,"specimens/", sep = "") specimensFilename = paste(pathToSpecimensFiles, "MexBioAlt.csv", sep = "") write.csv(specimens@data, specimensFilename, na="")

Si sus datos son un Data Frame, como el que se discuti anteriormente.


specimensFilename = paste(pathToSpecimensFiles, "MexBioAlt.csv", sep = "") write.csv(misDatos, specimensFilename, na="") # Suponiendo que no ha convertido misDatos a un SpatialPoints

Material adicional (cdigo de R y archivo de texto de presencia de especies)


Los archivos con los cdigos en R utilizados se pueden obtener del siguiente link http://dl.dropbox.com/u/7804123/sdm/codigoYdatos.zip El archivo comprimido (zip) contiene: Archivo
altitud.R casearia_citation.txt casearia_rights.txt casearia.csv

Descripcin
Ejercicio para importar archivos raster del SRTM Forma de citar los datos originales obtenidos de GBIF, vase seccin I Derechos de los datos originales obtenidos del GBIF, vase seccin I Datos del gnero casearia.csv para Mxico del GBIF

bajarRasterMexBioAlt.R Para bajar el archivo raster GeoTIFF o BIL mexBioAlt

05/06/12

18 de 19

Anlisis exploratorio de datos

extraerYunir.R readCSV.R salvarBIL.R salvarGeoTIFF.R worldclim_1.R worldclim_2.R

Ejercicio para extraer datos de un raster a partir de un objeto clase Data Frame y SpatialPoints y luego unirlo con nuestro datos, en nuestro caso de presencia de especies Ejercicio para leer archivo de texto delimitado por comas Ejercicio para salvar raster en formato BIL Ejercicio para salvar raster en formato GeoTIFF Ejercicio para importar archivos Raster del worldClim. Primer propuesta Ejercicio para importar archivos Raster del worldClim. Segunda propuesta

En R puede leer un archivo con source(ruta/nombre_del_archivo), pero esto ejecuta el cdigo y los archivos proporcionados, todava tiene que editarlos, utilice un IDE, como se menciono en la primer parte de esta seccin (por ejemplo RStudio) o un editor de texto notepad (o notepead++) en Windows y cualquiera de los muchos que tiene a la mano en Mac o Linux. Salvo los datos provenientes del GBIF, que se indica los derechos y forma de citar, los archivos con los ejemplos de cdigo puede usarlos sin ninguna restriccin.

Referencias
R Development Core Team. 19992012. An introduction to R, Notes on R: A Programming Environment for Data Analysis and Graphics. (http://cran.r-project.org/doc/manuals/R-intro.pdf) Chambers, John. 2008. Software for Data Analysis, Springer. El libro que los programadores (informticos) leen (o deben leer) para entender R, muy bueno y serio, si logras no dormirte, se aprende mucho. CRAN, busque los manuales de los paquetes que se utilizan en este ejercicio, sp, raster, rgdal, maptools. Puede usar Rseek (http://www.rseek.org/). O Con la funcin help en la consola de R, por ejemplo help(sp) o help(raster-package) Hijmans, R.J., S.E. Cameron, J.L. Parra, P.G. Jones and A. Jarvis, 2005. Very high resolution interpolated climate surfaces for global land areas. International Journal of Climatology 25: 1965-1978. Joseph Adler. 2009. R in a Nutshell, A desktop Quick Refence. O'Reilly Media de todo un poco Spector, Phil. 2008. Data Manipulations with R, Springer. Un gran libro R Development Core Team. 19992012. Writing R Extensions (http://cran.rproject.org/doc/manuals/R-exts.pdf)

05/06/12

19 de 19

Você também pode gostar