0% encontró este documento útil (0 votos)
98 vistas36 páginas

Manual Cap1 36 Pags

Este manual tiene como objetivo proveer apoyo independiente a los estudiantes en el curso de Dasometría dictado en la Universidad Nacional de Colombia. Introduce conceptos básicos de medición forestal y análisis de datos usando el software R. Explica cómo instalar R y leer archivos de datos en este programa, lo cual es fundamental para completar las actividades del curso de manera autónoma.

Cargado por

Natalia Tabares
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
98 vistas36 páginas

Manual Cap1 36 Pags

Este manual tiene como objetivo proveer apoyo independiente a los estudiantes en el curso de Dasometría dictado en la Universidad Nacional de Colombia. Introduce conceptos básicos de medición forestal y análisis de datos usando el software R. Explica cómo instalar R y leer archivos de datos en este programa, lo cual es fundamental para completar las actividades del curso de manera autónoma.

Cargado por

Natalia Tabares
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Manual

de apoyo


Curso de Dasometría



Por:



Alvaro J. Duque M.
Profesor Asociado
Departamento de Ciencias Forestales
Universidad Nacional de Colombia Sede Medellín















2021



Presentación

Esta manual de apoyo para el curso de Dasometría (código 3000447) que se dicta en el quinto
semestre de Ingeniería Forestal, tiene como principal objetivo proveer independencia en el
desarrollo de las actividades de los estudiantes. En el ejercicio docente y profesional actual, la
disponibilidad de herramientas muy versátiles como los computadores y programas
altamente eficientes, han potenciado un rápido avance en las áreas del conocimiento
asociadas con la medición forestal en lo que respecta al manejo de información y
procesamiento de datos. Es en éstos dos temas en particular que este manual de apoyo busca
prestar asistencia. Por este motivo, es importante aclarar que no se busca elaborar un nuevo
libro de texto con contenidos teóricos exahustivos, los cuales abundan en cantidad y calidad
en los mercados de libros especializados.

El manual busca principalmente introducir y orientar los análisis y métodos básicos de los
temas que se presentan en el curso. Para ello, se hace uso del software R. Por este motivo, es
preferible haber visto el curso previo de “Introducción a la Modelación Forestal”, que aún no
aparece como pre-requisito de este curso, pero que esta en camino de serlo. Tener bases de R
ayudará ostensiblemente a un más rápido acople con los temas concernientes a la medición
forestal. Sin embargo, es importante aclarar de nuevo que este NO ES UN CURSO DE R, sino
más bien un curso que usa R para poderlo implementar. Las principales razones para el uso
de este software son: i) es libre; ii) abre y promueve posibilidades de análisis de gran ayuda al
estudiante para otros cursos; iii) algunos de los análisis que aquí se posibilitan son difíciles de
encontrar en los paquetes comerciales de menú.

En conclusión, con este manual lo que se espera sembrar una semilla de un material didáctico
que vaya evolucionando y creciendo de la misma manera que lo ha venido haciendo el curso.
La intención final no es más que avanzar en las posibilidades de que el estudiante tenga tanta
autonomía como sea necesaria para que se potencie su capacidad de auto-aprendizaje. Es
evidente que en el mundo actual, el papel del docente debe cumplir cada vez más una función
de guía que de referente absoluto, lo cual implica la generación de nuevas dinámicas de
comunicación que se espera se faciliten por medio de este tipo de materiales de ayuda.
Esperamos por tanto que el manual que aquí se presenta, ayude a llenar vacíos en lo que se
refiere a las destrezas básicas requeridas en el oficio de la medición y cuantificación en los
bosques, pero además esperamos estimular el proceso de auto-aprendizaje que debe
continuar a lo largo de la vida.

2
Capítulo I: Introducción al R.

En este capítulo sólo se dan algunos apuntes iniciales claves para poder empezar a familiarizarse
con el programa. Todas las notas son tomadas del libro de Crawley (2007).

1.1 Instalación de R.

Para instalar R se debe ingresar a la página [Link] y seguir las instrucciones que
allí se dan. En la web abundan manuales que instruyen acerca de la instalación del programa en
caso de algún problema siguiendo las instrucciones de la página oficial de R. El programa se puede
instalar en cualquier sistema operativo (Windows, Mc Os, Linux), pero debe tenerse presente con
las especificaciones del equipo (Hardware) en lo que respecta a las últimas versiones.

Se recomienda usar un manejador de R. El programa R studio, disponible en
[Link] es el que se empleará para los ejercicios del curso. Este es también de
libre acceso y existe para todas las plataformas.

2.1 Leyendo un archivo en R.

Lo primero y más importante para leer un archivo es poner a R a leer el archivo en el folder en el
cual se tiene. La función set working directory,(wd) me permite hacer esto, así:

setwd(“Desktop”)

En R studio, se puede automáticamente ejecutar este comando, yendo a la pestaña Session, donde se
encuentra Set Working Directory. ES EL PRIMER PASO ESCENCIAL PARA PODER INICIAR MI
TRABAJO CON DATOS EN R.

Los dos formatos más usados para leer un archivo en R son el formato texto (.txt) y el formato de
valores separados por comas (.csv). Se van a introducir los dos, pero se recomienda más el uso del
formato .csv.

En los ejercicios de clase, todos los archivos originales provienen usualmente de Excel. En Excel, los
archivos se deben guardar como Texto delimitado por tabulaciones (.txt) o Valores separados por
comas (.csv). Este último formato varía para Windows y para McOs, así que se debe chequear cual
se usa. En el primero usualmente separa por comas y en el segundo por punto y coma.

Para evitar problemas de lectura del archivo, se recomienda:

• No usar tildes, paréntesis, signos matemáticos (incluido el guión de separación que en R el
programa lo lee como menos), porcentajes, etc, ni en los nombres de las variables ni en los
contenidos de los campos.
• En las variables numéricas (DAP, H, etc) no incluir NINGÚN espacio, símbolo o carácter en
las casillas para las que no existen datos (simplemente dejarlas vacías). Es diferente no
tener dato a que el dato sea igual a cero.
• Tener presente que para R las mayúsculas y las minúsculas SON DIFERENTES.
• Para evitar la aparición de columnas o filas ¨fantasma¨, se recomienda seleccionar y copiar
todo el archivo que tiene datos en Excel, pegarlo en una hoja nueva como valores y grabarlo
como txt o csv.


R es un lenguaje que trabaja sobre el concepto de “objetos”. Esto facilita mucho las operaciones que
rigen el ambiente de trabajo.

Por ejemplo, para crear un objeto (en este caso un vector) yo puedo proceder de la siguiente forma:

x <- c(3,5,9,12)

El operador estándar de asignación en R es <-. También se puede usar = pero no es recomendable
ya que este puede no operar en algunos casos especiales. Aquí le estamos asignando el vector a x
construido por medio de la función concatenar (c).

Los elementos individuales de un vector los podemos obtener por medio de [ ]. Esto se conoce como
el índice o subscript. Por ejemplo, para obtener el tercer elemento de x:

x[3] <- 9

Podemos luego por ejemplo pensar en crear un nuevo vector que se compone y basa en el objeto x;
por ejemplo:

q = c(x,x,9,17)

Podemos además obtener estadísticos de estos objetos, como por ejemplo:

# Calculemos la media y desviación estándar

>mean(x)
[1] 7.25

> sd(x)
[1] 4.031129

Los comentarios de texto se hacen usando el signo #. Cualquier texto o número que se localiza a la
derecha del símbolo no será analizado como comando de R.

2.1.1. Leyendo un archivo con datos en R

El archivo que vamos a usar como referencia para el componente de estructura horizontal y
estimación de altura de los árboles (H), emplea datos colectados en el Departamento de Antioquia.
En el ejemplo, usamos un archivo que posee datos de 4 localidades.

Para traer un archivo, que en R lo llamaremos datos, el cual se llama estruct_2020.txt el comando a
emplear es:

datos <- [Link]("estruct_2020.txt", head = TRUE, sep = “\t”)

En el comando anterior se puede leer lo siguiente:

A datos asígnele estruct_2020.txt, el cual tiene un encabezado en la primera fila y es un archivo
separado por tabulaciones.


Dado que algunos archivos poseen separación de decimales por comas y no puntos, al comando
anterior se le debe agregar dentro del paréntesis: , dec = “,”.

