If I understand you correctly, you are conducting several analyzes with these 90 studies (for example, based on different subsets), and your goal is to show only the final estimates (based on these analyzes) in the forest area. Then the simplest approach would be to simply collect the estimates and the corresponding variances of the various analyzes in the vector, and then pass this to the forest() function. Let me give you a simple example:
load BCG vaccine dataset data(dat.bcg) fit random-effects models to some subsets res.r <- rma(yi, vi, data=dat, subset=alloc=="random") res.s <- rma(yi, vi, data=dat, subset=alloc=="systematic") res.a <- rma(yi, vi, data=dat, subset=alloc=="alternate") create vector with labels labels <- c("Random Allocation", "Systematic Allocation", "Alternate Allocation")
If you donβt like that the sizes of the points differ (by default they are drawn inversely with the deviations), you can use:
forest(estimates, variances, slab=labels, psize=1)
A couple of other improvements:
forest(estimates, variances, slab=labels, psize=1, atransf=exp, xlab="Relative Risk (log scale)", at=log(c(.2, .5, 1, 2)))
ADDITION
If you prefer polygon shapes for grades, you can do the following. First draw the graph as above, but use efac=0 to hide the vertical lines on the CI. Then just draw summary polygons with addpoly() :
forest(estimates, variances, slab=labels, psize=1, atransf=exp, xlab="Relative Risk (log scale)", at=log(c(.2, .5, 1, 2)), efac=0) addpoly(estimates, variances, atransf=exp, rows=3:1, col="white", annotate=FALSE)
You can also use efac=1.5 in addpoly() to stretch the polygons vertically. Adjust the ratio to your taste.