Skip to content

[R-meta] Back transformation of double arscine transformed estimates in metafor

8 messages · Daniel Mønsted Shabanzadeh, Wolfgang Viechtbauer

#
Hey

I am performing a meta-regression of multiple single arm
studies. The outcome is proportions of complications following a specific
surgical treatment which is the same for all included studies. I want to
explore if variables such as age, continent or medications have an impact
on the outcome. Since some of the identified studies have 0 complications
events I have performed Freeman-Tuckey double arscine transformation of
data.

Data transformation
b<-escalc(xi=compl, ni=total, data=a, measure="PFT", add=0)

Meta-regression of multiple identified studies
metareg<-rma(yi, vi, data=b, mods=~continent+age+pm)
print(metareg)


Mixed-Effects Model (k = 11; tau^2 estimator: REML)

tau^2 (estimated amount of residual heterogeneity):     0.0091 (SE = 0.0060)
tau (square root of estimated tau^2 value):             0.0952
I^2 (residual heterogeneity / unaccounted variability): 91.15%
H^2 (unaccounted variability / sampling variability):   11.30
R^2 (amount of heterogeneity accounted for):            28.85%

Test for Residual Heterogeneity:
QE(df = 6) = 78.3204, p-val < .0001

Test of Moderators (coefficient(s) 2:5):
QM(df = 4) = 7.6936, p-val = 0.1035

Model Results:

                        estimate      se     zval    pval    ci.lb   ci.ub
intrcpt                   0.3197  0.1079   2.9640  0.0030   0.1083  0.5311  **
continentAsia            -0.1666  0.1062  -1.5685  0.1168  -0.3747  0.0416
continentNorth America   -0.1755  0.1067  -1.6452  0.0999  -0.3845  0.0336   .
ageinfant                 0.1824  0.0741   2.4616  0.0138   0.0372  0.3277   *
pmTA                     -0.1484  0.0973  -1.5252  0.1272  -0.3392  0.0423

---
Signif. codes:  0 ?***? 0.001 ?**? 0.01 ?*? 0.05 ?.? 0.1 ? ? 1



These estimates and CI are transformed. Usually I would transform them back
to proportions with predict in presence of simple models. But I am not sure
hos to do it in multiple models.

predict(metareg, transf=transf.ipft.hm, targ=list(ni=a$total)). This gives
us multiple lines of estimates which I cannot interpretate:

     pred  ci.lb  ci.ub  cr.lb  cr.ub
1  0.0259 0.0017 0.0715 0.0000 0.1388
2  0.0202 0.0005 0.0594 0.0000 0.1245
3  0.0000 0.0000 0.0348 0.0000 0.0692
4  0.0202 0.0005 0.0594 0.0000 0.1245
5  0.1058 0.0290 0.2206 0.0056 0.2976
6  0.0175 0.0000 0.0940 0.0000 0.1478
7  0.1174 0.0380 0.2310 0.0100 0.3110
8  0.0202 0.0005 0.0594 0.0000 0.1245
9  0.0283 0.0000 0.1236 0.0000 0.1799
10 0.0259 0.0017 0.0715 0.0000 0.1388
11 0.0259 0.0017 0.0715 0.0000 0.1388


How do I obtain estimates of proportions for the impact of each variable
explored in the model?

Regards,
Daniel
#
Dear Daniel,

predict(metareg, transf=transf.ipft.hm, targ=list(ni=a$total)) gives you the fitted values (proportions) for the 11 studies. So these are the predicted values (based on the model) for whatever values these studies take on for the moderator variables. If you want to compute predicted values for other combinations of moderator values, you need to use the 'newmods' argument. For example:

predict(metareg, newmods = c(0,1,1,0), 
        transf=transf.ipft.hm, targ=list(ni=a$total))