Cuando el archivo es estruct_2020.csv (que usualmente proviene de Excel), el cual ha sido grabado
como “comma separated values” (csv) para Windows, es cuando se usa el csv2 para leerlo, como
sigue:

datos <- read.csv2(“estruct_2020.csv”)

Verificar que el archivo no esta separado por punto y coma. Si es así, se debe adicionar el comando
separado por (sep = “;”). Adicionalmente, si usted ha dejado ñ, tildés, o algún símbolo/vocablo
no propio del inglés y si del español, debe adicionar el comando encoding = ”latin1” (o
“latin8”). El ejemplo en este caso también muestra los comandos necesarios cuando los
decimales están delimitados por comas y no puntos, que es lo que asume el programa:
.
datos <- read.csv2(“estruct_2020.csv”, sep= “;”,dec = “,”, encoding =
“latin1”)

El csv2 esta asociado con los formatos del sistema operativo de Windows y por eso se usa csv2 en
esos casos. Cuando requerimos dar las especificaciones de que archivo tipo .csv se esta leyendo, no
es necesario siempre su uso (el de csv2). Aquí estamos diciendo que los decimales están
delimitados por comas y no puntos, que es lo que asume el paquete, y las variables separadas por
punto y coma y no coma.

A partir de acá, usted ya asoció su archivo en Excel a este OBJETO denominado datos en R. Por
favor, entienda que el nombre estruct_2020.csv ya no existe en R. Existe datos.

Para ver las primeras 5 filas del archivo

head(datos)

Localidad Parcela Nro_Arbol DAP_cm Distancia_m V_menos_grados V_mas_grados tbosque


1 Angelopolis 1 1 11.71 NA NA NA TA
2 Angelopolis 1 2 17.54 NA NA NA TA
3 Angelopolis 1 3 17.92 NA NA NA TA
4 Angelopolis 1 4 10.09 NA NA NA TA
5 Angelopolis 1 6 17.48 NA NA NA TA
6 Angelopolis 1 7 10.25 NA NA NA TA

Las variables del archivo son:



Localidad: lugar o municipio donde se hizo el inventario

Parcela: se refiere a las 25 parcelas de 0.04-ha (20 m × 20 m) establecidas aleatoriamente en
bosques de dicha localidad

Nro. Arbol: el número con el que se identificó cada individuo arbóreo en cada localidad (no en
cada parcela). No son necesariamente consecutivos.
DAP_cm: diámetro a la altura de pecho (1.3 m) en centímetros (cm) de cada árbol

Distancia_m: distancia en metros a la que se tomó cada uno de los ángulos para medir la altura total
del árbol.
V_menos_grados: ángulo en grados (°) desde el punto del observador a la base del árbol.
V_mas_grados: ángulo en grados (°) desde el punto del observador al ápice del árbol.
tbosque: tipo de bosque. Se refiere a bosques en tierras bajas (< 1700 m snm) o tierras altas
(> 1700 m snm)

Para ver las primeras 20 (9, 12, 22, 31, etc) filas del archivo, pongo al número de filas que quiero
ver a la derecha.

head(datos, 20)

Para ver las primeras 6 filas y las 3 primeras columnas del archivo

datos[1:6,1:3]

X Localidad Parcela
1 1547 Angelopolis 1
2 1548 Angelopolis 1
3 1549 Angelopolis 1
4 1550 Angelopolis 1
5 1551 Angelopolis 1
6 1552 Angelopolis 1

Este es el primer uso de lo que llamamos subíndices, los cuales son EXTREMADAMENTE útiles en el
manejo de datos en R. Dentro de los CORCHETES, lo que hay detrás de la coma se refiere a las filas
del documento, lo que hay después de la coma, a las columnas.

Por ejemplo, para leer las primeras 10 filas o columnas

datos[1:10,]
datos[,1:10]

Para ver las últimas 5 filas del archivo (similar a head)

tail(datos)

Hay ciertos comandos que son de USO GENERAL en R y tienen aplicación para manejar archivos. El
primero de ellos es str , el cual permite ver la estructura del archivo. Este es un comando muy
importante. Nos permite diferenciar cual es la naturaleza de cada vector, lo cual es esencial para el
análisis de datos. Los tipos de vectores de mayor uso en nuestro curso que debemos identificar en
R, son; numérico (num); entero (int), que también es una categoría de numérico; factor (Factor),
que se refiere a una variable no numérica pero que opera como una unidad; carácter (chr), que se
refiere al que esta conformada por una “sarta” de letras o símbolos independientes concatenados
entre sí. Por ejemplo:

str(datos)

'[Link]': 2988 obs. of 8 variables:


$ Localidad : Factor w/ 4 levels "Angelopolis",..: 1 1 1 1 1 ...
$ Parcela : int 1 1 1 1 1 1 1 1 1 1 ...

$ Nro_Arbol : Factor w/ 1039 levels "1","10","100",..: 1 116 ...


$ DAP_cm : num 11.7 17.5 17.9 10.1 17.5 ...
$ Distancia_m : num NA NA NA NA NA NA NA NA NA NA ...
$ V_menos_grados: num NA NA NA NA NA NA NA NA NA NA ...
$ V_mas_grados : num NA NA NA NA NA NA NA NA NA NA ...
$ tbosque : Factor w/ 2 levels "TA","TB": 1 1 ...

Lo primero que debo hacer es verificar que mis variables si posean la estructura que deben poseer
antes de proceder con los análisis. Por ejemplo, DAP debe a todas luces siempre ser una variable de
tipo numérica. Esto es muy importante en estadística, ya que dependiendo del tipo de variables que
se posean, de esto depende es el análisis que se ejecuta (Tabla 1). Como una primera aproximación,
si definimos las variables de Factor como y carácter como variables discretas, y las variables
numéricas y enteros como continuas, uno tiene las siguientes opciones de modelos:

X = variable
independiente

Continua Discreta
Regresión
Continua lineal/ ANAVA
Y = variable no-lineal
dependiente Regresión
Tablas de
Discreta logística
contingencia
(GLM)


Tabla 1. Modelos estadísticos según el tipo de variables. Las variables continuas se asocian a
aquellas variables que poseen rangos infinitos entre sus intervalos. Las variables aquellas que
poseen rangos finitos dentro de sus intervalos y pueden ser de dos tipos: i) presencia-ausencia o ii)
ordinal. Sin embargo, desde el punto de vista operativo estas definiciones a veces cambian. Por
ejemplo, el número de especies o individuos es una variable numérica entera con rangos finitos,
pero que en un modelo de regresión debe ser tratado como continua. Esto es muy diferente de una
variable discreta tipo Factor, que establece rangos fijos, como pro ejemplo, las zonas de vida de una
región geográfica o la clasificación de un árbol en vivo o muerto. Es decir, las variables aleatorias
(ver más abajo) pueden a su vez ser continuas o discretas.

En este curso básicamente trabajamos con Análisis de varianza (ANAVA) de una vía y regresión
lineal y no lineal. Algunas pruebas asociadas como la prueba de t o la chi-cuadrada (usadas en las
tablas de contingencia), pueden eventualmente también ser usadas.

Para ver la dimensión del archivo se usa el comando dim.

dim(datos)

[1] 2988 8

Quiere decir que el archivo que estamos usando tiene 2988 filas y 8 columnas (o variables).


Otro comando de MUCHA UTILIDAD es el comando summary, el cual nos permite hacer un resumen
de lo que contienen los archivos.

summary(datos)

Localidad Parcela Nro_Arbol DAP_cm Distancia_m


Angelopolis:860 Min. : 1.00 10 : 4 Min. :10.03 Min. : 7.50
Caucasia :474 1st Qu.: 7.00 100 : 4 1st Qu.:12.10 1st Qu.:10.00
Maceo :762 Median :13.00 101 : 4 Median :15.06 Median :10.50
Valdivia :892 Mean :13.03 102 : 4 Mean :17.63 Mean :11.52
3rd Qu.:19.00 103 : 4 3rd Qu.:20.21 3rd Qu.:12.50
Max. :25.00 104 : 4 Max. :88.49 Max. :22.50
(Other):2964 NA's :2175

2.1.2 Como sustraer filas y columnas de un archivo.



Por ejemplo, llevo a un nuevo archivo dap los datos de las primeras 50 filas de la columna 4 dl
archivo datos. Es decir, sustraigo la 50 primeros valores del DAP.

