umxTwoStage: Build a SEM implementing the instrumental variable design

View source: R/umx_build_high_level_models.R

umxTwoStageR Documentation

Build a SEM implementing the instrumental variable design

Description

umxMR (umxTwoStage) implements a Mendelian randomization or instrumental variable Structural Equation Model. For ease of learning, the parameters follow the tsls() function in the sem package.

Usage

umxTwoStage(
  formula = Y ~ X,
  instruments = ~qtl,
  data,
  subset,
  contrasts = NULL,
  name = "IV_model",
  tryHard = c("no", "yes", "ordinal", "search"),
  ...
)

Arguments

formula

The structural equation to be estimated (default = Y ~ X). A constant is implied if not explicitly deleted.

instruments

A one-sided formula specifying instrumental variables (default = qtl).

data

Frame containing the variables in the model.

subset

(optional) vector specifying a subset of observations to be used in fitting the model.

contrasts

an optional list (not supported)

name

for the model (default = "IVmodel")

tryHard

Default ('no') uses normal mxRun. "yes" uses mxTryHard. Other options: "ordinal", "search"

...

arguments to be passed along. (not supported)

Details

The example is a Mendelian Randomization analysis showing the utility of SEM over two-stage regression.

The following figure shows how the MR model appears as a path diagram:

Figure: Mendelian Randomisation analysis.png

Value

  • mxModel()

References

  • Fox, J. (1979) Simultaneous equation models and two-stage least-squares. In Schuessler, K. F. (ed.) Sociological Methodology, Jossey-Bass.

  • Greene, W. H. (1993) Econometric Analysis, Second Edition, Macmillan.

  • Sekula, P., Del Greco, M. F., Pattaro, C., & Kottgen, A. (2016). Mendelian Randomization as an Approach to Assess Causality Using Observational Data. Journal of the American Society of Nephrology, 27), 3253-3265. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1681/ASN.2016010098")}

See Also

  • umx_make_MR_data(), umxDiffMZ(), umxDoC(), umxDiscTwin()

Other Super-easy helpers: umxEFA(), umx

Examples

## Not run: 
library(umx)


# ====================================
# = Mendelian Randomization analysis =
# ====================================

df = umx_make_MR_data(10e4)
m1 = umxMR(Y ~ X, instruments = ~ qtl, data = df)
parameters(m1)
plot(m1, means = FALSE, min="") # help DiagrammaR layout the plot.
m2 = umxModify(m1, "qtl_to_X", comparison=TRUE, tryHard="yes", name="QTL_affects_X") # yip
m3 = umxModify(m1, "X_to_Y"  , comparison=TRUE, tryHard="yes", name="X_affects_Y") # nope
plot(m3, means = FALSE)

# Errant analysis using ordinary least squares regression (WARNING this result is CONFOUNDED!!)
m1 = lm(Y ~ X    , data = df); coef(m1) # incorrect .35 effect of X on Y
m1 = lm(Y ~ X + U, data = df); coef(m1) # Controlling U reveals the true 0.1 beta weight


df = umx_make_MR_data(10e4) 
m1 = umxMR(Y ~ X, instruments = ~ qtl, data = df)
coef(m1)

# ======================
# = Now with sem::tsls =
# ======================
# library(sem) # may require you to install X11
m2 = sem::tsls(formula = Y ~ X, instruments = ~ qtl, data = df)
coef(m2)

# Try with missing value for one subject: A benefit of the FIML approach in OpenMx.
m3 = tsls(formula = Y ~ X, instruments = ~ qtl, data = (df[1, "qtl"] = NA))

## End(Not run)

umx documentation built on Nov. 17, 2023, 1:07 a.m.