我想知道我的meta分析结果的解释。
设置非常简单:我有一个包含变量TVAL的数据集y(取自一组主要研究)。 TVAL是标准化的,因此其标准误差(来自初步研究的抽样标准误差)对于所有观察都是1。 SHORTREF是代表不同主要研究的一个因素。
我现在使用metafor包对常量执行简单的元回归:
> m<-rma.mv(yi=TVAL, V=1, random= ~ 1|SHORTREF, intercept=TRUE, method="REML", data=y)
> summary(m)
Multivariate Meta-Analysis Model (k = 933; method: REML)
logLik Deviance AIC BIC AICc
-3056.0316 6112.0633 6116.0633 6125.7379 6116.0762
Variance Components:
estim sqrt nlvls fixed factor
sigma^2 6.6821 2.5850 84 no SHORTREF
Test for Heterogeneity:
Q(df = 932) = 8115.1664, p-val < .0001
Model Results:
estimate se zval pval ci.lb ci.ub
-0.5544 0.2861 -1.9375 0.0527 -1.1151 0.0064 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
残余异质性(sigma ^ 2)为6.6821。连同主要研究的抽样方差(由于标准化而为1),我的总方差为6.6821 + 1 = 7.6821。
但是,我的回归和TVAL的总方差为var(y$TVAL)
= 8.70726。这意味着,我失踪了#34;我的总方差的一部分既不是抽样方差也不是残差异质性。如果我遗漏1|SHORTREF
因素,则不会显示此效果:
> m<-rma(yi=TVAL, sei=1, intercept=TRUE, method="REML", data=y)
> summary(m)
Random-Effects Model (k = 933; tau^2 estimator: REML)
logLik deviance AIC BIC AICc
-2330.9480 4661.8959 4665.8959 4675.5706 4665.9088
tau^2 (estimated amount of total heterogeneity): 7.7073 (SE = 0.4034)
tau (square root of estimated tau^2 value): 2.7762
I^2 (total heterogeneity / total variability): 88.52%
H^2 (total variability / sampling variability): 8.71
Test for Heterogeneity:
Q(df = 932) = 8115.1664, p-val < .0001
Model Results:
estimate se zval pval ci.lb ci.ub
-0.5964 0.0966 -6.1731 <.0001 -0.7857 -0.4070 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这里,剩余异质性tau ^ 2是总方差var(y$TVAL)
= 8.70726减去我的抽样方差为1.
也许,它真的很简单,我只是没有得到它,但任何想法为什么在第一个模型(具有1|SHORTREF
因子的那个)不是TVAL的完全变化是分为假设的两个误差分量(采样和残差异质性)?
谢谢!非常感谢您的帮助。
答案 0 :(得分:1)
您需要考虑三种变异来源:研究之间的异质性,研究中的异质性和抽样误差。在你的第一个模型中,你忽略了研究内的异质性。你应该使用这样的东西:
id <- 1:nrow(y)
m <- rma.mv(yi=TVAL, V=1, random= ~ 1|SHORTREF/id, data=y)
请注意,从此模型得到的两个方差分量的总和(加1)仍然不能精确地加起来var(TVAL)
,因为分解并非如此简单。但是你应该得到一些与这种差异非常匹配的东西。以下是模拟数据的示例:
library(metafor)
k <- 100 ### total number of estimates
m <- 20 ### number of studies
vi <- rep(1, k)
id <- 1:k
study <- sort(sample(1:m, k, replace=TRUE))
yi <- rep(rnorm(length(unique(study)), 0, 2), times=table(study)) + rnorm(k, 0, 4)
var(yi)
res <- rma(yi, vi)
res$tau2 + 1
res <- rma.mv(yi, vi, random = ~ 1 | study/id)
sum(res$sigma2) + 1