Modelação Geográfica, Cidades e Ordenamento do Território

Grupo integrado no e-GEO – Centro de Estudos de Geografia e Planeamento Regional

Sextante e R

Leave a comment

Este post vem a proposito de serie de posts sobre a modelacao espacial e sextante, mas surge tambem como um “parentesis” sobre o software estatistico R, que  ja foi referido neste blog.
Faco minhas as palavras do amcrgrodrigues sobre as potencialidades e versatilidade do R em todo o tipo de analise estatisticas, e aproveito para mostrar como se pode utilizar o R, a partir da toolbox do sextante.

Se tiverem o R instalado, e devidamente configurado dentro do Sextante, ele ira aparecer listado como um dos “algorithm providers” da toolbox. Para criar um novo script, devem expandir: “R Scripts->Tool->Create new R script”.

Image

Antes de continuar, aproveito para fazer um esclarecimento importante que me demorou algum tempo a entender (talvez porque a documentacao sobre esta funcionalidade seja tao escassa…): estes scripts nao sao propriamente de “R”, como o nome pode sugerir, mas sao scripts de Rpy que ‘e um binding de python para R. “Trocando por miudos”, isto quer dizer que a linguagem de programacao ‘e o Python, e que este acede directamente a funcoes de R. A sintaxe completa de R, nao ira funcionar neste contexto.

Se procurarem no manual de utilizador do QGIS, ha um capitulo sobre o sextante e um sub capitulo (mesmo muito pequeno!) sobre o R no sextante. Digamos que a grande vantagem de utilizar este interface de Python, ‘e que nos resolve o problema de input e output de informacao, uma vez que o sextante expoe os layers a estes scripts (para os ler, ha apenas umas pequenas convencoes de sintaxe que estao descritas no manual, e que eu tambem vou explicar mais a frente).

No use case que tenha vindo a descrever, tenho uma variavel que quero explicar (distribuicao de uma determinada especie) atraves de uma serie de variaveis ambientais. Sendo assim, achei que o R poderia ser util para compreender um pouco melhor o comportamento destas variaveis e a relacao entre elas, antes de proceder ao ajustamento de um GAM. Para isto, procurei fazer uma serie de scripts, que pudessem providenciar uma analise exploratoria dos dados, a que chamei “GAM scripts” (talvez o nome pre-GAM fosse mais adequado, uma vez que precedem o ajustamento do modelo!).

Uma das primeiras coisas que me pareceu importante foi analisar a correlacao das variaveis explicativas entre elas. Se sao de alguma forma dependentes, entao talvez nao seja boa ideia escolher esta variaveis. Para isso, vem a dar muito jeito uma matriz de scatterplot. Ha varias maneiras de gerar um scatterplot no R, e neste exemplo eu escolhi uma das mais simples. Este ‘e o conteudo do script para gerar o scatterplot:

##[GAM scripts]=group
##points=vector
##showplots
pairs(~z+sst+clor,data=points,lower.panel=panel.smooth,upper.panel=panel.smooth,main="Scatterplot Matrix")

As linhas precedidas de “##” sao parametros do script. A primeira linha assinala o grupo onde o script sera introduzido no menu do sextante (senao existe, ele criara um novo). A segunda linha, atribui um nome a um parametro de entrada que definimos como um layer vectorial (vector). Finalmente a terceira linha assinala o tipo de outputs: neste caso, um grafico. “group”, “vector” e “showplots” sao keywords do sextante. Para conhecerem mais keywords, podem dar uma vista de olhos nos scripts de “exemplo”, no menu do sextante. O “corpo” do script ‘e apenas uma linha, em que chamo a funcao “pairs” do R, e dou como parametros o layer de entrada (“points”), e alguns dos seus campos (z,sst e clor). Tambem estou a pedir para ele me apresentar uma linha de tendencia com os pontos (smooth). Depois de gravar o script com um nome (“scatterplot”), ele sera adicionado ao menu de “R” scripts, no grupo assinalado, e posso corre-lo com um duplo click. Ao executa-lo ser-me-ao pedidos os parametros de entrada (neste caso apenas um layer vectorial):

Image

E este sera o output:

Image

Este plot da-nos uma ideia se as variaveis estao ou nao correlacionadas (aparentemente nao estao muito); contudo, para ter a certeza o melhor mesmo ‘e calcular a correlacao entre cada par; para isso fiz outro script:


##layer=vector
##sst=field layer
##z=field layer
##clor=field layer
##[GAM scripts]=group
>cor(layer[[z]], layer[[sst]])
>cor(layer[[clor]], layer[[z]])
>cor(layer[[sst]], layer[[clor]])

A “novidade” em relacao ao script anterior, ‘e que peco como parametros de input os campos (tambem o podia ter feito no outro) e assim temos um script mais flexivel. A primeira linha define um input do tipo layer vectorial (vector) e as tres linhas subsequentes definem como inputs, atributos desse layer. No codigo, ao calcular a correlacao, refiro-me directamente as series que definimos como input. Outra “novidade” ‘e que nao defini nenhum output grafico (“showplots”), mas em vez disso estou a mostrar outputs da consola do R, que sao indicados por um “>” precedendo o comando. Este ‘e o menu de entrada, que surge ao executar o script:

Image

E como output temos as correlacoes

Image

A conclusao ‘e que as variaveis estao pouco relacionadas, e por isso se podem utilizar. O passo seguinte ‘e analisar a relacao de cada variavel independente com a variavel que pretendemos explicar: a presenca de uma determinada especie. Para isso, esta muito bem desenhar o histograma de densidades de cada uma das variaveis. Como a nossa variavel dependente assume dois valores apenas (0 e 1), interessava-me mostrar o histograma para cada um destes valores. Assim posso logo avaliar que valores de sst, clorofila ou batimetria estao associados a presencas ou ausencias da especie. Este foi o codigo que utilizei para criar outro script, neste caso analisando a relacao entre a clorofila (“clor”) e as presencas/ausencias da especie:

##[GAM scripts]=group
##points=vector
##showplots
library(sqldf)
library(ggplot2)
DF=data.frame(points)
s3=sqldf("select presence, clor from DF")
qplot(s3$clor, colour=factor(s3$presence), data=s3, geom="density")

Neste caso introduzi uma biblioteca de R (“sqldf”), que me permite aceder a serie atraves de uma query de SQL (puramente para efeitos demonstrativos). Outra biblioteca (“ggplot2”), ‘e responsavel por produzir o grafico. Alterando os parametros correspondente podemos produzir histogramas para as restantes series, no caso de presenca e ausencia da especie.

Image

Image

Image

Este codigo procura demonstrar algumas das potencialidades do R, dentro do sextante, e contribuir assim para preencher uma lacuna que existe na web em relacao a exemplos. Acrescento que nao sou expert do “R” e o codigo podia ser bastante “melhorado”, nomeadamente utilizando bibliotecas que providenciam funcoes mais “sofisticadas”, substituindo parametros hardcoded por variaveis de entrada, e introduzindo “labels” informativos em diversos outputs. Sugestoes de melhoramento destes scripts, sao bem vindas como comentarios!🙂

Author: doublebyte

H8ckr, geocoder, traceuse, skateboarder, person...

Deixe uma resposta

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s