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

lmer混合线性模型如何计算每个国家分组对应的R-squared值

混合线性模型各国家R平方计算方法

你需要的每个国家对应R²的核心计算逻辑为:针对每个国家的所有观测样本,计算原始Gini值和模型给出的对应预测值的平方相关系数,该值即为该国家层面模型的拟合优度。
predict(modelF)默认会调用每个国家的随机截距、随机斜率计算预测值,和你从coef(modelF)拿到的国家层面系数计算得到的拟合值完全一致,因此可以直接基于预测值完成计算。


方法1:基于tidyverse实现(代码更简洁)

library(dplyr)

# 1. 给原数据拼接模型预测值
data1_pred <- data1 %>%
  mutate(pred_Gini = predict(modelF))

# 2. 按国家分组计算R²,同时输出每个国家的观测数用于结果校验
country_r2 <- data1_pred %>%
  group_by(Country) %>%
  summarise(
    r_squared = cor(Gini, pred_Gini)^2,
    observation_count = n()
  )

# 输出结果
print(country_r2, n = Inf) # n=Inf可以输出所有国家的结果

方法2:基于基础R实现(无需额外加载包)

# 1. 给原数据拼接模型预测值
data1$pred_Gini <- predict(modelF)

# 2. 按国家拆分数据并计算每个分组的R²
country_r2_list <- by(data1, data1$Country, function(sub_data) {
  # 过滤掉存在缺失值的行
  sub_data_clean <- na.omit(sub_data[, c("Gini", "pred_Gini")])
  # 样本量小于3的分组返回NA避免结果失真
  if(nrow(sub_data_clean) < 3) return(NA)
  return(cor(sub_data_clean$Gini, sub_data_clean$pred_Gini)^2)
})

# 3. 把结果转为数据框方便查看
country_r2 <- data.frame(
  Country = names(country_r2_list),
  r_squared = as.numeric(country_r2_list)
)

# 输出结果
print(country_r2)

注意事项

  • 如果某个国家的有效观测数≤2,计算得到的R²会接近1,没有实际参考意义,建议过滤掉这部分结果
  • 这里计算的是条件R²的分组版本,用到了每个国家的随机效应估计值,反映的是模型对单个国家Gini变化的解释能力

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:51:02