Анализ морфометрических параметров яичной скорлупы представляет значительный интерес в контексте экологических исследований, мониторинга состояния популяций птиц и оценки влияния антропогенных факторов. Толщина скорлупы традиционно рассматривается как один из ключевых показателей, отражающих физиологическое состояние птиц, качество питания и воздействие стрессовых факторов окружающей среды.
В последние десятилетия особое внимание уделяется разработке и применению интегральных индексов, таких как индекс Ратклиффа, который позволяет учитывать не только абсолютные значения толщины, но и характер ее распределения по поверхности яйца. Сочетание традиционных морфометрических подходов с современными статистическими методами открывает новые возможности для более точной оценки состояния репродуктивной системы птиц.
Цель - установить наличие и характер взаимосвязи между средней толщиной скорлупы и индексом Ратклиффа, а также определить оптимальное количество измерений, необходимое для получения статистически надежных результатов.
Задачи: 1) Провести корреляционный анализ между средней толщиной скорлупы и значением индекса Ратклиффа
Оценить достаточность текущего объема измерений (8-20 на образец)
Определить минимально необходимое количество измерений для достижения стабильных результатов
##Анализ распределения исследуемых параметров
##Общая корреляция между толщиной скорлупы и индексом Ратклиффа Индекс Ратклиффа представляет собой нормализованный показатель, учитывающий не только среднюю толщину скорлупы, но и характер ее распределения. Теоретически предполагается существование взаимосвязи между этими параметрами, однако характер и сила этой связи могут варьировать в зависимости от видовой принадлежности птиц, условий среды и других факторов.
Корреляционный анализ позволяет количественно оценить степень взаимосвязи между двумя переменными и проверить статистическую значимость обнаруженных закономерностей.
# Вычисляем коэффициент корреляции Пирсона
cor_test <- cor.test(data_corr$`Ср. арифм толщина`,
data_corr$`Индекс Ратклиффа`,
method = "pearson")
# Создаем таблицу с результатами
cor_results <- data.frame(
Показатель = c("Коэффициент корреляции (r)", "95% доверительный интервал",
"t-статистика", "Степени свободы", "p-value"),
Значение = c(
round(cor_test$estimate, 4),
paste(round(cor_test$conf.int[1], 4), "-", round(cor_test$conf.int[2], 4)),
round(cor_test$statistic, 4),
cor_test$parameter,
ifelse(cor_test$p.value < 0.001, "< 0.001", round(cor_test$p.value, 4))
)
)##Визуализация взаимосвязи параметров
ggplot(data_corr, aes(x = `Ср. арифм толщина`, y = `Индекс Ратклиффа`)) +
geom_point(aes(color = factor(Зона)), size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE, color = "darkred") +
labs(title = "Корреляция между толщиной скорлупы и индексом Ратклиффа",
x = "Средняя толщина скорлупы (мкм)",
y = "Индекс Ратклиффа",
color = "Зона") +
theme_minimal() +
theme(legend.position = "bottom") +
annotate("text",
x = max(data_corr$`Ср. арифм толщина`) * 0.7,
y = max(data_corr$`Индекс Ратклиффа`) * 0.9,
label = paste("r =", round(cor_test$estimate, 3),
"\np", ifelse(cor_test$p.value < 0.001, "< 0.001",
paste("=", round(cor_test$p.value, 4)))),
size = 5)# Корреляция отдельно для каждой зоны
cor_by_zone <- data_corr %>%
group_by(Зона) %>%
summarise(
Корреляция = cor(`Ср. арифм толщина`, `Индекс Ратклиффа`, method = "pearson"),
n = n(),
p_value = cor.test(`Ср. арифм толщина`, `Индекс Ратклиффа`)$p.value
) %>%
mutate(
p_value_format = ifelse(p_value < 0.001, "< 0.001", round(p_value, 4)),
Значимость = ifelse(p_value < 0.05, "Да", "Нет")
)##Графическое сравнение корреляций по зонам
# Создаем отдельные графики для каждой зоны
zone_plots <- list()
for (zone in c(1, 2)) {
zone_data <- data_corr %>% filter(Зона == zone)
zone_name <- ifelse(zone == 1, "Фоновая зона", "Импактная зона")
zone_cor <- cor.test(zone_data$`Ср. арифм толщина`,
zone_data$`Индекс Ратклиффа`)
zone_plots[[zone]] <- ggplot(zone_data, aes(x = `Ср. арифм толщина`, y = `Индекс Ратклиффа`)) +
geom_point(color = ifelse(zone == 1, "blue", "red"), size = 3, alpha = 0.7) +
geom_smooth(method = "lm", se = TRUE,
color = ifelse(zone == 1, "darkblue", "darkred")) +
labs(title = zone_name,
subtitle = paste("r =", round(zone_cor$estimate, 3),
", p =", ifelse(zone_cor$p.value < 0.001, "< 0.001",
round(zone_cor$p.value, 4))),
x = "Средняя толщина (мкм)",
y = "Индекс Ратклиффа") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
}
# Отображаем графики рядом
gridExtra::grid.arrange(zone_plots[[1]], zone_plots[[2]], ncol = 2)