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

# ввожу данные из файла
transecta <- read.csv(file = (description = "e:/transecta.csv"),
                      sep = ";", h=F, dec = ",")

transecta[is.na(transecta=='NA')] <- 0


# расчёт мер Коуди
# задаю пустой вектор
b_C_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётные переменные
  g <- 0
  l <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] == 0 & pp_2[j] != 0, g <- g + 1, g <- g)
    ifelse(pp_1[j] != 0 & pp_2[j] == 0, l <- l + 1, l <- l)
  }
 
  # считаю итоговое значение
  b_C_v[i] <- (g + l) / 2
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_C_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Мера Коуди между точками трансекты")


# расчёт мер Уилсона и Шмиды
# задаю пустой вектор
b_WS_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётные переменные
  g <- 0
  l <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] == 0 & pp_2[j] != 0, g <- g + 1, g <- g)
    ifelse(pp_1[j] != 0 & pp_2[j] == 0, l <- l + 1, l <- l)
  }
 
  # определяю число видов на каждой точке
  S_1 <- length(pp_1) - length(which(pp_1 == 0))
  S_2 <- length(pp_2) - length(which(pp_2 == 0))
 
  # считаю итоговое значение
  b_WS_v[i] <- (g + l) / (S_1 + S_2)
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_WS_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Мера Уилсона и Шмиды между точками трансекты",
        ylim = c(0, 1))


# расчёт мер Уиттекера
# задаю пустой вектор
b_W_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётную переменную
  S <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] != 0 | pp_2[j] != 0, S <- S + 1, S <- S)
  }
 
  # определяю число видов на каждой точке
  S_1 <- length(pp_1) - length(which(pp_1 == 0))
  S_2 <- length(pp_2) - length(which(pp_2 == 0))
 
  # считаю итоговое значение
  b_W_v[i] <- S / (((S_1 + S_2) / 2) - 1)
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_W_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Мера Уиттекера между точками трансекты")


# расчёт мер Ратледжа (первый вариант)
# задаю пустой вектор
b_R1_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётные переменные
  S <- 0
  r <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] != 0 | pp_2[j] != 0, S <- S + 1, S <- S)
    for(k in 1:length(pp_1)) {
      ifelse(pp_1[j] != 0 & pp_2[k] != 0, r <- r + 1, r <- r)
    }
  }
 
  # считаю итоговое значение
  b_R1_v[i] <- ((S^2) / (2 * r + S)) - 1
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_R1_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Первая мера Ратледжа между точками трансекты")


# расчёт мер Ратледжа (второй вариант)
# задаю пустой вектор
b_R2_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётные переменные
  e_vector <- NULL
  e <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] != 0, e <- e + 1, e <- e)
    ifelse(pp_2[j] != 0, e <- e + 1, e <- e)
    e_vector[j] <- e * log(e)
    e <- 0
  }
 
  # очищаю вектор от неверных значений
  e_vector <- e_vector[!is.na(e_vector)]
 
  # определяю a
  a_1 <- length(pp_1) - length(which(pp_1 == 0))
  a_2 <- length(pp_2) - length(which(pp_2 == 0))
  a <- a_1 * log(a_1) + a_2 * log(a_2)
 
  # считаю итоговое значение
  b_R2_v[i] <- log(a_1 + a_2) - 1 / (a_1 + a_2) * sum(e_vector) - 1 / (a_1 + a_2) * a
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_R2_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Вторая мера Ратледжа между точками трансекты")


# расчёт мер Ратледжа (третий вариант)
# задаю пустой вектор
b_R3_v <- NULL

# задаю нужные столбцы
pp <- c(1:6)

# начинаю расчёт мер
for(i in 1:(length(pp) - 1)) {
 
  # считываю данные двух точек в векторы
  n_1 <- pp[i]
  n_2 <- pp[i + 1]
  pp_1 <- transecta[, n_1]
  pp_2 <- transecta[, n_2]
 
  # задаю счётные переменные
  e_vector <- NULL
  e <- 0
 
  # начинаю цикл
  for(j in 1:length(pp_1)) {
    ifelse(pp_1[j] != 0, e <- e + 1, e <- e)
    ifelse(pp_2[j] != 0, e <- e + 1, e <- e)
    e_vector[j] <- e * log(e)
    e <- 0
  }
 
  # очищаю вектор от неверных значений
  e_vector <- e_vector[!is.na(e_vector)]
 
  # определяю a
  a_1 <- length(pp_1) - length(which(pp_1 == 0))
  a_2 <- length(pp_2) - length(which(pp_2 == 0))
  a <- a_1 * log(a_1) + a_2 * log(a_2)
 
  # считаю итоговое значение
  b_R3_v[i] <- exp(log(a_1 + a_2) -
                     1 / (a_1 + a_2) * sum(e_vector) -
                     1 / (a_1 + a_2) * a) - 1
}

# задаю вектор подписей столбцов диаграммы
x <- c("1-2", "2-3", "3-4", "4-5", "5-6")
# рисую столбчатую диаграмму
barplot(height = b_R3_v, names = x,
        xlab="точки трансекты",
        ylab="значение меры",
        main="Третья мера Ратледжа между точками трансекты")

Последнее изменение: Пятница, 12 ноября 2021, 10:05