dap<-datos[1:50,4]

[1] 11.71 17.54 17.92 10.09 17.48 …………… 17.41

Sustrayendo las columnas 2 a 4



datos1<-datos[,c(2:4)]
head(datos1)

Parcela Nro_Arbol DAP_cm


1 1 1 11.71
2 1 2 17.54
3 1 3 17.92
4 1 4 10.09
5 1 6 17.48
6 1 7 10.25

Indague que obtiene con el siguiente código:

datos2<-datos[,c("Parcela","DAP_cm ")]
head(datos2)

Eliminando columnas o filas: se usa el signo menos (-).

datos3<-datos[,-c(1:4)]
head(datos3)

Función subset

Es una forma alternativa y en ocasiones más eficiente de substraer datos de un archivo. Por
ejemplo, veamos como obtener los datos de sólo 2 de las localidades:

Primero, averiguo cuales son las localidades (usando unique o levels)



unique(datos$Localidad)

[1] Angelopolis Caucasia Maceo Valdivia


Levels: Angelopolis Caucasia Maceo Valdivia

levels(datos$Localidad)

[1] "Angelopolis" "Caucasia" "Maceo" "Valdivia"



Aquí además aprendimos algo: usar el símbolo $ para seleccionar una sola variable o columna del
archivo

Ahora si, seleccionemos dos localidades:

Loc2 <- droplevels(subset(datos, Localidad == "Caucasia" | Localidad
== "Valdivia"))

summary(Loc2)

Localidad Parcela Nro_Arbol DAP_cm Distancia_m
Caucasia:474 Min. : 1.00 10 : 2 Min. :10.03 Min. : 8.0
Valdivia:892 1st Qu.: 6.00 100 : 2 1st Qu.:12.19 1st Qu.:10.0
Median :13.00 101 : 2 Median :15.20 Median :10.0
Mean :12.86 102 : 2 Mean :17.70 Mean :10.7
3rd Qu.:19.00 103 : 2 3rd Qu.:20.16 3rd Qu.:11.0
Max. :25.00 104 : 2 Max. :68.63 Max. :18.0
(Other):1354 NA's :886

Podemos hacer lo mismo usando ahora la función != (diferente)

Loc2a <- droplevels(subset(datos, Localidad != "Angelopolis" | Localidad !=
"Maceo"))

Analice el summary y la dimensión de este nuevo archivo. Compárelo con Loc2.

Otras posibilidades con subset

arb.20cm<-subset(datos, DAP_cm>=20 & Localidad==" Angelopolis",
select=c("Localidad","DAP_cm"))


Indague que obtiene con el siguiente código:

arb.20cm_2 <- datos[datos$DAP_cm >=20 & datos$Localidad=="Angelopolis",
c(1,4)]

Analice el summary y la dimensión de este nuevo archivo. Compárelo con arb.20cm.


2.1.3 Cómo introducir nuevas variables en un [Link]


La definición del [Link], se puede asociar con el de una hoja de cálculo de Excel: es un
archivo que contiene filas y columnas de la misma o diferente naturaleza. En R, [Link]
es diferente de matrix.

Respuesta: uso el signo $. Algunas de las posibles formas son:

datos$ABasal<-(pi/4)*datos$DAP_cm^2
datos$ABasal.2<-with(datos, (pi/4)*DAP_cm ^2)

10

CAPITULO II: Variables dasométricas básicas.



2.1. Conceptos teóricos (West 2009):

Exactitud: se define como la diferencia entre una medida o estimado de algo y su valor real.
• Se refiere a la precisión con que podemos medir algo, dependiendo del equipo o método
disponible. Por ejemplo, la medición de una línea que tiene 100 m de largo al ser medida
por medio de 100 pasos, puede tener una exactitud entre 95 y 105 m, mientras que la
medición de esta línea usando un laser, puede tener una precisión entre 99.9 y 100.1 cm
(Fig. 1).

Sesgo: se define como la diferencia entre el promedio de un conjunto de medidas repetidas o
estimados de algo y su valor real.
• Se refiere a la dificultad o imposibilidad de medir algo de forma precisa, que sin importar ni
el equipo ni el número de veces que esto se haga, la respuesta que se obtenga va
sistemáticamente a sobre o subestimar el valor real. Por ejemplo, si se mide el DAP con una
cinta que tenga marcados los cm en su estado natural pero que se pueda estirar, siempre se
va a subestimar su valor real (Fig. 1).



Figura 1. Esquematización de los significados de sesgo y exactitud o precisión. a) Resultado preciso
e insesgado. b) Resultado de alta precisión pero insesgado. c) Resultado de alta imprecisión, pero
insesgado. d) Resultado impreciso e insesgado (Tomado de West 2009).

2.2 Introducción a las variables aleatorias

Aunque ya mencionamos la existencia de variables continuas y discretas, no establecimos que estas
pueden a su vez ser definidas como variables aleatorias. Una variable aleatoria puede definirse
como una cantidad que puede tomar diferentes valores y que están determinados por un proceso
estocástico. Las variables aleatorias pueden ser descritas por una distribución de probabilidad. La

11

distribución de probabilidad de una variable aleatoria es una función que asigna a cada valor
posible de dicha variable aleatoria una probabilidad. Por ejemplo, al DAP de un árbol en un rodal es
una variable aleatoria, que puede ser definida como X. Si nosotros vamos a ese rodal y observamos
que el DAP de ese árbol es x, hemos obtenido la observación X = x. De esta manera podemos pensar
que el DAP de un árbol es un número fijo, cuya variación emerge de la selección aleatoria de ese
árbol, que hace parte de una población finita de árboles dentro del rodal. Se puede también por
ejemplo pensar que, el DAP de el árbol i (Xi), es una variable aleatoria. En este caso,
asumimos que el proceso subyacente que genera el DAP del árbol i, y el diámetro esperado
de este árbol (Xi), es el resultado de este proceso aleatorio (Mehtätalo 2013). Es decir, hay
varias formas bajo las cuales podemos definir que el valor obtenido de una medición
específica es una cantidad que se asocia con una variable aleatoria.

2.2.1 Distribución de una variable aleatoria

[Link] Distribución univariada

La probabilidad de una variable de obtener un valor específico es descrita por la distribución de
una variable aleatoria. La distribución de una variable aleatoria se determina por la función de
distribución acumulada (FDA) de dicha variable, la cual expresa la probabilidad de que una variable
aleatoria X obtenga un valor menor o igual que x. Lo anterior se expresa como:

F(x) = P(X ≤ x) para todo x

Quizás la función de distribución de probabilidad (FDP) mejor conocida es la distribución normal
estándar. Desafortunadamente, la FDA de la normal es compleja en su forma explícita. No obstante,
su evaluación numérica usando R es bastante simple (Fig. 2).
x<-seq(-8,8,0.01)
y<-pnorm(x)
plot(x,y,type="l",xlab="x",ylab="Densidad acumulada", las=1)

12

Figura 2. Función de distribución acumulada de la distribución normal estándar (media = 0 y


desviación estándar = 1).

La distribución normal es ampliamente usada debido a que el Teorema del Límite Central de la
estadística establece que la distribución de las medias muestrales de cualquier distribución tienden
a distribuir normal a medida que el tamaño de la muestra aumenta. En general, la distribución
normal es muy fácil de operar analíticamente desde el punto de vista computacional (Mehtätalo
2013).

La probabilidad de que una variable aleatoria obtenga un valor entre límites definidos [a;b] puede
ser obtenida mediante la sustracción de las probabilidades acumuladas.

P(a ≤ x ≤ b) = F(b) – F(a) ecuación (1)

Por ejemplo, definamos una variable X con distribución normal que posea media 8 y desviación estándar 2. La
probabilidad P (X ≤ 10), se calcula como:

pnorm(10,8,2)
[1] 0.8413447

Y la probabilidad P(9 ≤ X ≤ 10), se calcula como:

pnorm(10,8,2)-pnorm(9,8,2)
[1] 0.1498823

Lo anterior significa que la probabilidad de tener un DAP entre 9 y 10 cm de un árbol escogido al azar es de
15%. Lo anterior significa que el 15% de los árboles tienen un DAP entre 9 y 10 cm.

