umxTwoStage {umx} | R 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,
std = FALSE,
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. |
std |
Standardize the manifests before running model (default is FALSE) |
subset |
(optional) vector specifying a subset of observations to be used in fitting the model. |
contrasts |
An optional list (not supported) |
name |
The model name (default is "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:
Value
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. doi:10.1681/ASN.2016010098
See Also
Other Super-easy helpers:
umxEFA()
,
umx
Examples
## Not run:
# ====================================
# = Mendelian Randomization analysis =
# ====================================
library(umx)
df = umx_make_MR_data(10e4)
m1 = umxMR(Y ~ X, instruments = ~ qtl, data = df)
parameters(m1)
plot(m1, means = FALSE, min="") # help DiagrammR 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)