Скрипт на 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="Третья мера Ратледжа между точками трансекты")