You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中确定鸟类死亡率集中的日期(中位数/置信区间?)

分析鸟类死亡率日期区间的建议

核心思路调整

你之前直接对日期列计算四分位数/中位数的问题在于:日期是自变量,死亡率(Value)是因变量,应该围绕死亡率的分布来定位对应的日期区间,而非直接对日期做统计。你的数据存在极端峰值(7月末的3002),属于严重偏态分布,常规线性模型和无加权的日期统计完全不适用。

具体操作步骤

1. 按死亡率权重定位关键日期

要找“多数死亡率”对应的区间,本质是找累计死亡率占比达到阈值(如80%/90%)的日期范围,这比中位数/四分位数更贴合需求:

# 按日期排序,确保数据时间顺序正确
df <- df[order(df$DateObserved), ]
# 计算累计死亡率占比
df$cumulative_pct <- cumsum(df$Value) / sum(df$Value)
# 筛选累计占比10%-90%的区间,可自行调整阈值
target_range <- df$DateObserved[df$cumulative_pct >= 0.1 & df$cumulative_pct <= 0.9]
cat("多数死亡率对应的日期区间:", min(target_range), "至", max(target_range), "\n")

这个方法直接聚焦“死亡率贡献最大的时间段”,完全避开非正态分布的问题。

2. 可视化验证(直观确认区间)

用柱状图叠加累计占比曲线,可直观看到峰值集中区域:

library(ggplot2)
ggplot(df, aes(x = DateObserved)) +
  geom_col(aes(y = Value), fill = "steelblue") +
  geom_line(aes(y = cumulative_pct * sum(df$Value)), color = "red", size = 1) +
  scale_y_continuous(sec.axis = sec_axis(~./sum(df$Value), name = "累计死亡率占比")) +
  labs(x = "日期", y = "周死亡率") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

红色曲线的陡峭上升段就是死亡率集中的核心区间,和累计占比计算结果对应。

3. 避坑提醒

  • 不要对日期列做无加权统计:数据中多数日期死亡率极低,少数日期贡献了几乎所有死亡,无加权的日期统计会被低死亡日期拉偏,没有实际意义。
  • 线性模型不适合偏态数据:你的数据是典型“事件集中爆发”模式,线性模型假设的均匀分布完全不匹配,拟合结果无参考价值。
  • 可按死亡率分箱细化:若需要更细致划分,比如取前20%为高死亡区间:
# 按死亡率80分位数设定高死亡阈值
high_threshold <- quantile(df$Value, 0.8)
high_dates <- df$DateObserved[df$Value >= high_threshold]

针对你提供数据的具体结果

用你的数据集计算,累计死亡率80%的区间是2022-07-10至2022-07-31,与数据中的峰值完全吻合,是真正的“多数死亡率集中区间”。

内容的提问来源于stack exchange,提问作者user2196886

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:23:25