La FDA de X expresa la probabilidad que la variable aleatoria obtenga el valor de x o menos. Sin embargo, a
menudo lo que nos interesa es la probabilidad de que X obtenga un valor exacto predeterminado de x. Para
variables aleatorias discretas, esta probabilidad se da por la función masa de probabilidad (FMP), la cual se
define para variables discretas como:

f(x) = P(X = x) para todo x

La función masa de probabilidad (FMP) es la versión teórica de la frecuencia relativa de los valores
observados de una variable aleatoria discreta (f(x)).

X es una variable aleatoria discreta si toma valores en un conjunto numerable {x1, x2, x3,….., xi,…}

Por lo tanto, la FMP, debe cumplir con:

P[X = xi] = pi ≥ 0 ; i = 1,2,….

!

𝑝𝑖 = 1
!!!

xi P[X=xi]=pi
x 1 p 1
x 2 P 2
x 3 P 3

13

… …


Para el caso continuo, la FDA y FMP se expresa como:

!
𝑃 𝑋 ≤ 𝑥 = 𝐹 𝑥 = !∝ 𝑓 𝑡 𝑑𝑡 ecuación (2)

Lo que quiere decir que la función densidad de probabilidad (FDP) de una variable aleatoria continua x se
define como la primer derivada de F(x).

𝑑
𝑓 𝑥 = 𝐹(𝑥)
𝑑𝑥


Una importante distinción entre la FDP y la FMP, es que el valor de la FMP para x da la probabilidad para la
variable aleatoria X de obtener el valor x. Con la distribución continua, la probabilidad de cualquier valor es 0.
Por ejemplo, la probabilidad de tener un árbol con un DAP que sea exactamente 20 cm es siempre cero. Sin
embargo, se tiene una probabilidad positiva de obtener un árbol con DAP entre 19.95 y 20.05 cm, la cual
puede ser clasificada como 20 cm usando un calibrador con 1 mm de precisión. Para calcular esta
probabilidad se requeriría integrar la FDP usando intervalos de clase de 1 mm. Lo anterior conduce en la
práctica al uso de la ecuación (1).

Por ejemplo, definamos una variable X (DAP) con distribución normal que posea media 65 y desviación
estándar 15. La probabilidad P (X ≤ 83), se calcula como (Fig. 3A):

x1<-seq(10,120,0.01)

y1<-pnorm(x1, mean=65, sd=15)

X1 <- pnorm(83,65,15) #[1] 0.8849303


X2 <- pnorm(60,65,15) #[1] 0.3694413

La probabilidad de que un árbol tenga entre 60 y 83 cm es igual a:



0.8849303 - 0.3694413 = 0.515489

La FDP, se puede describir como (Fig. 3B):

fx1<-dnorm(x1,mean=65, sd=15)

Y1 <- dnorm(83,65,15) #0.01294574


Y2 <- dnorm(60,65,15) #0.02515888

sum(dnorm(60:83,65,15)) #0.5213485
sum(fx1)

14

FDA FMP

1.0
0.025

0.8
0.020
Densidad acumulada

0.6
0.015

f(x)
0.4 0.010

0.2 0.005

0.0 0.000

20 40 60 80 100 120 20 40 60 80 100 120

x x

Figura 3. Función de probabilidad acumulada (FDA) y función de distribución de probabilidad
(FDP) de la distribución de DAP (x) cuando sigue una normal con media 65 y desviación estándar
15. El área en verde define P[60 ≤ X ≤ 83] y el área en rojo P[60 ≤ f(x) ≤ 83] .

Note que la función de distribución cuando proviene de una variable discreta tiene saltos con relación a los
valores posibles de la variable aleatoria (Fig. 4), siendo constante a lo largo de su valor. En contraste, la
distribución de una función de distribución de una variable aleatoria continua es continua (Fig. 4).

FDA FPM
0.30

1.0

0.8
0.25

0.6
0.20
F(y)

f(y)

0.4
0.15

0.2
0.10

0.0

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6

y y

Figura 4. Función de probabilidad acumulada (FDA) y función masa de probabilidad (FPM) del
número de especies encontrado en 6 parcelas.

La FDA de variable aleatoria continua, de hecho, no necesariamente necesita ser diferenciable

15

desde su versión continua y puede en cambio ser definida por partes. Este cálculo asociado con una
distribución de tamaños que es definida por el tamaño o diámetro que corresponden con un valor
pre-definido de la FDA se conoce como percentil. Por ejemplo:

quantile(x1, probs=c(seq(0,1,0.25)))

0% 25% 50% 75% 100%


10.0 37.5 65.0 92.5 120.0

Lo anterior significa que, el 25% de lso datos esta por debajo del DAP = 37.5 cm y que el 75% de los
datos está por debajo del DAP = 92.5 cm. Los valores en este caso son simétricos por esta asociados
con una distribución normal, pero no siempre este será al caso.

Lo anterior se asume que la FDA satisface los siguiente: F(10) = 0, F(37.5) = 0.25, F(65.0) = 0.50,
F(92.5) = 0.75, F(120.0) = 1, y es lineal entre ellos.


La distribución Weibull

Como hemos mencionado en el curso, una variable aleatoria puede seguir muchas otras distribuciones
diferentes a la normal. Una función de distribución comúnmente empleada en bosques es la función de
distribución bi-paramétrica de Weibull (α, β), donde α y β representan los parámetros de forma y escala,
respectivamente. Existe también la función tri-paramétrica muy empleada en forestería. La función bi-
paramétrica de Weibull (α, β), se define como:

𝑥 !
𝐹 𝑥|𝛼, 𝛽 = 1 − 𝑒𝑥𝑝 −
𝛽
Donde α > 0 and β > 0.

Es importante destacar que las frecuencias de clase derivadas de la función Weibull no suman 1, si no 0.999.
Esto es debido a que la distribución de Weibull tiene un valor máximo de x al cual el valor de FDA es 0.999.

La función de probabilidad de densidad de la función Weibull se obtiene mediante la derivada de la FDA, lo
que produce:

𝑓 𝑥 𝛼, 𝛽 = 𝐹 ! 𝑥|𝛼, 𝛽

𝑥 ! 𝑥 !!! 1
𝑓 𝑥 𝛼, 𝛽 = −𝑒𝑥𝑝 − −𝛼
𝛽 𝛽 𝛽

𝛼 !
𝑓 𝑥 𝛼, 𝛽 = ! 𝑥 !!! 𝑒 ! ! !
𝛽
Por ejemplo:

Usando el mismo rango de DAP que arriba

xw<-seq(10,120,0.01)

La función de distribución acumulada (FDA) se calcula como:



Fw<-pweibull(xw, shape=6, scale=91)

16

W1 <- pweibull(83,6,91) #[1] 0.4377068


W2 <- pweibull(60,6,91) #[1] 0.07887521
W1-W2 #0.3588315

Note que bajo esta distribución, si esa es la tendencia que siguen los DAP en el bosque, la
probabilidad de tener árboles entre 60 y 83 cm es mucho menor que bajo la normal (Fig. 5).

La FDP se da por:

fw <- dweibull(xw, shape=6, scale=91)

Para hacer la figura, uso el siguiente código:



windows(w=9, h=5)
par(mfrow=c(1,2))

plot(xw,Fw,type="l",ylab="Densidad acumulada", main="FDA Weibull",


las=1, xlab="DAP (cm)")
polygon(c(xw[xw>=60 & xw<=83],83,60), c(Fw[xw>=60 &
xw<=83],Fw[xw==10],Fw[xw==10]), col="green")

