Data and code from: Candling analysis of egg development in an endangered species crested ibis (Nipponia nippon)
Data files
Jun 05, 2026 version files 48.52 KB
-
fertile_embryo_46.csv
2.85 KB
-
fertile_embryo_o6.csv
21.28 KB
-
README.md
9.89 KB
-
stage_validation.csv
3.09 KB
-
Validation_of_features.R
11.41 KB
Abstract
Identifying key factors influencing the survival of animals, particularly rare and endangered species is crucial to biodiversity conservation. In birds, hatching failure is pronounced in endangered species. Accurate assessment of egg development and the ability to distinguish non-viable eggs are essential prerequisites for evaluating the impact of factors that lead to hatching failure and applying appropriate conservation practices. The crested ibis (Nipponia nippon), a flagship endangered species, has a long history of captive breeding, which has contributed to population recovery. However, little is known about the specific process and characteristics of its egg development. In this study, we provided the first comprehensive description of normal egg development in the crested ibis, including both the changes observed in unfertilized eggs during incubation and embryonic development via candling (n = 98 eggs; total = 1,422 candling images; mean ± SE = 14.52 ± 1.38 images per egg), and offered a practical reference for assessing fertilization status and embryo viability. In addition, we estimated the timing of embryo mortality and found that most deaths occurred during mid-incubation (Day 7-15) (n = 12, 60.0 %) and shortly before hatching (Day 23-29) (n = 7, 35.0 %), highlighting these critical periods that require particular attention. This species-specific documentation of egg development provides a valuable reference for accurately assessing embryonic progress, evaluating environmental effects on survival, and guiding adaptive management, benefiting both captive breeding programs and field conservation efforts.
Dataset DOI: 10.5061/dryad.fbg79cp9z
Description of the data and file structure
This dataset contains raw data used to evaluate (1) the accuracy and reliability of embryonic developmental stage classification and (2) the identification of non-viable eggs using observational features. The data include observer-based classifications, ground-truth labels, and diagnostic features recorded. The observations are based on candling images taken of eggs from the captive crested ibis population during the 2025 breeding season at the Crested Ibis Breeding Center, Dongzhai National Nature Reserve, Henan Province, China
Files and variables
File: stage_validation.csv
Description: This file contains data used to validate the classification of embryonic developmental stages
Variables
- date: Date of candling
- egg_id: Identity of egg
- day: Incubation process (day)
- old_name: The original filename of image, including information of candling date and incubation day
- image: New filename that generated to conceal candling date and incubation day
- true_stage: True developmental stage (ordinal variable)
- observer_1: Stage assigned by observer 1
- observer_2: Stage assigned by observer 2
- observer_3: Stage assigned by observer 3
File: fertile_embryo_46.csv
Description: This dataset contains data used to validate the identification of fertilization status during Day 4-6 of incubation, along with associated diagnostic features
Variables
- image: The filename of image
- egg: Identity of egg
- type: The category that based on the final incubation outcomes and the developmental conditions (i.e., infertile, dead embryo, successfully hatched)
- day: Incubation process (day)
- fertility_true: True fertility status (0 = infertile, 1 = fertile)
- fer_obs1: Fertility classification by observer 1
- fer_obs2: Fertility classification by observer 2
- fer_obs3: Fertility classification by observer 3
- s_broad_shadow1: A broad shadow when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge1: Distinct shadow edge when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- b_broad_shadow1: A broad shadow when candled from the blunt end. Observation by observer 1 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge1: Distinct shadow edge when candled from the blunt end. Observation by observer 1 (0 = absence, 1 = presence)
- s_broad_shadow2: A broad shadow when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge2: Distinct shadow edge when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- b_broad_shadow2: A broad shadow when candled from the blunt end. Observation by observer 2 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge2: Distinct shadow edge when candled from the blunt end. Observation by observer 2 (0 = absence, 1 = presence)
- s_broad_shadow3: A broad shadow when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge3: Distinct shadow edge when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- b_broad_shadow3: A broad shadow when candled from the blunt end. Observation by observer 3 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge3: Distinct shadow edge when candled from the blunt end. Observation by observer 3 (0 = absence, 1 = presence)
File: fertile_embryo_o6.csv
Description: This dataset contains data used to validate the identification of fertilization status and embryo viability during Day 6-24 of incubation, along with associated diagnostic features
Variables
- image: The filename of image
- egg: Identity of egg
- type: The category that based on the final incubation outcomes and the developmental conditions (i.e., infertile, dead embryo, successfully hatched)
- day: Incubation process (day)
- fertility_true: True fertility status (0 = infertile, 1 = fertile)
- fer_obs1: Fertility classification by observer 1
- fer_obs2: Fertility classification by observer 2
- fer_obs3: Fertility classification by observer 3
- die_day: Time of death for dead embryo
- embryo_true: True embryo viability (0 = dead, 1 = alive; NA for unfertilized eggs)
- em_obs1: Embryo viability classification by observer 1
- em_obs2: Embryo viability classification by observer 2
- em_obs3: Embryo viability classification by observer 3
- s_broad_shadow1: A broad shadow when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge1: Distinct shadow edge when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- s_shadow_coverage_gt501: Shadow coverage exceeding 50% when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- s_uniform_dark_shadow1: A uniform dark shadow when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- s_vascular_structures1: Vascular structures when candled from the sharp end. Observation by observer 1 (0 = absence, 1 = presence)
- b_broad_shadow1: A broad shadow when candled from the blunt end. Observation by observer 1 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge1: Distinct shadow edge when candled from the blunt end. Observation by observer 1 (0 = absence, 1 = presence)
- b_vascular_structures1: Vascular structures when candled from the blunt end. Observation by observer 1 (0 = absence, 1 = presence)
- b_aircell_with_distinct_edge1: An air cell with distinct edge. Observation by observer 1 (0 = absence, 1 = presence)
- s_broad_shadow2: A broad shadow when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge2: Distinct shadow edge when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- s_shadow_coverage_gt502: Shadow coverage exceeding 50% when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- s_uniform_dark_shadow2: A uniform dark shadow when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- s_vascular_structures2: Vascular structures when candled from the sharp end. Observation by observer 2 (0 = absence, 1 = presence)
- b_broad_shadow2: A broad shadow when candled from the blunt end. Observation by observer 2 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge2: Distinct shadow edge when candled from the blunt end. Observation by observer 2 (0 = absence, 1 = presence)
- b_vascular_structures2: Vascular structures when candled from the blunt end. Observation by observer 2 (0 = absence, 1 = presence)
- b_aircell_with_distinct_edge2: An air cell with distinct edge. Observation by observer 2 (0 = absence, 1 = presence)
- s_broad_shadow3: A broad shadow when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- s_shadow_with_distinct_edge3: Distinct shadow edge when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- s_shadow_coverage_gt503: Shadow coverage exceeding 50% when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- s_uniform_dark_shadow3: A uniform dark shadow when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- s_vascular_structures3: Vascular structures when candled from the sharp end. Observation by observer 3 (0 = absence, 1 = presence)
- b_broad_shadow3: A broad shadow when candled from the blunt end. Observation by observer 3 (0 = absence, 1 = presence)
- b_shadow_with_distinct_edge3: Distinct shadow edge when candled from the blunt end. Observation by observer 3 (0 = absence, 1 = presence)
- b_vascular_structures3: Vascular structures when candled from the blunt end. Observation by observer 3 (0 = absence, 1 = presence)
- b_aircell_with_distinct_edge3: An air cell with distinct edge. Observation by observer 3 (0 = absence, 1 = presence)
File: Validation_of_features.R
Description: The provided R script performs the following analyses:
1. Classification of Developmental Stage
- Calculates classification accuracy per observer and overall mean accuracy
- Computes mean absolute error between observed and true stages
- Assesses agreement using:
- Weighted Cohen’s kappa (observer vs. true stage)
- Krippendorff’s α (multi-observer agreement)
- Pairwise weighted Cohen’s kappa between observers
2. Identification of Non-viable Eggs
- Computes classification accuracy for fertility and embryo viability
- Summarizes mean accuracy across observers
- Calculates:
- Sensitivity
- Specificity
- Precision
- Computes confusion matrix components (TP, TN, FP, FN)
- Summarizes performance across observers
- Fleiss’ kappa for multi-observer agreement
- Pairwise Cohen’s kappa between observers
3. Validation of diagnostic features
- Uses generalized linear mixed models (GLMM; binomial family)
- Models relationships between diagnostic features and:
- Fertility status
- Embryo viability
- Includes observer as a random effect
Notes
- Missing values ("NA") indicate unavailable observations.
- For embryo viability analyses, only records with non-missing "embryo_true" were included.
- Some analyses require at least two or three observers per egg (e.g., Fleiss’ kappa).
Code/software
All analyses were conducted in R 4.5.1 using the following packages: irr, tidyr, car, dplyr, stringr, and lme4
