0

我在 R 中使用 metafor 包,非常有趣的是,我发现对于相同的数据集,与 list(~1|id1, ~1|id2) 相比,~id1|id2 公式似乎给出了更少的“不收敛”结果。任何人都可以解释其背后的原因吗?先感谢您!

这是重现该问题的测试数据:

# Case 1 - different results on convergence
df <- data.frame(bac = c("a","b","c"), id2 = c("A","B","B"), id1 = c("d","e","f"), ES = c(0.5603294, -1.8397608, -1.7491630), SE=c(2.368467, 1.240960, 1.287030))

rma.mv(yi=ES, V=(SE)^2,data=df,
       random = list( ~ id1|id2),
       control = list(maxiter = 500))

rma.mv(yi=ES, V=(SE)^2,data=df, random = list(~1|id1, ~1|id2), control = list(maxiter = 500))

# Case 2: exact the same results
df2 <- data.frame(id1= c("a","b","c","d"),id2=c("c1","c1","c2","c3"), Tech= c("a1","a2","a1","a1"),ES=c(-1.5,-3,1.5,3),SE=c(.2,.4,.2,.4))
rma.mv(ES, SE^2, random = ~ id1|id2, data=df2)
rma.mv(ES, SE^2, random = list(~ 1|id1,~ 1|id2), data=df2)

我的会话信息

R version 3.6.1 (2019-07-05)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.6

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_3.2.1     matlib_0.9.2      magrittr_1.5      plyr_1.8.5        data.table_1.12.8
[6] metafor_2.1-0     Matrix_1.2-18     RNeo4j_1.7.0     

loaded via a namespace (and not attached):
 [1] rgl_0.100.50            Rcpp_1.0.3              lattice_0.20-38         assertthat_0.2.1       
 [5] digest_0.6.23           mime_0.9                R6_2.4.1                cellranger_1.1.0       
 [9] httr_1.4.1              pillar_1.4.3            rlang_0.4.4             lazyeval_0.2.2         
[13] curl_4.3                readxl_1.3.1            rstudioapi_0.10         miniUI_0.1.1.1         
[17] car_3.0-6               webshot_0.5.2           foreign_0.8-75          htmlwidgets_1.5.1      
[21] munsell_0.5.0           shiny_1.4.0             compiler_3.6.1          httpuv_1.5.2           
[25] xfun_0.12               pkgconfig_2.0.3         htmltools_0.4.0         tidyselect_1.0.0       
[29] tibble_2.1.3            rio_0.5.16              withr_2.1.2             crayon_1.3.4           
[33] dplyr_0.8.4             later_1.0.0             MASS_7.3-51.5           grid_3.6.1             
[37] nlme_3.1-143            jsonlite_1.6.1          xtable_1.8-4            gtable_0.3.0           
[41] lifecycle_0.1.0         scales_1.1.0            zip_2.0.4               stringi_1.4.5          
[45] carData_3.0-3           promises_1.1.0          vctrs_0.2.2             openxlsx_4.1.4         
[49] tools_3.6.1             forcats_0.4.0           manipulateWidget_0.10.1 glue_1.3.1             
[53] purrr_0.3.3             hms_0.5.3               crosstalk_1.0.0         abind_1.4-5            
[57] fastmap_1.0.1           colorspace_1.4-1        knitr_1.28              haven_2.2.0   
4

2 回答 2

0

用如此小的数据集来拟合这些模型是毫无意义的,但总的来说,没有任何特别的理由说明它在一种情况下有效,而在另一种情况下无效。实现收敛,尤其是。对于如此小的数据集,这很困难,并且可能在一种模型规范上比另一种更好。在第一种情况下,您可以通过切换优化器使其收敛;例如:

rma.mv(yi=ES, V=(SE)^2, data=df, random = list(~1|id1, ~1|id2), control = list(optimizer="optim", optmethod="Nelder-Mead"))
于 2020-03-06T11:55:14.537 回答
0

此外,如果您试图提高实现收敛的情况的数量,如果模型选项指定了 tau2 的起始值,这将有所帮助

于 2020-03-15T04:07:35.753 回答