1

TLDR:

如何将与 Johnson, PC (2014) 论文对应的边际和条件 R^2 转换为 SPSS 中具有非结构化协方差类型和单个随机斜率的简单随机斜率模型?

更长:

在 RI 中,我使用 MuMin 包中的 r.squaredGLMM() 函数根据 Johnson, PC (2014) 计算我的混合模型的边际和条件 R^2。Nakagawa & Schielzeth 的 R2GLMM 扩展到随机斜率模型。生态与进化方法,5(9),944-946。

我现在正在使用 SPSS 教授混合模型的课程,我想给学生一个工具,通过它他们还可以计算边际和条件 R^2。但是,SPSS 在混合模型的输出中并未提供此功能

我找到了有关如何在 SPSS 中为随机截距模型计算边际和条件 R^2 的说明,作者是 Paul Johnson。这需要计算:Vf(固定效应方差)、Vr(随机效应方差)、Ve(残差方差)、

在随机截距模型的一个非常简单的情况下,我通过以下方式计算这些:

  • Vf:我只取基于固定效应预测变量的预测值的方差
  • Vr:协方差参数表的估计值,列出了与随机截距相关的方差
  • Ve:协方差参数表的估计值,列出了与残差相关的方差

并使用公式:

  • R^2m = Vf / (Vf + Vr + Ve)
  • R^2c = (Vf + Vr) / (Vf + Vr + Ve)

这将返回与此 R 代码相同的结果:

    library(lme4)
    library(MuMIn)
    library(insight)
    
    data <- read.csv("https://raw.githubusercontent.com/kekecsz/SIMM32/master/2021/Lab_4/data_bully_slope.csv")
    
    mod1 <- lmer(sandwich_taken ~ weight + (1|class), data = data)
    summary(mod1)
    
    r.squaredGLMM(mod1)

但是,我不知道如何将其推广到 SPSS 中的简单随机截距 + 斜率情况。在 RI 中,能够得到这些方差分量:

mod2 <- lmer(sandwich_taken ~ weight + (weight|class), data = data)

Vf = var(predict(mod2,re.form=NA))
Vr = get_variance(mod2)$var.random
Ve = sigma(mod2)^2

并使用这个公式:

R^2m = Vf / (Vf + Vr + Ve)
R^2c = (Vf + Vr) / (Vf + Vr + Ve)

返回相同的值

r.squaredGLMM(mod2)

我可以按照上述 SPSS 中所述的相同方式计算 Vf 和 Ve,但我无法找到输出中随机效应的方差。我试图通过取结果变量的总方差并减去 Vf 和 Ve 来计算它:

Vtotal = var(model.response(model.frame(mod1)))
Vr = Vtotal - (Vf + Ve)

但是我从 Vr 获得的价值与我从中获得的不同

get_variance(mod2)$var.random

并且以这种方式计算的边际和条件 R^2 不对应于

r.squaredGLMM(mod2)

如何将与 Johnson, PC (2014) 论文对应的边际和条件 R^2 转换为 SPSS 中具有非结构化协方差类型和单个随机斜率的简单随机斜率模型?

或者,是否可以合理地说以下将为简单的随机斜率模型提供边际和条件 R^2 的合理估计?(因为这是我可以在 SPSS 中计算的东西),需要注意的是,这包括对边际 R^2 的轻微高估和对条件 R^2 的轻微低估?

Vtot = var(model.response(model.frame(mod2)))
Vf = var(predict(mod2,re.form=NA))
Ve = sigma(mod2)^2
Vr_est = Vtot - (Vf + Ve)

Rm_est = Vf / (Vf + Vr_est + Ve)
Rm_est
Rc_est = (Vf + Vr_est) / (Vf + Vr_est + Ve)
Rc_est
4

0 回答 0