【问题标题】:Getting R squared from a mixed effects multilevel model in metafor从 metafor 中的混合效应多级模型中获取 R 平方
【发布时间】:2014-03-12 15:36:32
【问题描述】:

我正在 R 中对森林的特定处理进行荟萃分析。对于这个模型,我需要拟合随机效应来解释研究方法的差异和站点年龄的变化,因为这两个都是混杂变量,我对调查由它们引起的变化没有明确的兴趣。

但是,据我所知,[metfor] 包不允许您在拥有多级模型时计算 R 平方类型统计量。

无论如何,在这里更清楚地描述我的问题是一个模拟数据集

Log<-data.frame(Method=rep(c("RIL","Conv"),each=10),
     RU=runif(n=20,min=10,max=50),SDU=runif(n=20,5,20),
     NU=round(runif(n=20,10,20),0))
Log$Study<-rep(1:4,each=5)
Log$Age<-rep(c(0,10,15,10),times=5)
RIL<-(Log$RU-(Log$RU*(abs(rnorm(n=20,mean=.6,sd=0.1)))))+(0.5*Log$Age)
Conv<-(Log$RU-(Log$RU*(abs(rnorm(n=20,mean=.2,sd=0.1)))))+(0.2*Log$Age)
Log$RL<-ifelse(Log$Method=="RIL",RIL,Conv)
Log$SDL<-Log$SDU
Log$NL<-Log$NU

#now we perform a meta-analysis using metafor
require(metafor)
ROM<-escalc(data=Log,measure="ROM",m2i=RU,
sd2i=SDU,n2i=NU,m1i=RL,sd1i=SDL,n1i=NL,append=T)
Model1<-rma.mv(yi,vi,random=~(1|Study)+(1|Age),method="ML",data=ROM)
summary(Model1)
forest(Model1)

上述模型是一个空模型,查看截距是否在统计上显着不同于零。在我们的例子中是这样。但是,我还想看看治疗的差异是否描述了我在森林图上看到的效应大小的差异,你可以在这里看到

所以我运行这个模型:

Model2<-rma.mv(yi,vi,mods=~Method,random=~(1|Study)+(1|Age),method="ML",data=ROM)
summary(Model2)

看起来不错。

    Multivariate Meta-Analysis Model (k = 20; method: ML)

  logLik  Deviance       AIC       BIC      AICc  
  0.4725   19.8422    7.0550   11.0380    9.7217  

Variance Components: 

outer factor: Age   (nlvls = 3)
inner factor: Study (nlvls = 4)

            estim    sqrt  fixed
tau^2      0.0184  0.1357     no
rho        1.0000             no

Test for Residual Heterogeneity: 
QE(df = 18) = 23.3217, p-val = 0.1785

Test of Moderators (coefficient(s) 2): 
QM(df = 1) = 19.6388, p-val < .0001

Model Results:

           estimate      se     zval    pval    ci.lb    ci.ub     
intrcpt     -0.1975  0.1007  -1.9622  0.0497  -0.3948  -0.0002    *
MethodRIL   -0.4000  0.0903  -4.4316  <.0001  -0.5768  -0.2231  ***

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

但是,我想从这个模型中得到一个相当于 R 平方的拟合优度。人们过去在使用 GLMM but there are now ways of doing this 时遇到过这些问题。我想知道是否有人知道用元分析做类似事情的好方法?我有审稿人要求这样做,但我不确定我是否应该告诉他们不能这样做。

提前感谢您的帮助!

【问题讨论】:

标签: r mixed-models


【解决方案1】:

首先,您没有完全使用rma.mv() 函数的正确语法。对于这两个模型,我假设您实际上打算使用:

Model1 <- rma.mv(yi, vi, random = list(~ 1 | Study, ~ 1 | Age), method="ML", data=ROM)
Model2 <- rma.mv(yi, vi, mods = ~ Method, random = list(~ 1 | Study, ~ 1 | Age), method="ML", data=ROM)

现在,对于 R 平方,您可以将方差分量的比例减少计算为一种伪 R 平方值。这只是常规元回归中通常所做的事情的逻辑扩展。所以,根据上面的模型:

(Model1$sigma2[1] - Model2$sigma2[1]) / Model1$sigma2[1]
(Model1$sigma2[2] - Model2$sigma2[2]) / Model1$sigma2[2]

如果一个值应该是负数,它通常设置为零。

如果你想要一个单一的值,你还可以计算总方差的比例减少:

(sum(Model1$sigma2) - sum(Model2$sigma2)) / sum(Model1$sigma2)

【讨论】:

  • 感谢 Wolfgang,非常有帮助。它似乎与我的大多数模型都运行良好,但对于一些明显得到良好支持的模型(AICc 相对较低),总方差的比例减少结果为负。有任何想法吗?如果我找出问题所在,我会进行调查并在此处回复。
  • 您的意思是具有调节器/预测器的模型的 AICc 明显低于仅截距模型,但总方差的比例减少是负的?我想这可能会发生 - 根据您的数据集的大小,这些方差分量可能无法非常精确地估计,这可能会导致这种违反直觉的结果。您还可以考虑根据对数似然计算伪 R 平方值之一。参见,例如:ats.ucla.edu/stat/mult_pkg/faq/general/Psuedo_RSquareds.htm
猜你喜欢
  • 2022-06-29
  • 2022-10-06
  • 1970-01-01
  • 2018-11-01
  • 2021-10-18
  • 1970-01-01
  • 2020-02-12
  • 2018-07-26
  • 1970-01-01
相关资源
最近更新 更多