Documento realizado el
[1] "Thu Aug 18 15:47:20 2022"
Estos ejemplos corresponden a figuras similares a la figura 2a de Salas et al. (2006) y figura 1 de Soto et al. (2010).

Cargando los datos de ejemplo

Ocuparemos la dataframe pspRuca del paquete datana del libro Análisis de datos con el programa estadístico R: una introducción aplicada de Salas-Eljatib (2021).

library(datana)
data(pspRuca)
df <- pspRuca
head(df) #primeras seis filas
  tree.no           spp status    dbh x.coord y.coord crown.class
1       1    N. obliqua      1  65.50  2.7282 0.62986           1
2       2  A. punctatum      1  75.90  9.1970 4.30179           1
3       3  A. punctatum      1  44.10 17.1026 0.62677           1
4       4 E. cordifolia      1 135.75 20.0614 0.57813           1
5       5  A. punctatum      1  78.25  3.9795 2.20588           1
6       6    N. obliqua      1  91.80  5.1683 1.88111           1
nrow(df) #numero de filas de la dataframe
[1] 716

Esta dataframe contiene la informacion de coordenadas cartesianas de arboles en una parcela de muestreo de 10.000 m\(^2\) (1 hectárea) en un bosque adulto de Olivillo-Roble-Laurel-Ulmo en el predio Rucamanque (Depresion intermedia de la región de la Araucanía, Chile). Los datos fueron recolectados por Salas et al. (2006).

Los gráficos

Se muestra a continuacion dos tipos de gráficos: uno donde se representan la distribucion espacial de puntos y (b) otro donde ademas se incorpora informacion sobre una covariable observada en cada coordenada espacial. Ejemplos del primero se pueden observar en Salas et al. (2006) y del segundo en Soto et al. (2010).

Para realizar esta figura se cargará el paquete geoR Ribeiro and Diggle (2001) y otros relacionados como sigue

library(geoR)
--------------------------------------------------------------
 Analysis of Geostatistical Data
 For an Introduction to geoR go to http://www.leg.ufpr.br/geoR
 geoR version 1.8-1 (built on 2020-02-08) is now loaded
--------------------------------------------------------------
library(splancs)
Loading required package: sp

Spatial Point Pattern Analysis Code in S-Plus
 
 Version 2 - Spatial and Space-Time analysis
library(spatstat)
Loading required package: spatstat.data
Loading required package: spatstat.geom
spatstat.geom 2.3-0

Attaching package: 'spatstat.geom'
The following object is masked from 'package:MASS':

    area
Loading required package: spatstat.core
Loading required package: nlme
Loading required package: rpart
spatstat.core 2.3-0
Loading required package: spatstat.linnet
spatstat.linnet 2.3-0

