http://en.opasnet.org/en-opwiki/api.php?action=feedcontributions&user=Kalle&feedformat=atomOpasnet - User contributions [en]2024-03-29T15:24:44ZUser contributionsMediaWiki 1.29.1http://en.opasnet.org/en-opwiki/index.php?title=File:E-F-.csv&diff=23841File:E-F-.csv2012-03-05T17:48:31Z<p>Kalle: uploaded a new version of &quot;File:E-F-.csv&quot;</p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Nadat.csv&diff=23840File:Nadat.csv2012-03-05T17:32:03Z<p>Kalle: </p>
<hr />
<div><rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic" variables="<br />
name:file|description:Which file do you want to analyze?|type:selection|options: '/f/fc/E-F%2B.csv';E-F+;'/c/c2/E%2BF%2B.csv';E+F+;'/a/a1/M-F%2B.csv';M-F+;'/d/d2/M%2BF%2B.csv';M+F+;'/8/82/E-F-.csv';E-F-;'/a/a1/E%2BF-.csv';E+F-;'/9/9d/M-F-.csv';M-F-;'/d/dc/M%2BF-.csv';M+F-;'f/f5/Ruutu1.csv';Ruutu1.csv;'9/95/Ruutu2.csv';Ruutu2.csv;'d/d1/Ruutu3.csv';Ruutu3.csv;'d/df/Ruutu4.csv';Ruutu4.csv;'2/29/Ruutu5.csv';Ruutu5.csv;'c/c6/Ruutu6.csv';Ruutu6.csv;'f/f5/Ruutu7.csv';Ruutu7.csv;'9/98/Ruutu8.csv';Ruutu8.csv;'e/e3/Ruutu9.csv';Ruutu9.csv;'9/99/Ruutu10.csv';Ruutu10.csv;'0/05/Ruutu11.csv';Ruutu11.csv;'2/2c/Ruutu12.csv';Ruutu12.csv;'3/33/Ruutu13.csv';Ruutu13.csv;'a/a3/Ruutu14.csv';Ruutu14.csv;'b/b5/Ruutu15.csv';Ruutu15.csv;'3/33/Ruutu16.csv';Ruutu16.csv;'6/62/Ruutu17.csv';Ruutu17.csv;'5/5e/Ruutu18.csv';Ruutu18.csv;'b/bd/Ruutu19.csv';Ruutu19.csv;'7/7d/Ruutu20.csv';Ruutu20.csv;'1/12/20linjaa.csv';20linjaa.csv;'f/f0/Nadat.csv';Nadat.csv|default:'1/12/20linjaa.csv'|<br />
name:indices|description:How many first columns are explanatory (i.e., not species data)?|default:1<br />
"><br />
<br />
cat("Loading necessary packages and functions.\n")<br />
<br />
library(OpasnetBaseUtils)<br />
library(reshape)<br />
library(xtable)<br />
<br />
cat("Loading data and transforming it into the right format.\n")<br />
<br />
data <- opasnet.csv(file)<br />
data <- melt(data, id.var = 1:indices)<br />
names(data)[1] <- "transect"<br />
<br />
cat("Showing the first rows of data.\n")<br />
<br />
head(data)<br />
<br />
q.wiki <- c(0,1,2,3,4)<br />
<br />
out <- diversity(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Gamma diversities for transects.\n")<br />
print(xtable(out[[3]]), type = 'html', html.table.attributes = "class='sortable'")<br />
<br />
out <- diversity.table(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Summary of diversity indices.\n")<br />
print(xtable(out), type = 'html', html.table.attributes = "class='sortable'")<br />
</rcode><br />
<br />
NOTE! Transect information must be in the first column.</div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:M%2BF-.csv&diff=23839File:M+F-.csv2012-03-05T17:21:51Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:M-F-.csv&diff=23838File:M-F-.csv2012-03-05T17:21:35Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:E%2BF-.csv&diff=23837File:E+F-.csv2012-03-05T17:21:20Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:E-F-.csv&diff=23836File:E-F-.csv2012-03-05T17:21:04Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:M%2BF%2B.csv&diff=23835File:M+F+.csv2012-03-05T17:09:38Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:M-F%2B.csv&diff=23834File:M-F+.csv2012-03-05T17:09:23Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:E%2BF%2B.csv&diff=23833File:E+F+.csv2012-03-05T17:09:02Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:E-F%2B.csv&diff=23832File:E-F+.csv2012-03-05T17:08:41Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu1.csv&diff=23830File:Ruutu1.csv2012-03-02T14:19:34Z<p>Kalle: uploaded a new version of &quot;File:Ruutu1.csv&quot;</p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Nadat.csv&diff=23826File:Nadat.csv2012-03-01T14:59:07Z<p>Kalle: </p>
<hr />
<div><rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic" variables="<br />
name:file|description:Which file do you want to analyze?|type:selection|options: ’f/f5/Ruutu1.csv';Ruutu1.csv;’9/95/Ruutu2.csv';Ruutu2.csv;’d/d1/Ruutu3.csv';Ruutu3.csv;’d/df/Ruutu4.csv';Ruutu4.csv;’2/29/Ruutu5.csv';Ruutu5.csv;’c/c6/Ruutu6.csv';Ruutu6.csv;’f/f5/Ruutu7.csv';Ruutu7.csv;’9/98/Ruutu8.csv';Ruutu8.csv;’e/e3/Ruutu9.csv';Ruutu9.csv;’9/99/Ruutu10.csv';Ruutu10.csv;’0/05/Ruutu11.csv';Ruutu11.csv;’2/2c/Ruutu12.csv';Ruutu12.csv;’3/33/Ruutu13.csv';Ruutu13.csv;’a/a3/Ruutu14.csv';Ruutu14.csv;’b/b5/Ruutu15.csv';Ruutu15.csv;’3/33/Ruutu16.csv';Ruutu16.csv;’6/62/Ruutu17.csv';Ruutu17.csv;’5/5e/Ruutu18.csv';Ruutu18.csv;’b/bd/Ruutu19.csv';Ruutu19.csv;’7/7d/Ruutu20.csv';Ruutu20.csv;'1/12/20linjaa.csv';20linjaa.csv;'f/f0/Nadat.csv';Nadat.csv|default:'1/12/20linjaa.csv'|<br />
name:indices|description:How many first columns are explanatory (i.e., not species data)?|default:1<br />
"><br />
<br />
cat("Loading necessary packages and functions.\n")<br />
<br />
library(OpasnetBaseUtils)<br />
library(reshape)<br />
library(xtable)<br />
<br />
cat("Loading data and transforming it into the right format.\n")<br />
<br />
data <- opasnet.csv(file)<br />
data <- melt(data, id.var = 1:indices)<br />
names(data)[1] <- "transect"<br />
<br />
cat("Showing the first rows of data.\n")<br />
<br />
head(data)<br />
<br />
q.wiki <- c(0,1,2,3,4)<br />
<br />
out <- diversity(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Gamma diversities for transects.\n")<br />
print(xtable(out[[3]]), type = 'html', html.table.attributes = "class='sortable'")<br />
<br />
out <- diversity.table(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Summary of diversity indices.\n")<br />
print(xtable(out), type = 'html', html.table.attributes = "class='sortable'")<br />
</rcode><br />
<br />
NOTE! Transect information must be in the first column.</div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Nadat.csv&diff=23825File:Nadat.csv2012-03-01T14:42:39Z<p>Kalle: </p>
<hr />
<div><rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic" variables="<br />
name:file|description:Which file do you want to analyze?|type:selection|options: ’f/f5/Ruutu1.csv';Ruutu1;’9/95/Ruutu2.csv';Ruutu2;’d/d1/Ruutu3.csv';Ruutu3;’d/df/Ruutu4.csv';Ruutu4;’2/29/Ruutu5.csv';Ruutu5;’c/c6/Ruutu6.csv';Ruutu6;’f/f5/Ruutu7.csv';Ruutu7;’9/98/Ruutu8.csv;Ruutu8;’e/e3/Ruutu9.csv;Ruutu9;’9/99/Ruutu10.csv;Ruutu10;’0/05/Ruutu11.csv;Ruutu11;’2/2c/Ruutu12.csv;Ruutu12;’3/33/Ruutu13.csv;Ruutu13;’a/a3/Ruutu14.csv;Ruutu14;’b/b5/Ruutu15.csv;Ruutu15;’3/33/Ruutu16.csv;Ruutu16;’6/62/Ruutu17.csv;Ruutu17;’5/5e/Ruutu18.csv;Ruutu18;’b/bd/Ruutu19.csv;Ruutu19;’7/7d/Ruutu20.csv;Ruutu20;'1/12/20linjaa.csv';20linjaa.csv;'f/f0/Nadat.csv';Nadat.csv|default:'1/12/20linjaa.csv'|<br />
name:indices|description:How many first columns are explanatory (i.e., not species data)?|default:1<br />
"><br />
<br />
cat("Loading necessary packages and functions.\n")<br />
<br />
library(OpasnetBaseUtils)<br />
library(reshape)<br />
library(xtable)<br />
<br />
cat("Loading data and transforming it into the right format.\n")<br />
<br />
data <- opasnet.csv(file)<br />
data <- melt(data, id.var = 1:indices)<br />
names(data)[1] <- "transect"<br />
<br />
cat("Showing the first rows of data.\n")<br />
<br />
head(data)<br />
<br />
q.wiki <- c(0,1,2,3,4)<br />
<br />
out <- diversity(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Gamma diversities for transects.\n")<br />
print(xtable(out[[3]]), type = 'html', html.table.attributes = "class='sortable'")<br />
<br />
out <- diversity.table(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Summary of diversity indices.\n")<br />
print(xtable(out), type = 'html', html.table.attributes = "class='sortable'")<br />
</rcode><br />
<br />
NOTE! Transect information must be in the first column.</div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu20.csv&diff=23824File:Ruutu20.csv2012-03-01T14:31:05Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu19.csv&diff=23823File:Ruutu19.csv2012-03-01T14:30:40Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu18.csv&diff=23822File:Ruutu18.csv2012-03-01T14:30:15Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu17.csv&diff=23821File:Ruutu17.csv2012-03-01T14:29:47Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu16.csv&diff=23820File:Ruutu16.csv2012-03-01T14:29:22Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu15.csv&diff=23819File:Ruutu15.csv2012-03-01T14:28:52Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu14.csv&diff=23818File:Ruutu14.csv2012-03-01T14:28:22Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu13.csv&diff=23817File:Ruutu13.csv2012-03-01T14:27:58Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu12.csv&diff=23816File:Ruutu12.csv2012-03-01T13:53:39Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu11.csv&diff=23815File:Ruutu11.csv2012-03-01T13:53:14Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu10.csv&diff=23814File:Ruutu10.csv2012-03-01T13:52:46Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu9.csv&diff=23813File:Ruutu9.csv2012-03-01T13:46:31Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu8.csv&diff=23812File:Ruutu8.csv2012-03-01T13:45:52Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu7.csv&diff=23811File:Ruutu7.csv2012-03-01T13:45:23Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu6.csv&diff=23810File:Ruutu6.csv2012-03-01T13:44:54Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu5.csv&diff=23809File:Ruutu5.csv2012-03-01T13:44:24Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu4.csv&diff=23808File:Ruutu4.csv2012-03-01T13:43:55Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu3.csv&diff=23807File:Ruutu3.csv2012-03-01T13:43:27Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu2.csv&diff=23806File:Ruutu2.csv2012-03-01T13:42:56Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Ruutu1.csv&diff=23805File:Ruutu1.csv2012-03-01T13:40:00Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:20linjaa.csv&diff=23803File:20linjaa.csv2012-02-29T17:01:57Z<p>Kalle: </p>
<hr />
<div><rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic"><br />
<br />
cat("Loading necessary packages and functions.\n")<br />
<br />
library(OpasnetBaseUtils)<br />
library(reshape)<br />
library(xtable)<br />
<br />
cat("Loading data and transforming it into the right format.\n")<br />
<br />
data <- opasnet.csv("1/12/20linjaa.csv")<br />
data <- melt(data, id.var = 1:4)<br />
names(data)[1] <- "transect"<br />
<br />
cat("Showing the first rows of data.\n")<br />
<br />
head(data)<br />
<br />
q.wiki <- c(0,1,2,3,4)<br />
<br />
out <- diversity(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Gamma diversities for transects.\n")<br />
print(xtable(out[[3]]), type = 'html', html.table.attributes = "class='sortable'")<br />
<br />
out <- diversity.table(amount = data$value, species = data$variable, transect = data$transect)<br />
<br />
cat("Summary of diversity indices.\n")<br />
print(xtable(out), type = 'html', html.table.attributes = "class='sortable'")<br />
</rcode></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:20linjaa.csv&diff=23802File:20linjaa.csv2012-02-29T16:40:57Z<p>Kalle: </p>
<hr />
<div></div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=Diversity_index&diff=23800Diversity index2012-02-29T08:24:03Z<p>Kalle: </p>
<hr />
<div>[[Category:Ecology]]<br />
{{method|moderator=Jouni|stub=Yes}}<br />
<br />
==Question==<br />
<br />
How to calculate diversity indices?<br />
<br />
==Answer==<br />
<br />
Use the function ''diversity'' to calculate the most common indices. These parameters are used:<br />
* amount: the number (or proportion) of individuals of a species in a transect.<br />
* species: an identifier for a species<br />
* transect: an identifier for a transect<br />
* q: exponent for the diversity calculation<br />
<br />
<br />
Amount, species, and transect are vectors (i.e. ordered sets of values). The parameters can be given to the function in several different ways. This is hopefully practical for the user.<br />
* Amount, species, and transect must be of same length.<br />
* If parameter names are not used (e.g. ''diversity(param1, param2, param3)''), it is assumed that they are given in this order: amount, species, transect, q.<br />
* If individual data is given using species identifiers, it the parameter name must be given: ''diversity(species = param1)''.<br />
* The following default values are used for parameters:<br />
** Amount: 1 for each species, i.e. each species is equally abundant.<br />
** Species: 1, 2, 3, ... n, where n = number of rows in data, i.e. each row is a different species.<br />
** Transect: 1, i.e. there is only one transect.<br />
** q: q.wiki. You MUST define an object q.wiki before using diversity, otherwise alpha diversities will be calculated wrong. q.wiki can be a single number or a vector of numbers.<br />
<br />
<br />
There are several ways to upload your data so that you can use the diversity function.<br />
* Upload your data to [[Opasnet Base]] and call for the data using [[Opasnet Base Connection for R#Downloading data|op_baseGetData]] function.<br />
* Upload a CSV file to Opasnet using [[Special:Upload]] and call for the data using [[OpasnetBaseUtils#Rcode generic|opasnet.data]] function.<br />
* Use Example 1 code below to enter your data. The data must be in format c(4,6,2,5,7,4,3,9) where the values are either <br />
** identifiers of the species 1,2,3... in which the individuals belong (one entry per individual), or<br />
** abundancies of species, i.e. proportions or amounts of individuals belonging to each species among the whole population (one entry per species).<br />
<br />
'''Actual function ''diversity'''''<br />
<br />
<rcode name="answer"><br />
<br />
####NOTE! q.wiki MUST BE DEFINED OR ALPHA DIVERSITIES WILL BE CALCULATED WRONG<br />
<br />
####### qD calculates true i.e. gamma diversity for abundance pi with exponent q.<br />
<br />
qD <- function(pi, q = q.wiki){ # q.wiki is the q given by the user.<br />
pi <- pi/sum(pi)<br />
out <- rep(NA, length(q))<br />
for(i in 1:length(q)){<br />
if(q[i] == 1)<br />
{out[i] <- exp(-sum(pi * log(pi)))} else<br />
if( q[i] == 999){<br />
out[i] <- 1/max(pi)} else<br />
{out[i] <- (sum(pi^q[i]))^(1 / (1 - q[i]))<br />
}<br />
}<br />
<br />
q[q == 999] <- "∞"<br />
names(out) <- q<br />
return(out)<br />
}<br />
<br />
###### qDa calculates alpha diversity using gamma diversities of each transect.<br />
<br />
qDa <- function(divj, wj = 1, q = q.wiki){<br />
q. <- rep(q, times = length(wj))<br />
wj <- rep(wj, each = length(q))<br />
<br />
minqDj <- tapply(divj, q., min) # Should this be the inverse?<br />
out <- ifelse(q. == 1, wj * log(divj), wj * divj^(1-q.))<br />
out <- tapply(out, q., sum)<br />
out <- ifelse(q == 1, exp(out), out^(1 / (1 - q)))<br />
out[q == 999] <- minqDj[q == 999]<br />
q[q == 999] <- "∞"<br />
names(out) <- q<br />
return(out)<br />
}<br />
<br />
####### diversity is the function for the user. It calculates several diversity<br />
####### indices. Parameters:<br />
## amount: the number of individuals of a species in a transect.<br />
## species: an identifier for a species<br />
## transect: an identifier for a transect<br />
## q: exponent for the diversity calculation<br />
<br />
<br />
diversity <- function(amount = rep(1,length(species)), species = 1:length(amount), transect = 1, q = q.wiki){<br />
<br />
pij <- as.data.frame(as.table(tapply(amount, data.frame(Transect = transect, Species = species), sum)))<br />
colnames(pij)[3] <- "pij"<br />
pij <- dropall(pij[!is.na(pij$pij) & pij$pij != 0, ])<br />
pij$pij <- pij$pij/sum(pij$pij)<br />
<br />
wj <- as.data.frame(as.table(tapply(pij$pij, pij$Transect, sum)))<br />
pi <- as.data.frame(as.table(tapply(pij$pij, pij$Species, sum)))[, 2]<br />
<br />
colnames(wj) <- c("Transect", "wj")<br />
out <- merge(pij, wj)<br />
<br />
out <- tapply(out$pij, out$Transect, qD)<br />
<br />
qDj <- NULL<br />
<br />
for(i in 1:nrow(wj)){<br />
qDj <- c(qDj, out[[i]])<br />
}<br />
<br />
gamma <- qD(pi, q)<br />
alpha <- qDa(qDj, wj$wj, q)<br />
dim(qDj) <- c(length(q), length(qDj)/length(q))<br />
q[q == 999] <- "∞"<br />
dimnames(qDj) <- list(q, levels(as.factor(pij$Transect)))<br />
<br />
return(list(gamma = gamma, alpha = alpha, tr.gammas = t(qDj)))<br />
}<br />
<br />
########## diversity.table makes a data table out of the results.<br />
<br />
diversity.table <- function(amount = rep(1,length(species)), species = 1:length(amount), transect = 1, q = q.wiki){<br />
<br />
temp <- diversity(amount, species, transect, q)<br />
gamma <- temp[["gamma"]]<br />
alpha <- temp[["alpha"]]<br />
beta. <- gamma / alpha<br />
beta.A <- gamma - alpha<br />
beta.W <- gamma / alpha - 1<br />
beta.P <- 1 - alpha / gamma<br />
qt <- gsub("999", "∞", q)<br />
<br />
outlabel <- c(<br />
paste("Gamma diversity with q=", qt, sep=""),<br />
paste("Alpha diversity with q=", qt, sep=""),<br />
paste("Beta diversity (strict) with q=", qt, sep=""),<br />
paste("Beta diversity (absolute turnover) with q=", qt, sep=""),<br />
paste("Beta diversity (Whittaker's turnover) with q=", qt, sep=""),<br />
paste("Beta diversity (proportional turnover) with q=", qt, sep=""))<br />
<br />
outsymbol <- c(<br />
paste(qt, "D", sep=""),<br />
paste(qt, "Da", sep=""),<br />
paste(qt, "Beta.", sep=""),<br />
paste(qt, "Beta.A", sep=""),<br />
paste(qt, "Beta.W", sep=""),<br />
paste(qt, "Beta.P", sep=""))<br />
<br />
out <- data.frame(Name = c(outlabel, "Richness", "Shannon index", <br />
"Simpson index", "Inverse Simpson index", "Gini-Simpson index", "Berger-Parker index"), <br />
Symbol = c(outsymbol, "S", "H' or log(1D)", "λ or 1/(2D)", "1/λ or 2D", <br />
"1-λ or 1-1/(2D)", "1/(∞D)"),<br />
Value = c(gamma, alpha, beta., beta.A, beta.W, beta.P, length(pi), log(qD(pi,1)), <br />
1/qD(pi,2), qD(pi,2), 1-1/qD(pi,2), 1/qD(pi,999)))<br />
return(out)<br />
}<br />
<br />
cat("Functions loaded.\n")<br />
<br />
</rcode><br />
<br />
The function ''diversity'' produces a list where the first, second, and third element are the gamma, the alpha, and transect-specific gamma diversities, respectively.<br />
<br />
Function ''diversity.table'' produces a data.frame of several diversity indices.<br />
<br />
===Examples===<br />
<br />
'''Example 1 to use function<br />
<br />
<rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic" variables="<br />
name:data|description:Give your data in R format or leave empty for example data|<br />
name:individual|description:Is your data individual data or group abundancies?|type:selection|options:TRUE;Individual;FALSE;Group|default:TRUE<br />
"><br />
library(xtable)<br />
q.wiki = 0<br />
if(is.null(data)) {data <- c(1,4,6,9,3,4,5,6,5,4,3,3,5,5,7,5,5,4,3,4,5,6,8,9,5,4,5,4,3,3,4,9,6,6,4,5,3,2,1,1,2,3,4,3,2,3,4,5,6,7,7)}<br />
data<br />
diversity(data)<br />
if(individual==TRUE) out <- diversity(species = data, q = q.wiki) else out <- diversity(amount = data, q = q.wiki)<br />
print(xtable(out), type = 'html')<br />
</rcode><br />
<br />
'''Example 2<br />
<br />
<rcode include="page:OpasnetBaseUtils|name:generic|page:Diversity_index|name:answer" variables="<br />
name:wikidata|description:Select your data|type:selection|options:'5/54/Tigre-data.csv';Tigre|default:'5/54/Tigre-data.csv'|<br />
name:q.wiki|description:Which q values you want to calculate.|type:checkbox|options:0;0;0.5;0.5;1;1;2;2;3;3;6;6;999;∞|default:0;1;2;999<br />
"><br />
library(OpasnetBaseUtils)<br />
library(xtable)<br />
data <- opasnet.csv(wikidata, wiki = "opasnet_en", sep = ",")<br />
data <- data[data$Species != 1, ]<br />
<br />
species <- data$Species<br />
amount <- data$Individuals<br />
transect <- data$Transect<br />
<br />
diversity(amount, species, transect, q.wiki)<br />
print(xtable(diversity(amount, species, transect, q.wiki)[[3]]), type = 'html')<br />
print(xtable(diversity.table(amount, species, transect, q.wiki)), type = 'html')<br />
<br />
</rcode><br />
<br />
The data should be given in R format as a list of values in parenthesis, beginning with c:<br />
c(3,5,3,5,2,1,3,3,4,2) or equivalently c(0.1,0.2,0.4,0.1,0.2)<br />
where the values are either <br />
* identifiers of the species 1,2,3... in which the individuals belong (one entry per individual), or<br />
* abundancies of species, i.e. proportions of individuals belonging to each species among the whole population (one entry per species).<br />
<br />
==Rationale==<br />
<br />
[[:en:Diversity index|Diversity indices]] are thoroughly described in Wikipedia.<br />
<br />
==See also==<br />
<br />
==References==<br />
<br />
<references/><br />
<br />
==Related files==<br />
<br />
{{mfiles}}</div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=Diversity_index&diff=23799Diversity index2012-02-29T08:22:34Z<p>Kalle: </p>
<hr />
<div>[[Category:Ecology]]<br />
{{method|moderator=Jouni|stub=Yes}}<br />
<br />
==Question==<br />
<br />
How to calculate diversity indices?<br />
<br />
==Answer==<br />
<br />
Use the function ''diversity'' to calculate the most common indices. These parameters are used:<br />
* amount: the number (or proportion) of individuals of a species in a transect.<br />
* species: an identifier for a species<br />
* transect: an identifier for a transect<br />
* q: exponent for the diversity calculation<br />
<br />
<br />
Amount, species, and transect are vectors (i.e. ordered sets of values). The parameters can be given to the function in several different ways. This is hopefully practical for the user.<br />
* Amount, species, and transect must be of same length.<br />
* If parameter names are not used (e.g. ''diversity(param1, param2, param3)''), it is assumed that they are given in this order: amount, species, transect, q.<br />
* If individual data is given using species identifiers, it the parameter name must be given: ''diversity(species = param1)''.<br />
* The following default values are used for parameters:<br />
** Amount: 1 for each species, i.e. each species is equally abundant.<br />
** Species: 1, 2, 3, ... n, where n = number of rows in data, i.e. each row is a different species.<br />
** Transect: 1, i.e. there is only one transect.<br />
** q: q.wiki. You MUST define an object q.wiki before using diversity, otherwise alpha diversities will be calculated wrong. q.wiki can be a single number or a vector of numbers.<br />
<br />
<br />
There are several ways to upload your data so that you can use the diversity function.<br />
* Upload your data to [[Opasnet Base]] and call for the data using [[Opasnet Base Connection for R#Downloading data|op_baseGetData]] function.<br />
* Upload a CSV file to Opasnet using [[Special:Upload]] and call for the data using [[OpasnetBaseUtils#Rcode generic|opasnet.data]] function.<br />
* Use Example 1 code below to enter your data. The data must be in format c(4,6,2,5,7,4,3,9) where the values are either <br />
** identifiers of the species 1,2,3... in which the individuals belong (one entry per individual), or<br />
** abundancies of species, i.e. proportions or amounts of individuals belonging to each species among the whole population (one entry per species).<br />
<br />
'''Actual function ''diversity'''''<br />
<br />
<rcode name="answer"><br />
<br />
####NOTE! q.wiki MUST BE DEFINED OR ALPHA DIVERSITIES WILL BE CALCULATED WRONG<br />
<br />
####### qD calculates true i.e. gamma diversity for abundance pi with exponent q.<br />
<br />
qD <- function(pi, q = q.wiki){ # q.wiki is the q given by the user.<br />
pi <- pi/sum(pi)<br />
out <- rep(NA, length(q))<br />
for(i in 1:length(q)){<br />
if(q[i] == 1)<br />
{out[i] <- exp(-sum(pi * log(pi)))} else<br />
if( q[i] == 999){<br />
out[i] <- 1/max(pi)} else<br />
{out[i] <- (sum(pi^q[i]))^(1 / (1 - q[i]))<br />
}<br />
}<br />
<br />
q[q == 999] <- "∞"<br />
names(out) <- q<br />
return(out)<br />
}<br />
<br />
###### qDa calculates alpha diversity using gamma diversities of each transect.<br />
<br />
qDa <- function(divj, wj = 1, q = q.wiki){<br />
q. <- rep(q, times = length(wj))<br />
wj <- rep(wj, each = length(q))<br />
<br />
minqDj <- tapply(divj, q., min) # Should this be the inverse?<br />
out <- ifelse(q. == 1, wj * log(divj), wj * divj^(1-q.))<br />
out <- tapply(out, q., sum)<br />
out <- ifelse(q == 1, exp(out), out^(1 / (1 - q)))<br />
out[q == 999] <- minqDj[q == 999]<br />
q[q == 999] <- "∞"<br />
names(out) <- q<br />
return(out)<br />
}<br />
<br />
####### diversity is the function for the user. It calculates several diversity<br />
####### indices. Parameters:<br />
## amount: the number of individuals of a species in a transect.<br />
## species: an identifier for a species<br />
## transect: an identifier for a transect<br />
## q: exponent for the diversity calculation<br />
<br />
<br />
diversity <- function(amount = rep(1,length(species)), species = 1:length(amount), transect = 1, q = q.wiki){<br />
<br />
pij <- as.data.frame(as.table(tapply(amount, data.frame(Transect = transect, Species = species), sum)))<br />
colnames(pij)[3] <- "pij"<br />
pij <- dropall(pij[!is.na(pij$pij) & pij$pij != 0, ])<br />
pij$pij <- pij$pij/sum(pij$pij)<br />
<br />
wj <- as.data.frame(as.table(tapply(pij$pij, pij$Transect, sum)))<br />
pi <- as.data.frame(as.table(tapply(pij$pij, pij$Species, sum)))[, 2]<br />
<br />
colnames(wj) <- c("Transect", "wj")<br />
out <- merge(pij, wj)<br />
<br />
out <- tapply(out$pij, out$Transect, qD)<br />
<br />
qDj <- NULL<br />
<br />
for(i in 1:nrow(wj)){<br />
qDj <- c(qDj, out[[i]])<br />
}<br />
<br />
gamma <- qD(pi, q)<br />
alpha <- qDa(qDj, wj$wj, q)<br />
dim(qDj) <- c(length(q), length(qDj)/length(q))<br />
q[q == 999] <- "∞"<br />
dimnames(qDj) <- list(q, levels(as.factor(pij$Transect)))<br />
<br />
return(list(gamma = gamma, alpha = alpha, tr.gammas = t(qDj)))<br />
}<br />
<br />
########## diversity.table makes a data table out of the results.<br />
<br />
diversity.table <- function(amount = rep(1,length(species)), species = 1:length(amount), transect = 1, q = q.wiki){<br />
<br />
temp <- diversity(amount, species, transect, q)<br />
gamma <- temp[["gamma"]]<br />
alpha <- temp[["alpha"]]<br />
beta. <- gamma / alpha<br />
beta.A <- gamma - alpha<br />
beta.W <- gamma / alpha - 1<br />
beta.P <- 1 - alpha / gamma<br />
qt <- gsub("999", "∞", q)<br />
<br />
outlabel <- c(<br />
paste("Gamma diversity with q=", qt, sep=""),<br />
paste("Alpha diversity with q=", qt, sep=""),<br />
paste("Beta diversity (strict) with q=", qt, sep=""),<br />
paste("Beta diversity (absolute turnover) with q=", qt, sep=""),<br />
paste("Beta diversity (Whittaker's turnover) with q=", qt, sep=""),<br />
paste("Beta diversity (proportional turnover) with q=", qt, sep=""))<br />
<br />
outsymbol <- c(<br />
paste(qt, "D", sep=""),<br />
paste(qt, "Da", sep=""),<br />
paste(qt, "Beta.", sep=""),<br />
paste(qt, "Beta.A", sep=""),<br />
paste(qt, "Beta.W", sep=""),<br />
paste(qt, "Beta.P", sep=""))<br />
<br />
out <- data.frame(Name = c(outlabel, "Richness", "Shannon index", <br />
"Simpson index", "Inverse Simpson index", "Gini-Simpson index", "Berger-Parker index"), <br />
Symbol = c(outsymbol, "S", "H' or log(1D)", "λ or 1/(2D)", "1/λ or 2D", <br />
"1-λ or 1-1/(2D)", "1/(∞D)"),<br />
Value = c(gamma, alpha, beta., beta.A, beta.W, beta.P, length(pi), log(qD(pi,1)), <br />
1/qD(pi,2), qD(pi,2), 1-1/qD(pi,2), 1/qD(pi,999)))<br />
return(out)<br />
}<br />
<br />
cat("Functions loaded.\n")<br />
<br />
</rcode><br />
<br />
The function ''diversity'' produces a list where the first, second, and third element are the gamma, the alpha, and transect-specific gamma diversities, respectively.<br />
<br />
Function ''diversity.table'' produces a data.frame of several diversity indices.<br />
<br />
===Examples===<br />
<br />
'''Example 1 to use function<br />
<br />
<rcode include="page:Diversity_index|name:answer|page:OpasnetBaseUtils|name:generic" variables="<br />
name:data|description:Give your data in R format or leave empty for example data|<br />
name:individual|description:Is your data individual data or group abundancies?|type:selection|options:TRUE;Individual;FALSE;Group|default:TRUE<br />
"><br />
library(xtable)<br />
q.wiki = 0,1,2,3,4<br />
if(is.null(data)) {data <- c(1,4,6,9,3,4,5,6,5,4,3,3,5,5,7,5,5,4,3,4,5,6,8,9,5,4,5,4,3,3,4,9,6,6,4,5,3,2,1,1,2,3,4,3,2,3,4,5,6,7,7)}<br />
data<br />
diversity(data)<br />
if(individual==TRUE) out <- diversity(species = data, q = q.wiki) else out <- diversity(amount = data, q = q.wiki)<br />
print(xtable(out), type = 'html')<br />
</rcode><br />
<br />
'''Example 2<br />
<br />
<rcode include="page:OpasnetBaseUtils|name:generic|page:Diversity_index|name:answer" variables="<br />
name:wikidata|description:Select your data|type:selection|options:'5/54/Tigre-data.csv';Tigre|default:'5/54/Tigre-data.csv'|<br />
name:q.wiki|description:Which q values you want to calculate.|type:checkbox|options:0;0;0.5;0.5;1;1;2;2;3;3;6;6;999;∞|default:0;1;2;999<br />
"><br />
library(OpasnetBaseUtils)<br />
library(xtable)<br />
data <- opasnet.csv(wikidata, wiki = "opasnet_en", sep = ",")<br />
data <- data[data$Species != 1, ]<br />
<br />
species <- data$Species<br />
amount <- data$Individuals<br />
transect <- data$Transect<br />
<br />
diversity(amount, species, transect, q.wiki)<br />
print(xtable(diversity(amount, species, transect, q.wiki)[[3]]), type = 'html')<br />
print(xtable(diversity.table(amount, species, transect, q.wiki)), type = 'html')<br />
<br />
</rcode><br />
<br />
The data should be given in R format as a list of values in parenthesis, beginning with c:<br />
c(3,5,3,5,2,1,3,3,4,2) or equivalently c(0.1,0.2,0.4,0.1,0.2)<br />
where the values are either <br />
* identifiers of the species 1,2,3... in which the individuals belong (one entry per individual), or<br />
* abundancies of species, i.e. proportions of individuals belonging to each species among the whole population (one entry per species).<br />
<br />
==Rationale==<br />
<br />
[[:en:Diversity index|Diversity indices]] are thoroughly described in Wikipedia.<br />
<br />
==See also==<br />
<br />
==References==<br />
<br />
<references/><br />
<br />
==Related files==<br />
<br />
{{mfiles}}</div>Kallehttp://en.opasnet.org/en-opwiki/index.php?title=File:Nadat.csv&diff=23791File:Nadat.csv2012-02-28T16:38:20Z<p>Kalle: </p>
<hr />
<div></div>Kalle