Este código de R corresponde a la figura 6.11 del libro Análisis de datos con el programa estadístico R: una introducción aplicada de Salas-Eljatib (2021).

Última actualización de esta web: 13 noviembre, 2022

Cargando los datos de ejemplo

Ocuparemos la dataframe pspRuca del paquete datana de Salas-Eljatib, Riquelme, and Pino (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 region de la Araucania, Chile). Los datos fueron recolectados por Salas et al. (2006).

Los gráficos

En el libro se muestran dos gráficos sobre funciones de de densidad (o ``Kernel’’) para la distribucion espacial de árboles en un bosque nativo en Chile. La estimacion de densidad por funciones Kernel es una alternativa de modelacion en análisis espacial que toma en consideracion la posicion de elementos en relacion a otros Schabenberger and Gotway (2005).

Para realizar esta figura del libro es necesario tambien cargar los siguientes paquetes

> library(splancs)
> library(spatstat)

Es recomendable tambien instalar el paquete geoR Ribeiro and Diggle (2001).

El primer gráfico (el de la izquierda de la figura del libro)

> range.x<-c(0,100);range.y<-c(0,100)
> plot.area<-max(range.x)*max(range.y)
> # grupo 1: arboles del dosel superior y vivos
> db.g1 <- df[df[,"crown.class"]==1&df[,"status"]==1,] 
> db.g1.pts <- as.points(db.g1[,"x.coord"],db.g1[,"y.coord"])
> db.g1.ppp <- ppp(db.g1.pts[,1],db.g1.pts[,2],xrange=range.x,yrange=range.x) 
> # ----------
> #estimacion de la densidad kernel para grupo 1
> dens.g1.sig2<-density.ppp(db.g1.ppp,sigma=3.5,dimyx=c(max(range.x),max(range.y)))
> persp(dens.g1.sig2,theta=45,phi=5,xlab="X",ylab="Y",zlab="Z",cex.lab=1.5,main="", col="yellow")