will give the predicted value (proportion) for continent = North America, age = infant, and pm = LA (based on your post on Stack Overflow -- https://stackoverflow.com/questions/58203464/reverse-transformation-of-double-arscine-transformed-estimates-when-doing-meta-r -- I can see that pm has two levels, LA (reference level) and TA).

By varying one moderator and holding the other moderators constant, you can illustrate how a moderator affects the results (you cannot just take the model coefficients and transform them).

But: The back-transformation for the FT transformation is problematic. Please take a look at:

https://onlinelibrary.wiley.com/doi/full/10.1002/jrsm.1348

Even though the FT transformation has some nice properties, I would therefore avoid it (because we typically do want to back-transform in the end). You could either just use the 'standard' arcsine square root transformation (measure="PAS") or maybe even better switch to a logistic mixed-effects model, which you can fit with rma.glmm():

metareg <- rma.glmm(measure="PLO", ai=compl, nu=total, data=a,
                    mods = ~ continent + age + pm)

The results are then analyzed on the logit (log odds) scale. So, the back-transformation to odds would be:

predict(metareg, newmods = c(0,1,1,0), transf=exp)

In fact, here, you can exponentiate the coefficients themselves, which then reflect odds ratios:

round(exp(coef(summary(metareg))[,c("estimtate", "ci.lb", "ci.ub")]), 3)

The back-transformation to proportions would be:

predict(metareg, newmods = c(0,1,1,0), transf=transf.ilogit)

Best,
Wolfgang

-----Original Message-----
From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces at r-project.org] On Behalf Of Daniel M?nsted Shabanzadeh
Sent: Friday, 04 October, 2019 10:47
To: r-sig-meta-analysis at r-project.org
Subject: [R-meta] Back transformation of double arscine transformed estimates in metafor

Hey

I am performing a meta-regression of multiple single arm
studies. The outcome is proportions of complications following a specific
surgical treatment which is the same for all included studies. I want to
explore if variables such as age, continent or medications have an impact
on the outcome. Since some of the identified studies have 0 complications
events I have performed Freeman-Tuckey double arscine transformation of
data.

Data transformation
b<-escalc(xi=compl, ni=total, data=a, measure="PFT", add=0)

Meta-regression of multiple identified studies
metareg<-rma(yi, vi, data=b, mods=~continent+age+pm)
print(metareg)

Mixed-Effects Model (k = 11; tau^2 estimator: REML)

tau^2 (estimated amount of residual heterogeneity):     0.0091 (SE = 0.0060)
tau (square root of estimated tau^2 value):             0.0952
I^2 (residual heterogeneity / unaccounted variability): 91.15%
H^2 (unaccounted variability / sampling variability):   11.30
R^2 (amount of heterogeneity accounted for):            28.85%

Test for Residual Heterogeneity:
QE(df = 6) = 78.3204, p-val < .0001

Test of Moderators (coefficient(s) 2:5):
QM(df = 4) = 7.6936, p-val = 0.1035

Model Results:

                        estimate      se     zval    pval    ci.lb   ci.ub
intrcpt                   0.3197  0.1079   2.9640  0.0030   0.1083  0.5311  **
continentAsia            -0.1666  0.1062  -1.5685  0.1168  -0.3747  0.0416
continentNorth America   -0.1755  0.1067  -1.6452  0.0999  -0.3845  0.0336   .
ageinfant                 0.1824  0.0741   2.4616  0.0138   0.0372  0.3277   *
pmTA                     -0.1484  0.0973  -1.5252  0.1272  -0.3392  0.0423

---
Signif. codes:  0 ?***? 0.001 ?**? 0.01 ?*? 0.05 ?.? 0.1 ? ? 1

These estimates and CI are transformed. Usually I would transform them back
to proportions with predict in presence of simple models. But I am not sure
hos to do it in multiple models.

predict(metareg, transf=transf.ipft.hm, targ=list(ni=a$total)). This gives
us multiple lines of estimates which I cannot interpretate:

     pred  ci.lb  ci.ub  cr.lb  cr.ub
