Índice de Shannon-Wiener

El índice de Shannon o Shannon-Wiener o simplemente índice de Shannon ha sido utilizado en ecología y otras ciencias como indicador de biodiversidad. Este índice fue creado originalmente para ser usado como medida de entropía en cadenas de caracteres (i.e., texto), en el contexto de la teoría de la información (Legendre & Legendre, 1998). En general para una colección de objetos de distintas categorías (i.e., individuos de distintas especies), el índice de Shannon se calcula con la siguiente fórmula:

\[ H = - \sum_{i=1}^{i=S} p_i \cdot log_2 (p_i) \]

(Ec. 1)

(La base del logaritmo no es demasiado importante, pero en este ejercicio nos vamos a regir a esta definición en particular)

Aquí S es el número total de categorías y \( p_i \) es la frecuencia relativa de la categoría i. Es decir:

\[ p_i = \frac{n_i}{N} \]

En donde \( n_i \) es la cantidad de objetos de la categoría i contenidos en nuestra colección y N es la cantidad total de objetos. Por ejemplo, para la palabra “banana”, los \( p_i \) de las letras “a”, “b” y “n” son \( 3/6 \), \( 1/6 \) y \( 2/6 \) respectivamente y el H resultante es 1.46.

1. Calcular el índice de Shannon-Wiener

En el archivo shannon.R usted encontrará código de R incompleto. El objetivo de este script es calcular el H de un vector de números llamado coleccion.

Observaciones a tener en cuenta:

La función table sirve para hacer un conteo de la cantidad de objetos por categoría, mientras que la función length devuelve la cantidad de elementos de un vector cualquiera.

Cuando se multiplican vectores del mismo largo en R, la operación ocurre elemento por elemento (es una forma de vectorización), a diferencia de lo que es la multiplicación matricial normal (la cual se hace con el operador %*%). Por ejemplo, la multiplicación c(1, 2, 3) * c(5, 5, 5) debería resultar en los números 5, 10 y 15. Nótese que la función c sirve para “concatenar” elementos y así construir vectores.

Esta propiedad de la multiplicación en R es útil, en combinación con la función sum, para calcular la sumatoria de la Ec. 1. Si el código que usted ha hecho es correcto, entonces el H resultante debería ser 2.699514 y la siguiente frase sería correcta:

frase <- "Esta frase tiene un H = 3.7"
x <- strsplit(frase, "")[[1]]
Shannon(x)
## [1] 3.708

(lo invitamos a descubrir el resultado del segundo comando)