不同树种组森林损失年复合增长率(CARG)计算结果偏高咨询
问题原因与解决方案
核心错误原因
- 业务逻辑与计算公式不匹配:你使用的复合年增长率(CAGR)计算的是累计损失占比这个指标本身的增长速度,比如松树的累计损失占比18年从1%涨到19%,涨幅达19倍,算出17.8%的增速是符合CAGR逻辑的,但这个结果完全不是你需要的「森林年死亡率」。
- 指标含义理解偏差:累计损失占比是「已损失森林/初始总森林」,而年死亡率是「当年损失森林/上年剩余森林」,二者的计算逻辑完全不同。
正确计算逻辑
年死亡率的推导基于森林留存比例的复合变化:
- 假设年死亡率为
r,每年剩余的森林是上一年的(1 - r)倍 - 期初(统计开始时)剩余森林比例 =
1 - 起始累计损失占比/100 - 期末(统计结束时)剩余森林比例 =
1 - 期末累计损失占比/100 - 二者满足公式:
期末剩余比例 = 期初剩余比例 * (1 - r) ^ 间隔年数,反推即可得到r
代码实现
# 正确的年死亡率计算函数 annual_mortality <- function(end_pct, start_pct, yrs) { remaining_end <- 1 - end_pct / 100 remaining_start <- 1 - start_pct / 100 r <- 1 - (remaining_end / remaining_start)^(1/yrs) return(r * 100) # 转换为百分比格式输出 } # 代入你的数据计算 library(dplyr) df <- data.frame(group = c('pine', 'beech'), start = c(1,2), end = c(19, 30), years = 18) df %>% mutate(annual_mortality = annual_mortality(end, start, years))
运行后得到的结果:
group start end years annual_mortality 1 pine 1 19 18 1.21 2 beech 2 30 18 1.89
结果在你预期的1%-3%区间内,符合业务常识。
注意事项
- 确保输入的
start和end是同一统计口径的累计损失占比,不存在重复统计、口径偏差的问题 - 若你的统计周期起始点是「无损失的初始森林」,即
start=0,可以将remaining_start直接设为1代入计算即可
内容的提问来源于stack exchange,提问作者maycca
相关产品推荐
相关产品推荐