1  0.0259 0.0017 0.0715 0.0000 0.1388
2  0.0202 0.0005 0.0594 0.0000 0.1245
3  0.0000 0.0000 0.0348 0.0000 0.0692
4  0.0202 0.0005 0.0594 0.0000 0.1245
5  0.1058 0.0290 0.2206 0.0056 0.2976
6  0.0175 0.0000 0.0940 0.0000 0.1478
7  0.1174 0.0380 0.2310 0.0100 0.3110
8  0.0202 0.0005 0.0594 0.0000 0.1245
9  0.0283 0.0000 0.1236 0.0000 0.1799
10 0.0259 0.0017 0.0715 0.0000 0.1388
11 0.0259 0.0017 0.0715 0.0000 0.1388

How do I obtain estimates of proportions for the impact of each variable
explored in the model?

Regards,
Daniel
#
Thank you for your reply!
A few questions remain:
1. The reason for using FT transformation was due to many outcomes being
equal to 0 in proportions and thereby to avoid adding numbers that distort
the estimates. Would the PAS or PLO have the same advantages as the FT
transformation in this regard?
2. The meta-regression is performed on proportions and not on relative
risks or odds. Can a meta-regression on proportions be performed in PAS or
PLO?

Regards,
Daniel

fre. 4. okt. 2019 11.35 skrev Viechtbauer, Wolfgang (SP) <
wolfgang.viechtbauer at maastrichtuniversity.nl>:

  
  
#
1) The logistic model also doesn't require adjustments to the counts, so 
yes, it has the same advantage as the PFT (and PAS) transformation.

2) You are doing a meta-analysis of proportions, but the analysis is 
carried out on a transformed scale (like with PFT). When you use a 
logistic model, you are (implicitly) doing the analysis on a logit scale. 
For easier interpretation, we then typically transform the results back to 
odds or directly to proportions.


Best,
Wolfgang
#
Dear Wolfgang

I have now run the models, but still seem to have some conversion
problems when trying to obtain proportions from the regression model.
The variable age_cor is categorical with 6 levels (level 5 is ref.).

b<-rma.glmm(xi=compl_treat, ni=total, mods = ~age_cor, measure = "PLO", data=a)
c<-predict(b, newmods=c(0,0,0,0,1), transf=transf.ilogit)
print(c)

pred  ci.lb  ci.ub  cr.lb  cr.ub
 0.0183 0.0064 0.0516 0.0011 0.2460


As far as I interpretate this results, it means that if age_cor is fixed at
0 in level 1-4 and level 5 is fixed at 1, the proportion is 0.0183. Is it
not possible to obtain proportions from all levels in the variabel when one
level is the reference? Like the case in studies with relative
risks exploring multiple level categorical variables with one reference
level.

Regards,
Daniel

Daniel M?nsted Shabanzadeh
MD, PhD
Department of Gastroenterology, Surgical Unit
Hvidovre Hospital
Mobile +45 2546 5251


On Fri, Oct 4, 2019 at 1:30 PM Wolfgang Viechtbauer <
wolfgang.viechtbauer at maastrichtuniversity.nl> wrote:

            

  
  
#
Dear Daniel,

If level 5 is the reference level, then that is what the intercept represents, so the 0.0183 cannot represent level 5. You would have to provide the output of 'b' for me to tell you better what is being estimated here, but 0.0183 is the estimated proportion for whatever level the last coefficient represents in the model.

If you want all estimated proportions for all 6 levels, then you can get this with a single command:

predict(b, newmods=rbind(0, diag(5)), transf=transf.ilogit)

The first will be for the reference level, the rest for each other level.

Best,
Wolfgang

-----Original Message-----
From: Daniel M?nsted Shabanzadeh [mailto:dmshaban at gmail.com] 
Sent: Saturday, 05 October, 2019 12:31
To: Viechtbauer, Wolfgang (SP)
Cc: r-sig-meta-analysis at r-project.org
Subject: Re: [R-meta] Back transformation of double arscine transformed estimates in metafor

