使用vegan包varpart函数做方差分解,结果占比总和超100%求解读
方差分解结果总和超100%的疑问解答
问题背景
我用vegan包的varpart函数做方差分解,得到的结果图中各部分方差占比相加总和超过了100%。我原本预期总和应该是100%减去残差的22.6%,怀疑自己没掌握图的解读方法,求解答。
使用代码
spe.part.all <- varpart(carb, env.ftp, env.ftm, env.loc) spe.part.all$part plot(spe.part.all, Xnames = c("FT_PLANT", "MICRO_FG","SOIL_CLIMATE" ), # 命名分区 bg = c("seagreen3", "mediumpurple"), alpha = 80, # 设置圆圈颜色 digits = 2, # 保留2位小数 cex = 1.5)
方差分解图

核心原因与解读方法
为什么总和超100%?
这是因为韦恩图中的重叠区域被重复计算了:
- 每个圆圈代表对应变量组的总解释方差,包含了和其他组共享的重叠部分;
- 直接把所有区域数值相加时,重叠部分会被多次计入,自然会超过实际可解释的总方差(即100% - 残差22.6% = 77.4%)。
正确解读方式
- 总解释方差:所有独特部分+所有重叠部分的总和,等于100%减去残差。对应图中数值:20.7% + 5.8% + 21.0% + 10.1% + 7.6% + 0% + 12.2% = 77.4%,和预期一致。
- 独特贡献:图中不与其他圆圈重叠的区域,是对应变量组单独能解释的方差(比如FT_PLANT的20.7%、SOIL_CLIMATE的21.0%)。
- 重叠贡献:交叉区域是多组变量共同解释的方差,这部分方差不能被某一组单独“独占”,所以会被计入多个组的总解释方差中。
验证方法
你可以查看spe.part.all$part的输出:
$indfract:列出各部分的独立(独特)解释方差;$totfract:显示各组的总解释方差(包含重叠部分);
将所有独立部分相加,结果必然等于100%减去残差的数值。
内容的提问来源于stack exchange,提问作者William WIne
相关产品推荐
相关产品推荐

