function(x, t, a, g) { x <- as.matrix(x) sum.total <- as.matrix(colSums(x)) So <- colSums(sum.total > 0) freq.species <- table(colSums(x)) m.s <- data.frame(occurrences = as.numeric(names(freq.species)), frequency = as.vector( freq.species)) if(m.s[1, 1] == 0) stop("There is(are) species in the data with no occurrence in the sampling units. Remove column(s) and start again." ) if(m.s[1, 1] > 1) print("warning: no species with one occurrence. Computations were done using the lowest value of occurrence as n1, see formula" ) constant <<- m.s[1, 2] library(nls) m.s.nls <- nls(frequency ~ (constant * (gamma(occurrences + alp)) * I(gam^(occurrences - 1)))/(gamma( occurrences+1) * (gamma(1 + alp))), data = m.s, start = list(alp = a, gam = g)) matrix.param <- c(So, constant, summary(m.s.nls)$param[,1]) nb0 <- ( - constant * (((1 + matrix.param[4] * t)^( - matrix.param[3])) - 1))/(matrix.param[3] * matrix.param[4]) nb <- as.vector(nb0 + So) ls0 <- (constant/matrix.param[4]) * log(1 + matrix.param[4] * t) ls <- as.vector(ls0 + So) names(matrix.param) <- c("Spp.obs", "Spp.with.one.occur.", "alpha", "gamma") result <- list(m.s, matrix.param, nb, ls) result.names <- c("obs.ditribution", "param", "nb", "ls") names(result) <- result.names result }