Dear Wolfgang

I have now run the models, but still seem to have some conversion problems when trying to obtain proportions from the regression model. The variable age_cor is categorical with?6 levels (level 5 is ref.).

b<-rma.glmm(xi=compl_treat, ni=total, mods = ~age_cor, measure = "PLO", data=a)
c<-predict(b, newmods=c(0,0,0,0,1), transf=transf.ilogit)
print(c)

pred  ci.lb  ci.ub  cr.lb  cr.ub
 0.0183 0.0064 0.0516 0.0011 0.2460

As far as I interpretate this results, it means that if age_cor is fixed at 0 in level 1-4 and level 5 is fixed at 1, the proportion is?0.0183. Is it not possible to?obtain proportions?from all levels in the variabel?when one level is?the reference? Like the case in studies with relative risks?exploring multiple level categorical variables with one reference level. ??

Regards,
Daniel

Daniel M?nsted Shabanzadeh
MD, PhD
Department of Gastroenterology, Surgical Unit
Hvidovre Hospital
Mobile?+45 2546 5251
#
Dear Wolfgang

The variable age_cor has 6 levels (ref. level 5)


 table(a$age_cor)
      5       1       2       3       4 missing
    111     140      27     113      19       8



With your code suggestion slightly modified
b<-rma.glmm(xi=compl_treat, ni=total, mods = ~age_cor, measure = "PLO",
data=a)
print(b)


Mixed-Effects Model (k = 401; tau^2 estimator: ML)

tau^2 (estimated amount of residual heterogeneity):     1.8327
tau (square root of estimated tau^2 value):             1.3538
I^2 (residual heterogeneity / unaccounted variability): 98.91%
H^2 (unaccounted variability / sampling variability):   91.85

Tests for Residual Heterogeneity:
Wld(df = 395) = 4777257347008370311248.0000, p-val < .0001
LRT(df = 395) =                      0.0000, p-val = 1.0000

Test of Moderators (coefficient(s) 2:6):
QM(df = 5) = 20.3959, p-val = 0.0011

Model Results:

                estimate      se      zval    pval    ci.lb    ci.ub
intrcpt          -3.9819  0.1456  -27.3422  <.0001  -4.2674  -3.6965  ***
age_cor1          0.3358  0.1922    1.7474  0.0806  -0.0408   0.7124    .
age_cor2          0.3169  0.3093    1.0244  0.3057  -0.2894   0.9231
age_cor3          0.8528  0.2012    4.2397  <.0001   0.4586   1.2471  ***
age_cor4         -0.0370  0.3850   -0.0962  0.9234  -0.7916   0.7176
age_cormissing    0.0009  0.5648    0.0016  0.9987  -1.1061   1.1080

---
Signif. codes:  0 ?***? 0.001 ?**? 0.01 ?*? 0.05 ?.? 0.1 ? ? 1


c<-predict(b, newmods=rbind(0, diag(5)), transf=transf.ilogit)
print(c)

    pred  ci.lb  ci.ub  cr.lb  cr.ub
1 0.0183 0.0138 0.0242 0.0013 0.2119
2 0.0254 0.0200 0.0323 0.0018 0.2726
3 0.0250 0.0148 0.0419 0.0017 0.2772
4 0.0419 0.0322 0.0544 0.0030 0.3866
5 0.0177 0.0089 0.0349 0.0012 0.2184
6 0.0183 0.0064 0.0516 0.0011 0.2460


- Is the interpretation that line 1 represents the age_cor reference
level (level 5) proportion and the remaining levels as listed in print (b)?
- If I want to explore age_cor further, can I add multiple moderators to
the model and just increase the diag in predict?

Regards,
Daniel


Daniel M?nsted Shabanzadeh
MD, PhD
Department of Gastroenterology, Surgical Unit
Hvidovre Hospital
Mobile +45 2546 5251


