Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup--------------------------------------------------------------------
library(summclust)
## ----example, warning = FALSE, message = FALSE, out.width="50%", out.height="50%"----
library(summclust)
library(lmtest)
library(haven)
url <- "http://www.stata-press.com/data/r9/nlswork.dta"
if (httr::http_error(url)) {
stop("No internet connection or data source broken. Sorry about that!")
return(NULL)
} else {
message("downloading the 'nlswork' dataset.")
nlswork <- read_dta(url)
}
# drop NAs at the moment
nlswork <- nlswork[, c("ln_wage", "grade", "age", "birth_yr", "union", "race", "msp", "ind_code")]
nlswork <- na.omit(nlswork)
lm_fit <- lm(
ln_wage ~ as.factor(grade) + as.factor(age) + as.factor(birth_yr) + union + race + msp,
data = nlswork)
summclust_res <- summclust(
obj = lm_fit,
cluster = ~ind_code,
params = c("msp", "union")
)
# CRV3-based inference - exactly matches output of summclust-stata
tidy(summclust_res)
summary(summclust_res)
## ---- warning = FALSE, message = FALSE, out.width="50%"-----------------------
plot(summclust_res)
## ---- warning = FALSE, message=FALSE------------------------------------------
library(lmtest)
vcov3J <-
vcov_CR3J(
lm_fit,
cluster = ~ ind_code
)
all.equal(
vcov3J,
summclust_res$vcov
)
df <- length(summclust_res$cluster) - 1
# with lmtest
CRV1 <- lmtest::coeftest(lm_fit, sandwich::vcovCL(lm_fit, ~ind_code), df = df)
CRV3 <- lmtest::coeftest(lm_fit, vcov3J, df = df)
CRV1[c("union", "race", "msp"),]
CRV3[c("union", "race", "msp"),]
stats::confint(CRV1)[c("union", "race", "msp"),]
stats::confint(CRV3)[c("union", "race", "msp"),]
## -----------------------------------------------------------------------------
library(fixest)
feols_fit <- feols(
ln_wage ~ i(grade) + i(age) + i(birth_yr) + union + race + msp,
data = nlswork
)
# Store vcov into the fixest object
feols_fit <- summary(
feols_fit,
vcov = vcov_CR3J(feols_fit, cluster = ~ ind_code)
)
# Now it just works with fixest functions
fixest::coeftable(feols_fit, keep = c("msp", "union", "race"))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.