Актуальность исследования

Анализ морфометрических параметров яичной скорлупы представляет значительный интерес в контексте экологических исследований, мониторинга состояния популяций птиц и оценки влияния антропогенных факторов. Толщина скорлупы традиционно рассматривается как один из ключевых показателей, отражающих физиологическое состояние птиц, качество питания и воздействие стрессовых факторов окружающей среды.

В последние десятилетия особое внимание уделяется разработке и применению интегральных индексов, таких как индекс Ратклиффа, который позволяет учитывать не только абсолютные значения толщины, но и характер ее распределения по поверхности яйца. Сочетание традиционных морфометрических подходов с современными статистическими методами открывает новые возможности для более точной оценки состояния репродуктивной системы птиц.

Цель и задачи исследования

Цель - установить наличие и характер взаимосвязи между средней толщиной скорлупы и индексом Ратклиффа, а также определить оптимальное количество измерений, необходимое для получения статистически надежных результатов.

Задачи:

  1. Провести корреляционный анализ между средней толщиной скорлупы и значением индекса Ратклиффа

  2. Оценить достаточность текущего объема измерений (8-20 на образец)

  3. Определить минимально необходимое количество измерений для достижения стабильных результатов

Анализ распределения исследуемых параметров

Общая корреляция между толщиной скорлупы и индексом Ратклиффа

Индекс Ратклиффа представляет собой нормализованный показатель, учитывающий не только среднюю толщину скорлупы, но и характер ее распределения. Теоретически предполагается существование взаимосвязи между этими параметрами, однако характер и сила этой связи могут варьировать в зависимости от видовой принадлежности птиц, условий среды и других факторов.

Корреляционный анализ позволяет количественно оценить степень взаимосвязи между двумя переменными и проверить статистическую значимость обнаруженных закономерностей.

# Вычисляем коэффициент корреляции Пирсона
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))
  )
)

Интерпретация общей корреляции

По результатам корреляционного анализа между средней толщиной яичной скорлупы и индексом Ратклиффа была выявлена статистически значимая взаимосвязь. Полученное значение коэффициента корреляции Пирсона (0.9086) свидетельствует о наличии линейной зависимости, что подтверждает предположение о связи индекса Ратклиффа с морфометрическими характеристиками скорлупы.

Наличие статистически значимой корреляции указывает на то, что индекс Ратклиффа может рассматриваться как информативный показатель, отражающий особенности распределения толщины скорлупы и связанный с ее средним значением.

Визуализация взаимосвязи параметров

ggplot(data_corr, aes(
  x = `Ср. арифм толщина`,
  y = `Индекс Ратклиффа`,
  color = factor(Зона,
                 levels = c(1, 2),
                 labels = c("Импактная зона", "Фоновая зона"))
)) +
  geom_point(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 %>%
  mutate(
    Зона_тип = ifelse(Зона == 1, "Импактная зона", "Фоновая зона")
  ) %>%
  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, "red", "blue"),
      size = 3,
      alpha = 0.7
    ) +
    geom_smooth(
      method = "lm",
      se = TRUE,
      color = ifelse(zone == 1, "darkred", "darkblue")
    ) +
    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)

Интерпретация графического сравнения по зонам

Графическое сравнение взаимосвязи между средней толщиной яичной скорлупы и индексом Ратклиффа в импактной и фоновой зонах выявило различия в силе и характере корреляции. В импактной зоне наблюдается очень высокая положительная корреляция (r = 0.948, p < 0.001), что указывает на тесную линейную зависимость между рассматриваемыми параметрами.

В фоновой зоне также выявлена статистически значимая положительная корреляция (r = 0.786, p < 0.001), однако она характеризуется меньшей силой и большим разбросом значений. Это может свидетельствовать о большей вариабельности морфометрических характеристик скорлупы в условиях отсутствия выраженного антропогенного воздействия.

Таким образом, более высокая степень согласованности параметров в импактной зоне может отражать влияние стрессовых факторов среды, приводящих к унификации морфометрических характеристик яичной скорлупы, тогда как в фоновой зоне сохраняется более широкий диапазон естественной изменчивости.

Определение оптимального количества измерений толщины скорлупы

data_scr <- read_excel("Фото скорлупы.xlsx") %>%
  rename(
    zone = Зона,
    sample = `Номер образца`,
    thickness = Толщина
  ) %>%
  filter(!is.na(thickness))

data_scr$zone <- factor(
  data_scr$zone,
  levels = c(1, 2),
  labels = c("Импактная зона", "Фоновая зона")
)

Функция бутстрэп-оценки ширины ДИ для заданного n

bootstrap_ci_width <- function(x, n, B = 1000) {
  boot_means <- replicate(
    B,
    mean(sample(x, size = n, replace = TRUE))
  )
  quantile(boot_means, 0.975) - quantile(boot_means, 0.025)
}

Бутстрэп по всем образцам и всем n

bootstrap_results <- data_scr %>%
  group_by(zone, sample) %>%
  summarise(
    total_n = n(),
    results = list(
      tibble(
        n = 2:total_n,
        ci_width = map_dbl(2:total_n,
                           ~ bootstrap_ci_width(thickness, .x))
      )
    ),
    .groups = "drop"
  ) %>%
  unnest(results)

Определение минимального достаточного n

plateau_n <- bootstrap_results %>%
  group_by(zone, sample) %>%
  arrange(n) %>%
  mutate(
    rel_change = abs(ci_width - lag(ci_width)) / lag(ci_width)
  ) %>%
  filter(n > 5, rel_change < 0.05) %>%
  slice(1) %>%
  summarise(
    min_n = first(n),
    .groups = "drop"
  )

Итог по зонам

plateau_n %>%
  group_by(zone) %>%
  summarise(
    mean_required_n = mean(min_n, na.rm = TRUE),
    median_required_n = median(min_n, na.rm = TRUE),
    max_required_n = max(min_n, na.rm = TRUE),
    .groups = "drop"
  )
## # A tibble: 2 × 4
##   zone           mean_required_n median_required_n max_required_n
##   <fct>                    <dbl>             <dbl>          <int>
## 1 Импактная зона            7.75                 8             10
## 2 Фоновая зона              8.5                  9             11
#Примерно необходимое число измерений
recommended_n <- plateau_n %>%
  group_by(zone) %>%
  summarise(
    recommended_n = median(min_n, na.rm = TRUE),
    .groups = "drop"
  )
ggplot(bootstrap_results, aes(n, ci_width, group = sample)) +
  geom_line(alpha = 0.3, color = "grey50") +
  geom_vline(
    data = recommended_n,
    aes(xintercept = recommended_n),
    color = "red",
    linewidth = 1
  ) +
  facet_wrap(~ zone, scales = "free_y") +
  labs(
    x = "Количество измерений",
    y = "Ширина 95% бутстрэп-доверительного интервала средней толщины"
  )

Вертикальной линией показано медианное минимально достаточное число измерений, определённое по критерию стабилизации ширины бутстрэп-доверительного интервала. Значения левее линии соответствуют высокой неопределённости оценки, тогда как правее линии дополнительное увеличение числа измерений приводит лишь к незначительному повышению точности.