plot(xw,fw,type="l",ylab="f(x)", main="FDP Weibull", las=1, xlab="DAP


(cm)")
polygon(c(xw[xw>=60 & x1<=83], 83, 60), c(fw[xw>=60 & xw<=83],
fw[xw==10], fw[xw==10]), col="red")

FDA Weibull FDP Weibull

1.0 0.025

0.8 0.020
Densidad acumulada

0.6 0.015
f(x)

0.4 0.010

0.2 0.005

0.0 0.000

20 40 60 80 100 120 20 40 60 80 100 120

DAP (cm) DAP (cm)



Figura 5. Función de probabilidad acumulada (FDA) y función de distribución de probabilidad
(FDP) de la distribución del DAP cuando sigue una Weibull con forma = 6 y escala = 91. El área en
verde define P[60 ≤ X ≤ 83] y el área en rojo P[60 ≤ f(x) ≤ 83] .

17

Caja de R # 1 (R Core Team 2018).



The Normal Distribution

Description
Density, distribution function, quantile function and random generation
for the normal distribution with mean equal to mean and standard
deviation equal to sd.

Usage
dnorm(x, mean = 0, sd = 1, log = FALSE)
pnorm(q, mean = 0, sd = 1, [Link] = TRUE, log.p = FALSE)
qnorm(p, mean = 0, sd = 1, [Link] = TRUE, log.p = FALSE)
rnorm(n, mean = 0, sd = 1)

Arguments
x, q vector of quantiles.
p vector of probabilities.
n number of observations. If length(n) > 1, the length is taken
to be the number required.
mean vector of means.
sd vector of standard deviations.
log, log.p logical; if TRUE, probabilities p are given as log(p).
[Link] logical; if TRUE (default), probabilities are P[X ≤ x],
otherwise, P[X > x].

Details
If mean or sd are not specified they assume the default values of 0and 1,
respectively.
The normal distribution has density

f(x) = 1/(√(2 π) σ) e^-((x - µ)^2/(2 σ^2))

where µ is the mean of the distribution and σ the standard deviation.

Value
dnorm gives the density, pnorm gives the distribution function, qnorm
gives the quantile function, and rnorm generates random deviates.

The length of the result is determined by n for rnorm, and is the maximum
of the lengths of the numerical arguments for the other functions.
The numerical arguments other than n are recycled to the length of the
result. Only the first elements of the logical arguments are used.
For sd = 0 this gives the limit as sd decreases to 0, a point mass
at mu. sd < 0 is an error and returns NaN.


18

2.2 Variables dasométricas



Se refiere a las principales variables que ayudan a definir la estructura del bosque; entre estas
están:

Abundancia de individuos: también llamado algunas veces densidad (de individuos). Se define como
el número de individuos por unidad de área. Usualmente se dan en hectáreas (ha).

Diámetro normal: es la medida del diámetro asociado con la circunferencia del tronco a 1.3 m de
altura. Se conoce popularmente como diámetro a la altura de pecho (DAP) y se puede medir en mm,
cm o m.

Área basal (AB): es el área circular asociada con la sección transversal que tiene como diámetro el
DAP. Usualmente se da en cm2 o m2 para árboles individuales y en m2 ha-1 por unidad de área. Se
puede calcular como:

𝜋
𝐴𝐵 = 𝐷𝐴𝑃 !
4

En la mayoría de textos en inglés, el AB se denota por la letra G.

El cálculo del área basal lo podemos derivar bien sea del perímetro (P) o el diámetro (D o DAP) del
árbol o troza.

Dado que uo asume el AB como el área de una circunferencia, se puede deducir que:

𝑃 = 2𝜋𝑅
Dado que DAP = 2R, entonces:
𝑃
𝐷𝐴𝑃 =
𝜋
Por lo tanto, al AB con base en el perímetro se puede calcular como:

𝜋 𝑃 ! 1 𝑃!
𝐴𝐵 = × = ×
4 𝜋 4 𝜋

En cualquiera de estos casos, el AB va a estar en las unidades cuadráticas de la unidad en la que se
midió el DAP o P. La unidad de medición más común, aunque no por ello la obligada, es centímetros
(cm). Este valor de AB se refiere al área transversal ocupada por el fuste del i-ésimo individuo del
bosque. Si deseamos transformar el área basal en cm2 a m2, se debe dividir por 10.000.

Lo anterior es importante dado que las unidades estándar del AB como métrica de la estructura
horizontal sabemos que es m2 ha-1. Esto significa que para extrapolar valores de AB (cm2) que
proviene de n árboles muestreados en parcelas o unidades muestrales de campo con área Ai (ha o
m2), y entregarlos en hectáreas (ha), se debe proceder como sigue:

!
! !!
𝜋 1 ℎ𝑎
𝐴𝐵! 𝑚 ℎ𝑎 = × 𝐴𝐵! 𝑐𝑚 ! ×
40000 𝐴! ℎ𝑎
!!!

19

Donde: ABp: área basal de la parcela en m2 ha-1. Note que si se desea convertir el área de la parcela
en m2, sólo se debe reemplazar 1 ha = 10000 m2.

Altura tocón: altura del remanente de tronco que queda enraizado después del apeo

Altura de fuste (Hf): esta definición puede ser bastante variable según dependa el tipo de estudio.
En algunos casos se asocia con la primera rama de la copa, en otros se define según los
requerimientos comerciales (asociada con un diámetro mínimo). La altura de los árboles se dan
normalmente en metros (m).

Altura total (H): distancia vertical desde el suelo donde enraíza el fuste hasta el último o más alto de
los ápices que componen el árbol.

Diámetro de copa (DC): se refiere al área transversal de la proyección de los extremos de la copa.
Usualmente se da en metros. Se puede calcular como:

𝑑!! + 𝑑!!
𝐷𝐶 =
2

De donde, área de copa (m2) queda como:

𝜋 𝜋 𝑑!! + 𝑑!! ! 𝜋 𝜋
𝐴𝐶 = 𝐷𝐶 ! = × = × 𝑑!! + 𝑑!! ! = × 𝑑!! ! + 2𝑑!! 𝑑!! + 𝑑!! !
4 4 2 16 16

Diámetro cuadrático medio (Dq): es una medida de ocupación del rodal que se define por el
diámetro asociado con al árbol de AB promedio. Se define por

!
1
𝐷𝑞 = 𝐷𝐴𝑃! !
𝑛
!!!

2.2.1 Histogramas y tablas de frecuencia

Los histogramas de frecuencia nos permiten analizar las estructuras de tamaño en un bosque. Como
una primera generalización, podemos decir que estructuras de tipo unimodal representan rodales o
bosques coetáneos (individuos con edad similar), mientras que estructuras de J-invertida
representan rodales o bosques disetáneos (de edades disimiles) (Fig. 4). No obstante, la
distribución de tamaños puede seguir muchas formas, la cual en muchos de los casos se pueden a su
vez representar por modelos estadísticos teóricos, como por ejemplo Weibull, log-normal,
exponencial negativa, etc. Este análisis se desarrollará en una sección aparte dado que no hace
parte en este momento del curso (se dicta actualmente dentro del curso de Modelación).

20

Unimodal J-invertida

Bosque
coetáneo

Frecuencia
Bosque
disetáneo

DAP – Abasal – Dq - H – Vlm - Biomasa


Figura 6. Esquema de las dos estructuras generales de representación de la distribución de
tamaños en rodales o bosques naturales y/o plantados.

Cualquier variable dasométrica que pueda ser cuantificada a escala de rodal, localidad, región, etc,
puede ser analizada en distribuciones de frecuencia.

La forma más simple es usar la función histograma (hist)sobre un vector. Por ejemplo, si en el
archivo datos tenemos una variable que se llame DAP_cm, podemos visualizar su distribución de
frecuencias.

hist(datos$DAP_cm, las =1, col="red", border="black", angle=45,
right=T, density=30, freq=TRUE, main="DAP (cm)")

Puedo incluir líneas conectoras si lo deseo para visualizar el patrón de cambio continuo de las
frecuencias discretas.

lines(hh$mids, hh$counts, lty=2)


Figura 7: histograma producido automáticamente por la función hist.

21


Por defecto, se supone que la primera opción que usa R para definir el número de clases se hace por
lo que se denomina la regla de Sturges, definida por:

𝑐 = 1 + 3.322 ∗ 𝐿𝑜𝑔10(𝑁),

Donde N = la cantidad de datos; c = número de clases (es común redondearlo al entero más
cercano).

Ahora, si queremos definir 10 clases, usamos dentro de la función hist, el comando breaks, así:

hist(datos$ DAP_cm, breaks=10)


Figura 8: histograma producido definiendo 10 intervalos.

Sin embargo, el uso del comando breaks en R dentro de la función hist, cuando se le propone un
número dado de clases, se considera como “una sugerencia” que el programa no siempre asume.
Por ejemplo, si evaluamos lo que obtenemos en la línea de comandos usada arriba y cambiamos 10
por 6,7,8,9 ó 11, vamos a ver que obtenemos el mismo gráfico y los mismos valores. Por eso, lo que
para nuestro curso en primera instancia se recomienda, es hacer uso de la descripción de los
intervalos de clase usando un vector. Para hacerlo, podemos proceder de la siguiente forma:

range(datos$DAP_cm)
[1] 10.03 88.49

h1 <- hist(datos$DAP_cm, breaks=c(seq(10,90,5)))

str(h1)

List of 6
$ breaks : num [1:17] 10 15 20 25 30 35 40 45 50 55 ...
$ counts : int [1:16] 1484 733 356 184 97 48 38 18 14 8 ...
$ density : num [1:16] 0.09933 0.04906 0.02383 0.01232 0.00649
$ mids : num [1:16] 12.5 17.5 22.5 27.5 32.5 37.5 42.5 47.5..
$ xname : chr "datos$DAP_cm"
$ equidist: logi TRUE
- attr(*, "class")= chr "histogram"

22

Los intervalos de clase se obtienen por medio de:


h1$breaks
[1] 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90

Las frecuencias absolutas se obtienen por medio de:
h1$counts
[1] 1484 733 356 184 97 48 38 18 14 8 2 3 1 1 0 1

Las marcas de clase son;
h1$mids
[1] 12.5 17.5 22.5 27.5 32.5 37.5 42.5 47.5 52.5 57.5 62.5 67.5
72.5 77.5 82.5 87.5

Sin embargo, note que esta grafica no posee las marcas de clase, así que podemos usar otra función
para introducirlas y editar nuestro histograma.

names(h1$counts) <- h1$mids

barplot(h1$counts,las=2, xlab= "DAP (cm)", ylab="Número de


individuos", ylim=c(0,1600), col="red", border="black", angle=45,
density=20)


Figura 9: histograma generado usando la función barplot.


Favor haga el mismo ejercicio generando clases equidistantes de 2 cm cada una, usando la
función seq.

Lo primero que debo definir es las marcas de clase asociadas con cada uno de estos
intervalos. En R, las funciones asumen que el límite inferior del intervalo es cerrado en cada
clase y abierto (o que no incluye) el límite superior dentro de ésta. Por supuesto, esto es
modificable dentro de la función con los comandos [Link] = FALSE, right = TRUE,
solamente cuando se usa un vector para definir las clases dentro del comando breaks.

23

Muchas veces, estamos interesados en producir la información que automáticamente generan


algunas de estas funciones para facilitar o ampliar procesos de análisis. Para el caso de los
histogramas, esto se puede hacer usando algunas funciones ya vistas y otras que introduciremos. La
forma de proceder en este caso es:

Para definir las marcas de clase, primero debo establecer la amplitud del intervalo de clase. Para
esto, debo definir el rango entre el valor máximo y mínimo, y dividirlo por el número de clases
deseadas. Para hacer esto, uso las funciones max (datos$ DAP_cm) y min (datos$ DAP_cm), así:

[Link] = [max (datos$ DAP_cm)-min (datos$ DAP_cm)]/#clases

Hay sin embargo una función que me permite visualizar las valores máximo y mínimo, que es la
función range, la cual ya usamos arriba


En la práctica, uno busca la definición dentro de límites que contengan los valores máximo y
mínimo de los datos, pero no necesariamente que sean estos. Por ejemplo, si el DAP mínimo en mi
inventario es 10.3 cm, yo prefiero asumir como límite inferior 10 cm y si el valor máximo es 53.4
cm, podría ser que prefiera un límite superior de clase igual a 55 cm. Mas adelante exploraremos la
función cut y veremos como podemos proceder con esto.

Usemos primero Sturges (la función por defecto en hist)
En R, los comandos son:

[Link]=1+3.322*log10(length(datos$DAP_cm))

[1] 12.54521 # lo aproximo a 13 clases!

Para definir las marcas de clase, primero debo definir la amplitud del intervalo.

[Link] <- (90-10)/13 = 6.153846

[Link] <- 80/round([Link]) # round aproxima el valor decimal


[1] 6.153846

Luego, calculo la primera clase sumando al valor mínimo del rango de datos la amplitud del
intervalo; luego al límite superior de este intervalo le sumo de nuevo la amplitud de intervalo, y así
sucesivamente. La marca de clase se define como el punto medio de cada uno de los intervalos. Creo
un vector con las marcas de clase; por ejemplo:

Usando la función seq (sequence), que saca datos desde un valor a otro con una distancia definida.
Note además el uso de signif, el cual sólo nos entrega en este caso un número con sólo 4 digitos:

[Link] <- signif(seq(10+([Link]/2),90-([Link]/2), [Link]), digits=4)



[1] 13.08 19.23 25.38 31.54 37.69 43.85 50.00 56.15 62.31 68.46 74.62 80.77 86.92

Lo anterior supone una amplitud de intervalo de 6.153846; un valor mínimo del rango de 10 y un
valor máximo de 90.

24

Los limites de los intervalos asociados con estas marcas de clase son:

[Link]=signif(seq(10, 90, [Link]), 4)
[1] 10.00 16.15 22.31 28.46 34.62 40.77 46.92 53.08 59.23 65.38 71.54 77.69 83.85 90.00

length([Link])
[1] 14

Para poder definir las frecuencias vamos a usar la función cut y table:

Primero, si quiero definir un número de clases equidistantes entre los valores del rango, uso la
función cut de forma similar a como se uso la función hist con breaks

fr=cut(datos$DAP_cm, breaks=13)

length(fr)
[1] 2988

fr
[1] (9.95,16.1] (16.1,22.1] (16.1,22.1] (9.95,16.1]…..

fr2=table(fr)
(9.95,16.1] (16.1,22.1] (22.1,28.1] (28.1,34.2] (34.2,40.2] (40.2,46.2] (46.2,52.3]
1699 707 286 143 69 43 20
(52.3,58.3] (58.3,64.3] (64.3,70.4] (70.4,76.4] (76.4,82.5] (82.5,88.6]
11 3 4 1 1 1

names(fr2)
1] "(9.95,16.1]" "(16.1,22.1]" "(22.1,28.1]" "(28.1,34.2]" "(34.2,40.2]"……