On Sat, Oct 5, 2019 at 2:16 PM Viechtbauer, Wolfgang (SP) <
wolfgang.viechtbauer at maastrichtuniversity.nl> wrote:

            

  
  
#
- Is the interpretation that line 1 represents the age_cor reference level (level 5) proportion and the remaining levels as listed in print (b)? 

Yes!

- If I want to explore age_cor further, can I add multiple moderators to the model and just increase the diag in predict?

Do you mean: More levels of age_cor? Then yes. If you mean adding additional moderators, then it depends on what kind of moderators you are adding. They may not be dummy variables.

These might be useful readings:

http://www.metafor-project.org/doku.php/tips:testing_factors_lincoms

http://www.metafor-project.org/doku.php/tips:multiple_factors_interactions

Best,
Wolfgang

-----Original Message-----
From: Daniel M?nsted Shabanzadeh [mailto:dmshaban at gmail.com] 
Sent: Saturday, 05 October, 2019 17:56
To: Viechtbauer, Wolfgang (SP)
Cc: r-sig-meta-analysis at r-project.org
Subject: Re: [R-meta] Back transformation of double arscine transformed estimates in metafor

Dear Wolfgang

The variable age_cor has 6 levels (ref. level 5)

 table(a$age_cor)

      5       1       2       3       4 missing 
    111     140      27     113      19       8 

With your code suggestion slightly modified 
b<-rma.glmm(xi=compl_treat, ni=total, mods = ~age_cor, measure = "PLO", data=a)
print(b)

Mixed-Effects Model (k = 401; tau^2 estimator: ML)

tau^2 (estimated amount of residual heterogeneity):     1.8327
tau (square root of estimated tau^2 value):             1.3538
I^2 (residual heterogeneity / unaccounted variability): 98.91%
H^2 (unaccounted variability / sampling variability):   91.85

Tests for Residual Heterogeneity: 
Wld(df = 395) = 4777257347008370311248.0000, p-val < .0001
LRT(df = 395) =                      0.0000, p-val = 1.0000

Test of Moderators (coefficient(s) 2:6): 
QM(df = 5) = 20.3959, p-val = 0.0011

Model Results:

                estimate      se      zval    pval    ci.lb    ci.ub     
intrcpt          -3.9819  0.1456  -27.3422  <.0001  -4.2674  -3.6965  ***
age_cor1          0.3358  0.1922    1.7474  0.0806  -0.0408   0.7124    .
age_cor2          0.3169  0.3093    1.0244  0.3057  -0.2894   0.9231     
age_cor3          0.8528  0.2012    4.2397  <.0001   0.4586   1.2471  ***
age_cor4         -0.0370  0.3850   -0.0962  0.9234  -0.7916   0.7176     
age_cormissing    0.0009  0.5648    0.0016  0.9987  -1.1061   1.1080     

---
Signif. codes:  0 ?***? 0.001 ?**? 0.01 ?*? 0.05 ?.? 0.1 ? ? 1 

c<-predict(b, newmods=rbind(0, diag(5)), transf=transf.ilogit)
print(c)
    pred  ci.lb  ci.ub  cr.lb  cr.ub
1 0.0183 0.0138 0.0242 0.0013 0.2119
2 0.0254 0.0200 0.0323 0.0018 0.2726
3 0.0250 0.0148 0.0419 0.0017 0.2772
4 0.0419 0.0322 0.0544 0.0030 0.3866
5 0.0177 0.0089 0.0349 0.0012 0.2184
6 0.0183 0.0064 0.0516 0.0011 0.2460

- Is the interpretation that line 1 represents the age_cor reference level?(level 5) proportion?and the remaining levels as listed in print (b)? 
- If I want to explore age_cor further, can I add multiple moderators to the model?and just increase?the?diag in predict?

Regards,
Daniel??
?
Daniel M?nsted Shabanzadeh
MD, PhD
Department of Gastroenterology, Surgical Unit
Hvidovre Hospital
Mobile?+45 2546 5251?