Skip to contents

Fits a radial MR-Egger model using first order, second order, or modified second order weights. Outliers are identified using a significance threshold specified by the user. The function returns an object of class "egger", containing regression estimates, a measure of total heterogeneity using Rucker's Q statistic, the individual contribution to overall heterogeneity of each variant, and a data frame for use in constructing the radial plot.

Usage

egger_radial(r_input, alpha, weights, summary)

Arguments

r_input

A formatted data frame using the format_radial function, or an object of class MRInput generated by MendelianRandomization::mr_input or a data.frame for a single exposure-outcome pair generated by TwoSampleMR::harmonise_data.

alpha

A value specifying the statistical significance threshold for identifying outliers (0.05 specifies a p-value threshold of 0.05).

weights

A value specifying the inverse variance weights used to calculate the MR-Egger estimate and Rucker's Q statistic. By default modified second order weights are used, but one can choose to select first order (1), second order (2) or modified second order weights (3).

summary

A logical argument (TRUE or FALSE) indicating whether a summary of results and heterogeneity should be presented (default= TRUE).

Value

An object of class "egger" containing the following components:

coef

A matrix giving the intercept and slope coefficient, corresponding standard errors, t-statistics, and (two-sided) p-values.

qstatistic

Rucker's Q statistic for overall heterogeneity.

df

Degrees of freedom. This is equal to the number of variants -2 when fitting the radial MR-Egger model.

outliers

A data frame containing variants identified as outliers, with respective Q statistics, chi-squared tests and SNP identification.

data

A data frame containing containing SNP IDs, inverse variance weights, the product of the inverse variance weight and ratio estimate for each variant, contribution to overall heterogeneity with corresponding p-value, and a factor indicator showing outlier status.

confint

A vector giving lower and upper confidence limits for the radial MR-Egger effect estimate.

References

Bowden, J., et al., Improving the visualization, interpretation and analysis of two-sample summary data Mendelian randomization via the Radial plot and Radial regression. International Journal of Epidemiology, 2018. 47(4): p. 1264-1278.

Author

Wes Spiller; Jack Bowden; Tom Palmer.

Examples

# Example using format_radial data
ldl.dat <- data_radial[data_radial[,10]<5e-8,]

ldl.fdat <- format_radial(ldl.dat[,6], ldl.dat[,9],
                          ldl.dat[,15], ldl.dat[,21],
                          ldl.dat[,1])

egger_radial(ldl.fdat, 0.05, 1, TRUE)
#> 
#> Radial MR-Egger
#> 
#>               Estimate Std. Error   t value     Pr(>|t|)
#> (Intercept) -0.4303552  0.3244151 -1.326557 1.884296e-01
#> Wj           0.6129126  0.1109369  5.524877 3.988423e-07
#> 
#> Residual standard error: 1.537 on 80 degrees of freedom
#> 
#> F-statistic: 30.52 on 1 and 80 DF, p-value: 3.99e-07
#> Q-Statistic for heterogeneity: 188.9285 on 80 DF , p-value: 8.445607e-11
#> 
#>  Outliers detected 
#> 

# Example using TwoSampleMR format data
if (FALSE) {
if (require("TwoSampleMR", quietly = TRUE)) {
# Example with one exposure-outcome pair
bmi_exp_dat <- TwoSampleMR::extract_instruments(outcomes = 'ieu-a-2')
chd_out_dat <- TwoSampleMR::extract_outcome_data(
                               snps = bmi_exp_dat$SNP,
                               outcomes = 'ieu-a-7')
tsmrdat <- TwoSampleMR::harmonise_data(exposure_dat = bmi_exp_dat,
                                   outcome_dat = chd_out_dat)
egger_radial(r_input = tsmrdat, alpha = 0.05,
             weights = 1, summary = TRUE)
}
}

# Example using MendelianRandomization format data
if (require("MendelianRandomization", quietly = TRUE)) {
dat <- data_radial[data_radial[,10] < 5e-8,]
mrdat <- MendelianRandomization::mr_input(bx = dat$ldlcbeta,
                                          bxse = dat$ldlcse,
                                          by = dat$chdbeta,
                                          byse = dat$chdse,
                                          snps = dat$rsid)
egger_radial(r_input = mrdat, alpha = 0.05,
             weights = 1, summary = TRUE)
}
#> 
#> Radial MR-Egger
#> 
#>               Estimate Std. Error   t value     Pr(>|t|)
#> (Intercept) -0.4303552  0.3244151 -1.326557 1.884296e-01
#> Wj           0.6129126  0.1109369  5.524877 3.988423e-07
#> 
#> Residual standard error: 1.537 on 80 degrees of freedom
#> 
#> F-statistic: 30.52 on 1 and 80 DF, p-value: 3.99e-07
#> Q-Statistic for heterogeneity: 188.9285 on 80 DF , p-value: 8.445607e-11
#> 
#>  Outliers detected 
#>