Скрипт на R для работы - Часть I

# ввожу данные из файла
territoria <- read.csv(file = (description = "i:/10pl.csv"),
                       sep = ";", h=F, dec = ",")
territoria[is.na(territoria == "NA")] <- 0

# считываю данные по первым двум точкам в векторы
pp_1 <- territoria[, 1]
pp_2 <- territoria[, 2]

# задаю счётные переменные
a <- 0 # число видов, общих для двух списков
b <- 0 # число видов, присутствующих только во втором списке
c <- 0 # число видов, присутствующих только в первом списке
d <- 0 # число видов, отсутствующих в обоих списках, но присутствующих в системе

v_min <- 0 # сумма минимальных обилий из каждой пары
v_max <- 0 # сумма максимальных обилий из каждой пары

mn <- 0 # сумма произведений обилий

sq_1 <- 0 # сумма квадратов обилий на первой площадке
sq_2 <- 0 # сумма квадратов обилий на второй площадке

# выполняю подсчёт основных значений
for(i in 1:length(pp_1)) {

  # считаю числа видов
  ifelse(pp_1[i] != 0 & pp_2[i] != 0, a <- a + 1, a <- a)
  ifelse(pp_1[i] != 0 & pp_2[i] == 0, b <- b + 1, b <- b)
  ifelse(pp_1[i] == 0 & pp_2[i] != 0, c <- c + 1, c <- c)
  ifelse(pp_1[i] == 0 & pp_2[i] == 0, d <- d + 1, d <- d)
 
  # считаю суммарные обилия
  v_min <- v_min + min(pp_1[i], pp_2[i])
  v_max <- v_max + max(pp_1[i], pp_2[i])
 
  # считаю сумму произведений обилий
  mn <- mn + pp_1[i] * pp_2[i]
 
  # считаю сумму квадратов обилий
  sq_1 <- sq_1 + pp_1[i]^2
  sq_2 <- sq_2 + pp_2[i]^2
}

# подсчитываю число видов в каждой выборке
S_1 <- length(pp_1) - length(which(pp_1 == 0))
S_2 <- length(pp_2) - length(which(pp_2 == 0))

# подсчитываю суммарное обилие по каждой выборке
v_S_1 <- sum(pp_1)
v_S_2 <- sum(pp_2)

# считаю индексы
I_BB <- a / max(S_1, S_2) # индекс Браун-Бланке
I_SzS <- a / min(S_1, S_2) # индекс Шимкевича и Симпсона
I_S <- (2 * a) / ((a + b) + (a + c)) # индекс Сёренсена
I_K1 <- (a / 2) * (1 / (a + b) + 1 / (a + c)) # первый индекс Кульчинского
I_OB <- a / sqrt((a + b) * (a + c)) # индекс Отиаи и Баркмана
I_J <- a / (a + b + c) # индекс Жаккара
I_SS <- a / (2 * (a + b + c) - a) # индекс Сокала и Снита
I_K2 <- a / (b + c) # второй индекс Кульчинского
I_SM <- (a + d) / (a + b + c + d) # индекс Сокала и Майченера
I_BUB <- (sqrt(a * d) + a) / (sqrt(a * d) + a + b + c) # индекс Барони-Урбани и Бюссера
K_Cz <- 2 * v_min / (v_S_1 + v_S_2) # мера Чекановского
K_R <- v_min / v_max # мера Ружички
K_MH <- (2 * mn) / ((sq_1 / (S_1^2) + sq_2 / (S_2^2)) * S_1 * S_2) # мера Мориситы и Хорна
Последнее изменение: Четверг, 18 ноября 2021, 13:37