View source: R/postestimate_test_hausman.R
testHausman | R Documentation |
experimental
testHausman( .object = NULL, .eval_plan = c("sequential", "multicore", "multisession"), .handle_inadmissibles = c("drop", "ignore", "replace"), .R = 499, .resample_method = c("bootstrap", "jackknife"), .seed = NULL )
.object |
An R object of class cSEMResults resulting from a call to |
.eval_plan |
Character string. The evaluation plan to use. One of "sequential", "multicore", or "multisession". In the two latter cases all available cores will be used. Defaults to "sequential". |
.handle_inadmissibles |
Character string. How should inadmissible results
be treated? One of "drop", "ignore", or "replace". If "drop", all
replications/resamples yielding an inadmissible result will be dropped
(i.e. the number of results returned will potentially be less than |
.R |
Integer. The number of bootstrap replications. Defaults to |
.resample_method |
Character string. The resampling method to use. One of: "none", "bootstrap" or "jackknife". Defaults to "none". |
.seed |
Integer or |
Calculates the regression-based Hausman test to be used to compare OLS to 2SLS estimates or 2SLS to 3SLS estimates. See e.g., \insertCiteWooldridge2010;textualcSEM (pages 131 f.) for details.
The function is somewhat experimental. Only use if you know what you are doing.
csem()
, cSEMResults
### Example from Dijkstra & Hensler (2015) ## Prepartion (values are from p. 15-16 of the paper) Lambda <- t(kronecker(diag(6), c(0.7, 0.7, 0.7))) Phi <- matrix(c(1.0000, 0.5000, 0.5000, 0.5000, 0.0500, 0.4000, 0.5000, 1.0000, 0.5000, 0.5000, 0.5071, 0.6286, 0.5000, 0.5000, 1.0000, 0.5000, 0.2929, 0.7714, 0.5000, 0.5000, 0.5000, 1.0000, 0.2571, 0.6286, 0.0500, 0.5071, 0.2929, 0.2571, 1.0000, sqrt(0.5), 0.4000, 0.6286, 0.7714, 0.6286, sqrt(0.5), 1.0000), ncol = 6) ## Create population indicator covariance matrix Sigma <- t(Lambda) %*% Phi %*% Lambda diag(Sigma) <- 1 dimnames(Sigma) <- list(paste0("x", rep(1:6, each = 3), 1:3), paste0("x", rep(1:6, each = 3), 1:3)) ## Generate data dat <- MASS::mvrnorm(n = 500, mu = rep(0, 18), Sigma = Sigma, empirical = TRUE) # empirical = TRUE to show that 2SLS is in fact able to recover the true population # parameters. ## Model to estimate model <- " ## Structural model (nonrecurisve) eta5 ~ eta6 + eta1 + eta2 eta6 ~ eta5 + eta3 + eta4 ## Measurement model eta1 =~ x11 + x12 + x13 eta2 =~ x21 + x22 + x23 eta3 =~ x31 + x32 + x33 eta4 =~ x41 + x42 + x43 eta5 =~ x51 + x52 + x53 eta6 =~ x61 + x62 + x63 " library(cSEM) ## Estimate res_ols <- csem(dat, .model = model, .approach_paths = "OLS") sum_res_ols <- summarize(res_ols) # Note: For the example the model-implied indicator correlation is irrelevant # the warnings can be ignored. res_2sls <- csem(dat, .model = model, .approach_paths = "2SLS", .instruments = list("eta5" = c('eta1','eta2','eta3','eta4'), "eta6" = c('eta1','eta2','eta3','eta4'))) sum_res_2sls <- summarize(res_2sls) # Note that exogenous constructs are supplied as instruments for themselves! ## Test for endogeneity test_ha <- testHausman(res_2sls, .R = 200) test_ha
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.