Impute missing trait values using MICE (Multiple Imputation by Chained Equations). Returns a completed data frame averaged over m imputations.
mice_impute <- function(df, m = 5, method = "pmm", seed = 42) {
if (!requireNamespace("mice", quietly = TRUE)) install.packages("mice")
library(mice)
sp_col <- if ("species" %in% names(df)) "species" else rownames(df)
num_cols <- names(df)[sapply(df, is.numeric)]
imp <- mice(df[, num_cols], m = m, method = method,
seed = seed, printFlag = FALSE)
# Average over all imputations
completed <- Reduce("+", lapply(1:m, function(i) complete(imp, i))) / m
df[, num_cols] <- completed
df
}
# Example
# mice_impute(trait_matrix, m = 10)