R语言flexplot包的R²与ICC结果为何与其他包存在差异?
关于flexplot包中
iestimates()的ICC与R²计算逻辑解析 一、ICC差异的原因
你的猜测完全正确:flexplot::iestimates()输出的ICC始终基于仅截距的空模型,而非当前拟合的带预测变量的混合模型。
可以通过空模型验证这一点:
# 拟合仅截距的空模型 null_model <- lmer(darkness ~ 1 + (1|dojo_id), data = jedi) # 手动计算空模型的ICC null_var <- data.frame(VarCorr(null_model))$vcov null_var[1]/sum(null_var) # 结果为0.177,与iestimates输出完全一致
而performance::icc()计算的是当前模型下的ICC,即组间方差(dojo_id)占总方差(组间+固定效应解释方差+残差)的比例,这也是混合模型领域ICC的常规定义。
二、R²的计算逻辑与含义
flexplot的iestimates()输出的R²并非传统的边际/条件R²,而是将总方差分解到模型各成分(截距、固定效应、随机效应、残差)的比例,核心逻辑基于方差的平方和分解:
- Residual R²:输出的0.390是残差方差占总方差的比例,代表模型未解释的变异部分。
- (Intercept)的负R²:当加入预测变量(anger)后,截距的方差贡献被固定效应的解释力抵消,flexplot在计算单个成分的方差贡献时,会考虑变量加入后的增量影响,若某个成分(如截距)在引入其他变量后导致可解释方差减少,就会出现负的R²值,属于该分解方法下的正常现象。
对比performance包的R²定义:
- 边际R²:仅统计固定效应(anger)解释的方差占总方差的比例
- 条件R²:统计固定效应+随机效应共同解释的方差占总方差的比例
两者统计逻辑完全不同,因此结果不具备直接可比性。
三、总结
- flexplot的ICC:反映无预测变量时组间变异的占比,而非当前模型的ICC。
- flexplot的R²:是模型各组成部分的方差分解比例,与边际/条件R²定义差异显著,负截距R²是成分间方差抵消的结果。
内容的提问来源于stack exchange,提问作者hanna-without-h
相关产品推荐
相关产品推荐

