# How to back-transform regression coefficients in a multi-level meta-regression in metafor

My question is an extension of this one, where I asked about back-transforming the results of a reliability generalization meta-analysis.

I have run a three-level meta-regression, using the Bonett-transformed coefficient alpha as an effect size and various categorical and centred-continuous predictors. The model shell looks something like this:

model <- rma.mv(yi, vi, random = ~ 1 | level3/level2, mods = ~ I(pred1-mean(pred1)) + I(pred2-mean(pred2)) + factor(pred3) + factor(pred4))


The output I get with summary(model) gives me the transformed regression coefficients.

My question is, how do I retrieve the back-transformed regression coefficients (e.g., the intercept, betas, and standard errors in their original scale?).

Furthermore, is there an accessible way to retrieve the standardized regression coefficients, after having back-transformed them?"

I have tried the following methods:

Manual back-transform (for a Bonett transform)

b0_est <- 1 - exp(-model$$b[1]) b0_se <- 1 - exp(-model$$se[1])


Where [1] would reference the intercept, but [2] would reference a regression weight (in this example, we would reference 2-5, since there are four predictors).

The issue I am having with this method is that the transformed estimates do not necessarily match the untransformed estimates. For instance, the back-transformed regression coefficient for one predictor is .5 (SE = .27). The transformed estimate that I get from the summary(model) output is significant at the 5% level (.69, SE = .31, z = 2.24) but the manually back-transformed values would no longer be significant (e.g., .5, SE .27, z = 1.85).

Predict function

predict(model, newmods=colMeans(model.matrix(model))[-1], transf=transf.iabt)


This provides a back-transformed estimate of the intercept, but I am not sure how to apply this to retrieve the regression weights and their standard errors.

You cannot back-transform the coefficients directly, as they do not reflect estimated transformed coefficient alpha values, but differences thereof (e.g., between different categories of a categorical moderator or differences when a quantitative moderator increases by one unit).

One can compute predicted transformed values using the predict() function and then use the transf=transf.iabt back-transformation as you have done. That's of course not the same as getting 'back-transformed regression coefficients' but again, you essentially cannot get the latter.

• Thank you, Prof. So you are suggesting that for a given predictor, one can take the difference between the intercept and the predicted value when the predictor of interest increases by one, as some estimate of the slope for that predictor, e.g.,: baseline <- predict(model, newmods=cbind(0,0,0,0), transf=transf.iabt) b0 <- b0!pred; diff <- predict(model, newmods=cbind(1,0,0,0), transf=transf.iabt); b1_diff <- diff!pred; b1 <- b1_diff-b0; b1 Note I have referenced using "!" rather than "\$" as the latter creates a formula Commented Oct 13, 2021 at 12:24
• No, this will give you the difference between 0 and 1, but the difference between 1 and 2 will be different, since the (back)transformation is non-linear. Commented Oct 13, 2021 at 15:27
• I see - is there no other alternative to get some index of the 'back-transformed' slopes? This would be quite a disadvantage of using transformations in reliability generalizations... Commented Oct 13, 2021 at 18:38
• No. You can report the difference between two chosen values of each predictor while holding the others constant, but again, the difference will depend on the two chosen values and it will also depend on the values at which you hold the other predictors constant. Commented Oct 14, 2021 at 8:56