Dependiendo de la gráfica, lo ideal sería tener, por ejemplo, las marcas de clase diamétricas como
encabezado. Le incluyo estos valores como encabezado al vector fr2, haciendo lo siguiente:

names(fr2)= [Link](signif([Link], digits=4))
13.08 19.23 25.38 31.54 37.69 43.85 50 56.15 62.31 68.46 74.62 80.77 86.92
1699 707 286 143 69 43 20 11 3 4 1 1 1

Luego, para ver los histogramas, uso la función barplot:

barplot(fr2, las=2, xlab= "DAP (cm)", ylab="Número de individuos",
col="red", border="black", space=0.2, ylim=c(0,2000))
lines([Link](fr2), lty=2)

El comando las define la forma como se posicionan los valores en los ejes (las = 1,2 ó 3)

25


Figura 10. Usando barplot y aplicando la ley de Sturges para definir los intervalos de clase.

Con la función cut, se pueden definir los intervalos de clase de la forma en que yo lo desee. Repita
por ejemplo todo lo hecho con relación a la creación del histograma generando intervalos de clase
entre 0,5,10, 20, 30, 40, >60. El comando base para hacerlo es:

fr.1=cut(datos$DAP_cm, breaks=c(0,5,10, 20, 30, 40, 60))

Vamos ahora a usar funciones que nos permiten sacar datos síntesis por parcela

2.2.2. Función tapply

La función tapply le aplica a un vector numérico, una función sobre una variable “tipo factor”. Es
decir, por ejemplo al vector DAP (numeric) le aplico una suma (sum) en cada una de las parcelas
(Parc).

En nuestro caso, vamos a aplicar la función en cada una de los parcelas existentes. Para ello
debemos crear una nueva variable parcela que por ahora denominaremos nombre_parcela uniendo
la localidad y el numero de la parcela en cada localidad. Esto es necesario para tener un indicador o
marcador independiente para cada parcela, ya que en cada localidad hay 25 parcelas de 0.04 ha
numerdas de 1 a 25 cada una. Es decir, si usamos la variable Parcela, todas as que tienen una misma
designación (por ejemplo la parcela 1 en cada localidad), van a aparecer como una misma entidad
en los análisis

datos$nombre_parcela <- [Link](with(datos, paste(Localidad,Parcela)))


Si quisiera sumar todos los diámetros (algo poco útil como métrica) de todos los árboles que hay en
cada una de las parcelas, aplico la función tapply (DAP_ cm, nombre_parcel, sum). Se puede
aplicar cualquier función existente en R o que uno mismo construya.

