交叉验证中线性混合模型的边际R²计算问题咨询
关于线性混合模型交叉验证场景下的R²计算问题
我正在处理一个预测问题,希望计算线性混合模型的固定效应所能解释的数据方差,并计划采用五折交叉验证评估模型的预测性能。
目前网上常见的方法是计算边际R²,可通过MuMIn包中的r.squaredGLMM函数实现(基于Nakagawa等人2017年的研究)。据我理解,该公式是用固定效应解释的方差除以模型总方差:
但我不清楚如何在交叉验证场景下应用该公式,因为不知道如何计算测试数据集中固定效应、随机效应及误差的特定方差。我当前的解决方案是使用OLS公式(1 - var(fitted)/var(observed)),但这与线性混合模型采用的极大似然法不匹配,且在某些情况下会得出负值。
我的问题分为两步:
- 是否存在计算Nakagawa公式所需方差的方法?
- 如果没有,‘经典’R²能否在此场景下应用?
解答
问题1:交叉验证场景下计算Nakagawa式边际R²的方法
Nakagawa的边际R²核心是分解固定效应方差、随机效应方差和残差方差,在交叉验证框架下没有直接的现成工具,但可以手动分步实现:
- 在每个交叉验证折叠中:
- 用训练集拟合线性混合模型,分别生成测试集的仅固定效应预测值(使用
predict(model, re.form = ~0))、包含随机效应的全模型预测值(使用predict(model)),同时提取测试集的观测值。 - 在测试集上计算三个关键方差:
- 固定效应预测值的方差:
var(fixed_preds) - 随机效应贡献的方差:
var(mixed_preds) - var(fixed_preds) - 残差方差:
var(observed - mixed_preds)
- 固定效应预测值的方差:
- 代入Nakagawa公式计算单折叠的边际R²:
边际R² = 固定效应方差 / (固定效应方差 + 随机效应方差 + 残差方差)
- 用训练集拟合线性混合模型,分别生成测试集的仅固定效应预测值(使用
- 最终将所有折叠的边际R²取平均值,得到交叉验证下的整体结果。
注意:这种方法假设训练集拟合的方差结构可推广到测试集,划分折叠时需保证随机效应分组(如聚类、个体)的完整性,避免数据泄露。
问题2:经典R²在交叉验证场景的适用性
经典R²(即你使用的1 - var(residuals)/var(observed))可以在该场景下使用,但要明确其适用边界:
- 它衡量的是全模型预测值(固定+随机效应)与观测值的拟合程度,而非仅固定效应的方差解释占比,和你最初量化固定效应贡献的需求不完全匹配。
- 出现负值是合理现象:当模型预测效果差于“用观测值均值预测”时,经典R²就会为负,这是交叉验证中反映模型泛化能力不足的有效信号。
- 若你的核心目标是评估预测性能而非固定效应的方差贡献,经典R²(或调整R²)是可行的;但如果需要精准量化固定效应的解释力,它无法替代Nakagawa的边际R²。
内容的提问来源于stack exchange,提问作者Pieter van der Veere
相关产品推荐
相关产品推荐

