R语言计算玉米雌雄花期曲线下面积 如何构造随时间变化的种群向量c
玉米雌雄花花期曲线下面积(AUC)计算解决方案
你需要的变量c是随时间变化的累计开花株数占总株数的比例,该值需要分别针对雄花、雌花的花期数据统计生成,不可共用同一组值。
1. 数据预处理(计算累计开花比例)
你提供的数据集每行对应单株的开花日期,需要先按日期分组统计开花株数,再计算累计占比:
library(dplyr) library(tidyr) # 处理雄花花期数据 male_data <- XAUC %>% count(Date.floraison.mâle.graph, name = "daily_count") %>% arrange(Date.floraison.mâle.graph) %>% mutate( cum_count = cumsum(daily_count), cum_prop = cum_count / sum(daily_count) # 雄花对应的累计比例,即雄花计算的c值 ) a <- male_data$Date.floraison.mâle.graph c_male <- male_data$cum_prop # 处理雌花花期数据 female_data <- XAUC %>% count(Date.floraison.femelle.graph, name = "daily_count") %>% arrange(Date.floraison.femelle.graph) %>% mutate( cum_count = cumsum(daily_count), cum_prop = cum_count / sum(daily_count) # 雌花对应的累计比例,即雌花计算的c值 ) b <- female_data$Date.floraison.femelle.graph c_female <- female_data$cum_prop
2. 计算AUC
调用DescTools的AUC函数时,分别传入各自对应的日期和累计比例:
library(DescTools) AUCmale <- AUC(x = a, y = c_male, method = "trapezoid") AUCfemale <- AUC(x = b, y = c_female, method = "trapezoid") Airdiff <- AUCmale - AUCfemale
优化方案(可选):统一时间轴提升精度
如果要避免雌雄花花期时间范围不一致导致的计算偏差,可以生成覆盖所有花期的统一时间轴,补全累计比例后再计算:
# 生成覆盖所有雌雄花日期的连续时间轴 full_date <- seq(min(c(a, b)), max(c(a, b)), by = 1) # 补全雄花累计比例 male_full <- data.frame(date = full_date) %>% left_join(male_data %>% select(Date.floraison.mâle.graph, cum_prop), by = c("date" = "Date.floraison.mâle.graph")) %>% fill(cum_prop, .direction = "down") %>% mutate(cum_prop = replace(cum_prop, is.na(cum_prop), 0)) # 补全雌花累计比例 female_full <- data.frame(date = full_date) %>% left_join(female_data %>% select(Date.floraison.femelle.graph, cum_prop), by = c("date" = "Date.floraison.femelle.graph")) %>% fill(cum_prop, .direction = "down") %>% mutate(cum_prop = replace(cum_prop, is.na(cum_prop), 0)) # 用统一时间轴计算AUC AUCmale_full <- AUC(x = full_date, y = male_full$cum_prop, method = "trapezoid") AUCfemale_full <- AUC(x = full_date, y = female_full$cum_prop, method = "trapezoid") Airdiff_full <- AUCmale_full - AUCfemale_full
内容的提问来源于stack exchange,提问作者Jean Mergnat
相关产品推荐
相关产品推荐

