[R-meta] Possible bug in metafor::weights()
Stefanou Revesz
@te|@noureve@z @end|ng |rom gm@||@com
Thu Feb 17 17:12:55 CET 2022
Dear Meta-analysis Experts,
I just came across the following post
**https://stat.ethz.ch/pipermail/r-sig-meta-analysis/2022-February/003851.html**
about the weights in rma.mv() models. I have two questions.
1- It looks like the weights() function in metafor doesn't work if a
model has used 'sparse=TRUE' (reproducible example below)?
2- The above-linked post provides a method to detect negative weights
for effect estimates as a way to discover the inadequacy of using a
single r in the V matrix. But I tried that method with Dr.
Pustejovsky's own demo and I still see negative weights (below). So,
are negative weights sometimes OK?
Thanks,
Stefanou
TSL15 <- readRDS(url("https://osf.io/xpmjk/download")) %>%
filter(!is.na(percoll), !is.na(attrition_all), !is.na(permale))
TSL15_cent <-
TSL15 %>%
mutate(
postwks_c = pmin(postwks, 26) - 12,
postwks_long = as.numeric(postwks > 26),
percoll_c = percoll - 1,
permale_c = permale - 0.5,
attrition_c = attrition_all - median(attrition_all),
study_dv = paste(studyid, dv_cat, sep = "-"),
study_ctype = paste(studyid, Ctype, sep = "-"))
V_mat <- impute_covariance_matrix(TSL15_cent$V,
cluster = TSL15_cent$studyid,
r = .6, smooth_vi = TRUE)
##-- change to sparse=TRUE to see weights() bug
dv_multilevel <- rma.mv(es ~ 0 + dv_cat + postwks_c + postwks_long +
percoll_c + permale_c + attrition_c,
V = V_mat, random = ~ 1 | studyid / esid,
data = TSL15_cent, sparse = FALSE)
W <- weights(dv_multilevel, type = "matrix")
X <- model.matrix(dv_multilevel)
WX <- W %*% X
B <- solve(t(X) %*% WX)
weighting_mat <- WX %*% B
any(weighting_mat < 0) # <--- TRUE
More information about the R-sig-meta-analysis
mailing list