spatstat 2.2-0       (nickname: 'That's not important right now') 
For an introduction to spatstat, type 'beginner' 

Ahora se definen ciertas dataframes de grupos de datos que serán de nuestro interes

# Creating the datafraes to be used                                      
p5ruca<-df[df[,"status"]==1,]  #all the live trees
nvivos <- nrow(p5ruca)
p5rucaAp<-df[df[,"spp"]=="A. punctatum"& df[,"status"]==1,] #lives Ap
p5rucaNo<-df[df[,"spp"]=="N. obliqua"& df[,"status"]==1,] #lives No (Roble)
p5rucaLp<-df[df[,"spp"]=="L. philippiana"& df[,"status"]==1,] #lives Lp (Tepa)
p5rucaDom<-df[df[,"crown.class"]==1& df[,"status"]==1,] #lives Dominant trees
p5rucaDead<-df[df[,"status"]==2,]  #all the Dead trees
ndead <- nrow(p5rucaDead)

y ahora creamos las respectivas geo-datas como sigue

# Creating the "Geo"-dataframes to be used
p5ruca.geo<-as.geodata(p5ruca,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
p5rucaAp.geo<-as.geodata(p5rucaAp,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
p5rucaNo.geo<-as.geodata(p5rucaNo,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
p5rucaLp.geo<-as.geodata(p5rucaLp,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
p5rucaDom.geo<-as.geodata(p5rucaDom,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))
p5rucaDead.geo<-as.geodata(p5rucaDead,coords.col=c("x.coord","y.coord"),data.col=c("dbh"))

Gráfico de distribucion espacial

par(mfrow=c(3,2),mai=c(0.25,0.45,.1,0),mgp=c(2.6,1,0),las=1,cex=0.6,cex.lab=1,cex.axis=0.9,pty="s") 
# tree location plot
range.x<-c(0,100);range.y<-c(0,100)
plot.area<-max(range.x)*max(range.y)
                                              
# All the Species                 
plot(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2], pch=16,cex=.75,
   xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p")#,pch=".",cex=1.5)
text(99, 100, expression(bold((a))))
# Ap
plot(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],col="green",#    pch=16,cex=1.5,
   xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)#,pch=".",cex=1.5)
text(99, 100, expression(bold((b))))
# No
plot(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],col="blue",#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=16,cex=.75)#,pch=".",cex=1.5)
text(99, 100, expression(bold((c))))
# Lp
plot(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)
text(99, 100, expression(bold((d))))
# Dominant trees
plot(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=16,cex=.75)
text(99, 100, expression(bold((e))))
# standing Dead trees
plot(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2], col="red",#    pch=16,cex=1.5,
   xlab="Distancia (m)",xlim=range.x,ylim=range.y, ylab="Distancia (m)",type="p",pch=16,cex=.75)
text(99, 100, expression(bold((f))))

Una covariable en el espacio

par(mfrow=c(3,2),mai=c(0.25,0.45,.1,0),mgp=c(2.6,1,0),las=1,cex=0.6,cex.lab=1,cex.axis=0.9,pty="s") 
# tree location plot
range.x<-c(0,100);range.y<-c(0,100)
plot.area<-max(range.x)*max(range.y)
                                              
# All the Species                 
plot(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5ruca.geo$coords[,1], p5ruca.geo$coords[,2], 
            circles = p5ruca.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
#text(p5ruca.geo$coords[,1],p5ruca.geo$coords[,2],labels=p5ruca.geo$data,adj=c(0,1),cex=0.7)            

#lines(p5ruca.geo$coords[coords,1],p5ruca.geo$coords[coords,2],col="red",lwd=2)
text(99, 100, expression(bold((a))))
# Ap
plot(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5rucaAp.geo$coords[,1], p5rucaAp.geo$coords[,2], 
            circles = p5rucaAp.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
#text(p5rucaAp.geo$coords[,1],p5rucaAp.geo$coords[,2],labels=p5rucaAp.geo$data,adj=c(0,1),cex=0.7)            
text(99, 100, expression(bold((b))))
# No
plot(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5rucaNo.geo$coords[,1], p5rucaNo.geo$coords[,2], 
            circles = p5rucaNo.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
text(p5rucaNo.geo$coords[,1],p5rucaNo.geo$coords[,2],labels=p5rucaNo.geo$data,adj=c(0,1),cex=0.7)            
text(99, 100, expression(bold((c))))
# Lp
plot(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5rucaLp.geo$coords[,1], p5rucaLp.geo$coords[,2], 
            circles = p5rucaLp.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
text(p5rucaLp.geo$coords[,1],p5rucaLp.geo$coords[,2],labels=p5rucaLp.geo$data,adj=c(0,1),cex=0.7)            
text(99, 100, expression(bold((d))))
# Dominant trees
plot(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5rucaDom.geo$coords[,1], p5rucaDom.geo$coords[,2], 
            circles = p5rucaDom.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
#text(p5rucaDom.geo$coords[,1],p5rucaDom.geo$coords[,2],labels=p5rucaDom.geo$data,adj=c(0,1),cex=0.7)            
text(99, 100, expression(bold((e))))
# standing Dead trees
plot(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2],#    pch=16,cex=1.5,
   xlab="Distance (m)",xlim=range.x,ylim=range.y, ylab="Distance (m)",type="p",pch=".",cex=1.5)
#add circles are proportional to the variate being displayed.
symbols(p5rucaDead.geo$coords[,1], p5rucaDead.geo$coords[,2], 
            circles = p5rucaDead.geo$data*100, add = T, inches =0.105, fg="blue")
#add the response variable values
text(p5rucaDead.geo$coords[,1],p5rucaDead.geo$coords[,2],labels=p5rucaDead.geo$data,adj=c(0,1),cex=0.7) 
text(99, 100, expression(bold((f))))

Referencias bibliográficas

Ribeiro, P. J., Jr., and P. J. Diggle. 2001. geoR: A package for geostatistical analysis.” R News 1 (2): 14–18.
Salas, C., V. LeMay, P. Núñez, P. Pacheco, and A. Espinosa. 2006. Spatial patterns in an old-growth Nothofagus obliqua forest in south-central Chile.” For. Ecol. Manage. 231 (1-3): 38–46.
Salas-Eljatib, C. 2021. Análisis de datos con el programa estadístico R: una introducción aplicada. Santiago, Chile: Ediciones Universidad Mayor.
Soto, D. P., C. Salas, P. J. Donoso, and D. Uteau. 2010. Heterogeneidad estructural y espacial de un bosque mixto dominado por Nothofagus dombeyi después de un disturbio parcial.” Rev. Chilena de Historia Natural 83 (3): 335–47.