Cálculos del número de individuos por hectárea.

n_ind <- with(datos, tapply(DAP_cm, nombre_parcela, length))*1/0.04

Angelopolis 1 Angelopolis 10 Angelopolis 11 Angelopolis 12 Angelopolis 13


975 450 1000 1275 900

26


Cálculos de área basal por parcela (m2 ha-1):

n_AB_m2 <- with(datos, tapply((pi/40000)*DAP_cm^2, nombre_parcela, sum))*1/0.04

head(n_AB_m2)
Angelopolis 1 Angelopolis 10 Angelopolis 11 Angelopolis 12 Angelopolis 13
31.16786 7.07081 28.29443 28.28544 18.09890

Diámetro cuadrático (Dq)

n_Dq <- sqrt (with(datos, tapply(DAP_cm^2, nombre_parcela, mean)))

head(n_Dq)
Angelopolis 1 Angelopolis 10 Angelopolis 11 Angelopolis 12 Angelopolis 13
20.17466 14.14436 18.98041 16.80666 16.00147

Note que para el análisis de Dq no se requiere factor de expansión ni conversión, ya que es
simplemente una unidad que representa un promedio.

Analicemos los histogramas provenientes de estas 3 variables (No individuos (ha-1), Área Basal (m2
ha-1) y diámetro cuadrático medio (cm):

Nro individuos Area Basal (m2 ha−1) Dq (cm)

15 25
20

20

15
10
Frecuencia

Frecuencia

Frecuencia

15

10
10

5
5

0 0 0

200 400 600 800 1000 1200 1400 10 20 30 40 50 15 20 25 30

Nro individuos Area Basal (m2 ha−1) Dq (cm)



Figura 11. Histogramas de variables asociadas con los valores por parcela.

Note el cambio de la tendencia de las distribuciones de tamaño con relación a parcelas, en este caso
asociados con datos provenientes de parcelas y no de los valores derivados de árboles individuales.

2.2.3 Analizando asociaciones entre variables

Vamos ahora a evaluar la asociación entre dos variables aleatorios X, Y, en principio, vamos a usar el
coeficiente de correlación de Pearson, el cual se define por:

27

𝐶𝑂𝑉!"
𝜌!" =
𝜎! 𝜎!
donde: 𝐶𝑂𝑉!" : es la covarianza entre X y Y; 𝜎! : es la desviación estándar de X; 𝜎! : es la desviación
estándar de Y.

Analíticamente, el coeficiente de correlación de Pearson se denota como r y se puede calcular sobre
el estadístico muestral:

𝑥! 𝑦! − 𝑛𝑥𝑦 𝑛 𝑥! 𝑦! − 𝑥! 𝑦!
𝑟= =
𝑛 − 1 𝑆! 𝑆! ! ! ! !
𝑛 𝑥! − 𝑥! 𝑛 𝑦! − 𝑦!
El coeficiente r varía entre -1 y 1, siendo los extremos correlaciones negativas y positivas perfectas,
respectivamente. Cuando r = 0 significa ausencia de correlación lineal, pero no necesariamente
ausencia de correlación no-lineal.

En R, usamos la función cor para calcular la correlación. Sin embargo, usando la función [Link]
podemos indagar no sólo acerca de la correlación, si no además, acerca de la significancia de la
misma.

La hipótesis nula (Ho) del coeficiente r es que no existe asociación entre X y Y.

Usando las variables número de individuos y área basal, calculemos la correlación entre ellas:

[Link](n_ind, AB_m2)

Pearson's product-moment correlation

data: n_ind and AB_m2


t = 6.4681, df = 98, p-value = 3.911e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.3927523 0.6712740
sample estimates:
cor
0.5469748

Nuestro análisis muestra que el número de individuos y al área basal tienen una correlación de
0.55*** (***: p < 0.001).

La mjor forma de ver la tendecnia de una correlación es graficándola con la función plot, lo cual se
denomina diagrama de dispersión.

par(mar=c(4,5,5,5)) #redefine las márgenes para que se vea la leyenda

plot(n_ind, AB_m2, xlab="Nro de individuos", las=1,


ylab=expression (paste("Area Basal" ~ "(", m^{2} ~ ha^{-1},")")))
text(400,40,"r=0.55")

Para incluir la línea de tendencia uso la función lm, la cual hace uso de la virgulilla (~) como
indicadora de un modelo lineal.

28

lm(AB_m2~n_ind)

Call:
lm(formula = AB_m2 ~ n_ind)

Coefficients:
(Intercept) n_ind
8.79393 0.01803

abline(8.79393, 0.01803, col=”red”)

El primer valor de la función abline representa el intercepto y el segundo la pendiente de la recta

Figura 12. Diagarama de dispersión y línea de tendencia lineal de la correlación.

Sin embargo, la función pairs me permite ver la correlación entre varias variables. Sin embargo,
debemos primero poner todas las variables en mismo objeto o archivo, usando en este caso la
función [Link]. Un [Link] se puede asemejar a una hoja de cálculo de Excel, ya que es
un archivo que contiene variables o vectores en las columnas y sus valores en las filas. Puede
contener variables de diferente tipo (por ejemplo numéricas, character, etc).

res.1 <- [Link](n_ind, AB_m2, Dq)

pairs(res.1)

29


Figura 13. Diagramas de dispersión entre más de dos variables.


Esta función puede incluso producir diagramas de dispersión y sus valores al mismo tiempo, si uso
la siguiente función:

[Link] <- function(x, y, digits = 2, prefix = "", [Link], ...)
{
usr <- par("usr"); [Link](par(usr))
par(usr = c(0, 1, 0, 1))
r <- abs(cor(x, y))
txt <- format(c(r, 0.123456789), digits = digits)[1]
txt <- paste0(prefix, txt)
if(missing([Link])) [Link] <- 0.8/strwidth(txt)
text(0.5, 0.5, txt, cex = [Link] * r)
}
pairs(res.1, [Link] = [Link], [Link] = [Link],
gap=0, row1attop=FALSE)


Figura 13. Diagramas de dispersión entre más de dos variables incluyendo el valor de su
correlación.

30

2.2.4 Definiendo tipos de bosque: el uso del análisis de varianza (ANAVA).



Las características estructurales de los bosques, y sus diferencias, son propiedades importantes
como elementos de manejo y planificación. Un bosque puede tener diferencias en alguna de sus
características estructurales, pero no en otra. Por ejemplo, dos bosques pueden tener la misma área
basal, pero diferir en el número de individuos y el diámetro cuadrático medio. Para evaluar
diferencias entre características estructurales de los bosques, introduciremos primero el análisis de
varianza (ANAVA) de una vía para aquellos casos en que poseemos tres (3) o más factores, o la
prueba de t en los cuales sólo deseamos comparar medias entre dos vectores.

Hipótesis del ANAVA:
Ho = Todas las medias provienen de una misma población. También puede presentarse
como: no existen diferencias entre las medias comparadas (de ahí su definición de
nula).
Ha = Las medias provienen de diferentes poblaciones y presentan diferencias.

Nota: La definición de hipótesis nula no debe ser confundida con la definición de un modelo nulo.
En este último, la hipótesis que se pone a prueba es si el patrón observado o evaluado no
difiere de un patrón que se puede obtener simplemente por azar (Gotelli….).

Ho se acepta o rechaza usando una prueba de F, la cual consiste en el cociente entre dos
varianzas. El valor calculado de F en un ANAVA, se obtiene mediante el cociente entre la
varianza entre factores o tratamientos y la varianza entre todas las observaciones. Esto se
conoce popularmente como la varianza entre sobre la varianza dentro de. El valor de este
cociente se compara con el obtenido de la distribución teórica con relación a los grados de
libertad (g.l.) entre y dentro (Fgl1,gl2). Si el valor calculado es mayor que el valor tabulado,
rechazo Ho (es decir, concluyo que hay diferencias entre las medias comparadas).

La tabla del ANAVA se estructura de la siguiente manera:

Fuente de Suma de Grados de Cuadrado medio Prueba de
variación cuadrados libertad significancia
Entre ! !
𝑛! 𝑌! − 𝑌 J-1
!
𝑛! 𝑌! − 𝑌 𝑛! 𝑌! − 𝑌
𝐽−1 𝐽−1
!
Dentro ! N-J
𝑌!" − 𝑌! 𝑌!" − 𝑌! 𝑌!" − 𝑌!
!

𝑁 − 𝐽 𝑁−𝐽
Total ! N-1 !
𝑌!" − 𝑌 𝑌!" − 𝑌
𝑁 − 1

Una importante definición: una varianza se define como una suma de cuadrados dividido
por sus grados de libertad. De ahí que la distribución de F, usada para definir la
significancia, se defina como el cociente entre cuadrados medios (o varianzas). Para su
evaluación, el mayor valor siempre va en el numerador y el menor en el denominador.

Veamos ahora como aplicarlo en R. Usemos el archivo res.1

Incluimos el vector con el nombre de la parcela en el archivo res.1

res.1$nombre_parcela <- [Link](res.1)

31


Lo anterior lo hacemos para poder incluir la localidad, que es la variable sobre la que identificamos
cada bosque y sobre la cual tenemos REPLICAS que permiten hacer estimaciones de medias y
varianzas. Para incluir la Localidad en res.1 vamos a usar las funciones unique y merge.

loc <- with(datos, unique([Link](Localidad, nombre_parcela)))

res.2 <- merge(res.1, loc, by="nombre_parcela")



Reorganicemos la posición de las variables dentro del archivo

res.2 <- res.2[,c(5,1:4)]

Ahora, hagamos el ANAVA (recuerde que en inglés se dice Anova)

[Link] <- aov(n_ind~Localidad, res.2)
summary([Link])

Df Sum Sq Mean Sq F value Pr(>F)


Localidad 3 2713700 904567 28.59 2.7e-13 ***
Residuals 96 3037900 31645
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

[Link] <- aov(AB_m2~Localidad, res.2)


summary([Link])

Df Sum Sq Mean Sq F value Pr(>F)


Localidad 3 766 255.19 4.465 0.00558 **
Residuals 96 5487 57.16
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

[Link] <- aov(Dq~Localidad, res.2)


summary([Link])

Df Sum Sq Mean Sq F value Pr(>F)


Localidad 3 460.0 153.32 21.92 6.76e-11 ***
Residuals 96 671.4 6.99
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

En todas las variables hay diferencias significativas entre localidades. Sin embargo, lo que no
sabemos es entre cuales de ellas. Para averiguarlo usamos una prueba a posteriori, como la prueba
de Tukey HSD (Honest Significant Difference). Procedemos así:

TukeyHSD(n_ind)

Tukey multiple comparisons of means


95% family-wise confidence level

Fit: aov(formula = n_ind ~ Localidad, data = res.2)

$Localidad

32

diff lwr upr p adj


Caucasia-Angelopolis -386 -517.553526 -254.44647 0.0000000
Maceo-Angelopolis -98 -229.553526 33.55353 0.2153258
Valdivia-Angelopolis 32 -99.553526 163.55353 0.9201331
Maceo-Caucasia 288 156.446474 419.55353 0.0000007
Valdivia-Caucasia 418 286.446474 549.55353 0.0000000
Valdivia-Maceo 130 -1.553526 261.55353 0.0540079

Todos los casos para los cuales la p adj ≤ 0.05 significa que hay diferencias entre ellas. Para al
caso del número de individuos, lo que aquí podemos ver es Caucasia tiene diferencias significativas
con todas las otras localidades, las cuales no difieren entre sí. Sin embargo, si aproximamos la p
adj. entre Valdivia-Maceo, deberíamos concluir que entre ellas también hay diferencias
significativas. Dado que sabemos que p adj > 0.05, mejor o definimos como no significativa.

La prueba de Tukey, gráficamente se puede ver como:


Figura 14. Representación gráfica de la prueba de Tukey HSD. Los valores que no pasan por
cero, son los que representan localidades con diferencias significativas entre sí.

Se deja como ejercicio hacer los anavas y el análisis de Tukey para las variables área basal y
diámetro cuadrático medio.

La representación del anava y Tukey, se puede hacer como sigue:

windows(w=5, h=9)
par(mfrow=c(3,1))
par(mar=c(6,6,4,4)) # modifica los margenes
with(res.2, plot(Localidad,n_ind, ylab=expression(paste("Nro
individuos"~"("~ha^{-1},")")), las=2))
# incluyendo las diferencias
text(1,900, "a")
text(2,500, "b")
text(3,830, "a")

33

text(4,950, "a")

# ab
with(res.2, plot(Localidad,AB_m2, ylab=expression (paste("Area Basal"~ "(",
m^{2} ~ ha^{-1},")")), las=2))
# incluyendo las diferencias
text(1,26, "a,b")
text(2,25, "a")
text(3,24, "b")
text(4,23, "a,b")

# Dq
with(res.2, plot(Localidad,Dq, ylab="Dq (cm)", las=2))
# incluyendo las diferencias
text(1, 16.5, "a")
text(2, 23.5, "b")
text(3, 20, "b")
text(4, 16.5, "a")

par(mfrow=c(1,1))

1200
Nro individuos ( ha−1)

1000
a
a
800 a

600
b
400
Angelopolis

Caucasia

Maceo

Valdivia

40
Area Basal (m2 ha−1)

30
a,b a b a,b
20

10
Angelopolis

Caucasia

Maceo

Valdivia

30

25
b
Dq (cm)

20 b

a a
15
Angelopolis

Caucasia

Maceo

Valdivia

34

Figura 15. Representación de loa anava y la prueba de Tukey. Letras similares representan
localidades en las que las medias no difieren entre sí, mientras que letras diferentes
representan localidades con diferencias significativas en su respectiva variable.
2.2.5 Notas complementarias

R cada día nos facilita mucho más las cosas con nuevas librerías. Librerías como Tydiverse y doBy
ganan cada vez más terreno en la idea de facilitar estos procesos. Como ilustración, veremos la
simpleza de generar estas tablas usando doBy, para obtener la tabla de área basal

Usando la libreria doBy
library(doBy)

names(datos)

Incluimos área basal
datos$ABasal_cm2 <- with(datos, (pi/4)*DAP_cm^2)

Calculando A BAsal x localidad y parcela
ab_cm2 <- summaryBy(ABasal_cm2~nombre_parcela+Localidad, data=datos,
FUN=sum, [Link] = TRUE)

Estos valores están en cm2 y no han sido extrapolados a ha
ab_cm2$ab_m2_ha <- with (ab_cm2,(ABasal_cm2/10000)*(1/0.04))

Calculando número de individuos por localidad y parcela
N_ind <- summaryBy(DAP_cm~nombre_parcela+Localidad, data=datos,
FUN=length, [Link] = TRUE)

Debemos cambiar el nombre de la variable (aparece DAP_cm) por N_ind
colnames(N_ind) <- c("nombre_parcela", "Localidad", "N_ind")

Estos valores están referenciados a 0.04 ha y no han sido extrapolados a ha
N_ind$N_ind_ha <- with (N_ind,N_ind*(1/0.04))

Calculando el Dq
Debemos incluir una variable DAP2
datos$DAP_cm2 <- datos$DAP_cm^2
Dq <- summaryBy(DAP_cm2~nombre_parcela+Localidad, data=datos,
FUN=mean, [Link] = TRUE)

Debemos cambiar el nombre de la variable (aparece DAP_cm2) y aplicarle sqrt
colnames(Dq) <- c("nombre_parcela", "Localidad", "Dq")
Dq$Dq <- sqrt(Dq[,3])

Confirmando que los valores son los mismos que calculamos antes
plot(Dq[,3], res.2[,5])

Ahora armo un sólo archivo
res.3 <- [Link](N_ind[,-3],ab_cm2[,4] ,Dq[,3])
res.3 <- res.3[,c(2,1,3:5)]
colnames(res.3) <- c("Localidad","nombre_parcela", "N_ind_ha", "AB_m2_ha",
"Dq_cm")

35

head(res.3)
Localidad nombre_parcela N_ind_ha AB_m2_ha Dq_cm
1 Angelopolis Angelopolis 1 975 31.16786 20.17466
2 Angelopolis Angelopolis 10 450 7.07081 14.14436
3 Angelopolis Angelopolis 11 1000 28.29443 18.98041
4 Angelopolis Angelopolis 12 1275 28.28544 16.80666
5 Angelopolis Angelopolis 13 900 18.09890 16.00147
6 Angelopolis Angelopolis 14 875 15.10552 14.82582

36

También podría gustarte