Learn R Programming

sjPlot (version 2.0.0)

sjt.lm: Summary of linear regression as HTML table

Description

Summarizes (multiple) fitted linear models (coefficients, std. beta values etc.) as HTML table, or saves them as file. The fitted models may have different predictors, e.g. when comparing different stepwise fitted models. This function also supports panel models fitted with the plm-function from the plm-package and generalized least squares models fitted with the gls-function from the nlme-package.

Usage

sjt.lm(..., pred.labels = NULL, depvar.labels = NULL,
  remove.estimates = NULL, group.pred = TRUE, p.numeric = TRUE,
  emph.p = TRUE, p.kr = TRUE, separate.ci.col = TRUE, newline.ci = TRUE,
  show.est = TRUE, show.std = NULL, show.ci = TRUE, show.se = FALSE,
  show.header = FALSE, show.col.header = TRUE, show.r2 = TRUE,
  show.icc = FALSE, show.re.var = FALSE, show.fstat = FALSE,
  show.aic = FALSE, show.aicc = FALSE, show.dev = FALSE,
  string.pred = "Predictors", string.dv = "Dependent Variables",
  string.interc = "(Intercept)", string.obs = "Observations",
  string.est = "B", string.std = "std. Beta", string.ci = "CI",
  string.se = "std. Error", string.p = "p",
  ci.hyphen = " – ", minus.sign = "-", digits.est = 2,
  digits.std = 2, digits.p = 3, digits.ci = 2, digits.se = 2,
  digits.summary = 3, cell.spacing = 0.2, cell.gpr.indent = 0.6,
  CSS = NULL, encoding = NULL, file = NULL, use.viewer = TRUE,
  no.output = FALSE, remove.spaces = TRUE)

Arguments

Value

Invisibly returns
  • the web page style sheet (page.style),
  • the web page content (page.content),
  • the complete html-output (output.complete) and
  • the html-table with inline-css for use with knitr (knitr)
for further use.

Details

Concerning the show.std argument, show.std = "std" will print normal standardized estimates. For show.std = "std2", however, standardization of estimates follows http://www.stat.columbia.edu/~gelman/research/published/standardizing7.pdf{Gelman's (2008)} suggestion, rescaling the estimates by dividing them by two standard deviations instead of just one. Resulting coefficients are then directly comparable for untransformed binary predictors. This type of standardization uses the standardize-function from the arm-package. For backward compatibility reasons, show.std also may be a logical value; if TRUE, normal standardized estimates are printed (same effect as show.std = "std"). Use show.std = NULL (default) or show.std = FALSE, if standardized estimats should not be printed. Furthermore, see 'Details' in sjt.frq.

See Also

http://strengejacke.de/sjPlot/sjt.lm/{sjPlot manual: sjt.lm}

Examples

Run this code
# Now fit the models. Note that both models share the same predictors
# and only differ in their dependent variable. See examples of stepwise
# models below at the end.
library(sjmisc)
data(efc)

# fit first model
fit1 <- lm(barthtot ~ c160age + c12hour + c161sex + c172code, data = efc)
# fit second model
fit2 <- lm(neg_c_7 ~ c160age + c12hour + c161sex + c172code, data = efc)

# create and open HTML-table in RStudio Viewer Pane or web browser
# note that we don't need to specify labels for the predictors,
# because these are automatically read
sjt.lm(fit1, fit2)

# create and open HTML-table in RStudio Viewer Pane or web browser
# in the following examples, we set labels via argument
sjt.lm(fit1, fit2, 
       depvar.labels = c("Barthel-Index", "Negative Impact"),
       pred.labels = c("Carer's Age", "Hours of Care", 
                       "Carer's Sex", "Educational Status"))

# use vector names as labels
sjt.lm(fit1, fit2, pred.labels = "")

# show HTML-table, indicating p-values as asterisks
sjt.lm(fit1, fit2, show.std = TRUE, p.numeric = FALSE)

# create and open HTML-table in RStudio Viewer Pane or web browser,
# integrate CI in estimate column
sjt.lm(fit1, fit2, separate.ci.col = FALSE)

# show HTML-table, indicating p-values as numbers
# and printing CI in a separate column
sjt.lm(fit1, fit2, show.std = TRUE)

# show HTML-table, indicating p-values as stars
# and integrate CI in estimate column
sjt.lm(fit1, fit2, show.std = TRUE, ci.hyphen = " to ",
       minus.sign = "−", p.numeric = FALSE, 
       separate.ci.col = FALSE)

# ---------------------------------- 
# connecting two html-tables
# ---------------------------------- 
# fit two more models
fit3 <- lm(tot_sc_e ~ c160age + c12hour + c161sex + c172code, data=efc)
fit4 <- lm(e42dep ~ c160age + c12hour + c161sex + c172code, data=efc)

# create and save first HTML-table
part1 <- sjt.lm(fit1, fit2)

# create and save second HTML-table
part2 <- sjt.lm(fit3, fit4)

# browse temporary file
htmlFile <- tempfile(fileext=".html")
write(sprintf("<html><head>%s</head><body>%s<p></p>%s</body></html>",
              part1$page.style, part1$page.content, part2$page.content),
      file = htmlFile)
viewer <- getOption("viewer")
if (!is.null(viewer)) viewer(htmlFile) else utils::browseURL(htmlFile)

# ---------------------------------- 
# User defined style sheet
# ---------------------------------- 
sjt.lm(fit1, fit2, 
       CSS = list(css.table = "border: 2px solid;",
                  css.tdata = "border: 1px solid;",
                  css.depvarhead = "color:#003399;"))
                  
# ---------------------------------- 
# automatic grouping of predictors
# ---------------------------------- 
library(sjmisc)
data(efc)

# make education categorical
efc$c172code <- to_factor(efc$c172code)
    
# fit first model again (with c172code as factor)
fit1 <- lm(barthtot ~ c160age + c12hour + c172code + c161sex, data=efc)
# fit second model again (with c172code as factor)
fit2 <- lm(neg_c_7 ~ c160age + c12hour + c172code + c161sex, data=efc)

# plot models, but group by predictors
sjt.lm(fit1, fit2, group.pred = TRUE)

# ---------------------------------------- 
# compare models with different predictors
# ---------------------------------------- 
library(sjmisc)
data(efc)

# make education categorical
efc$c172code <- to_factor(efc$c172code)
# make education categorical
efc$e42dep <- to_factor(efc$e42dep)

# fit first model
fit1 <- lm(neg_c_7 ~ c160age + c172code + c161sex, data = efc)
# fit second model
fit2 <- lm(neg_c_7 ~ c160age + c172code + c161sex + c12hour, data = efc)
# fit second model
fit3 <- lm(neg_c_7 ~ c160age + c172code + e42dep + tot_sc_e, data = efc)

sjt.lm(fit1, fit2, fit3)

# ---------------------------------------- 
# compare models with different predictors
# and grouping
# ---------------------------------------- 
# make cope-index categorical
efc$c82cop1 <- to_factor(efc$c82cop1)
# fit another model
fit4 <- lm(neg_c_7 ~ c160age + c172code + e42dep + tot_sc_e + c82cop1, 
           data = efc)

sjt.lm(fit1, fit2, fit4, fit3)

# show standardized beta only
sjt.lm(fit1, fit2, fit4, fit3, show.est = FALSE, show.std = TRUE,
       show.aic = TRUE, show.fstat = TRUE)

# -----------------------------------------------------------
# color insanity. just to show that each column has an own
# CSS-tag, so - depending on the stats and values you show -
# you can define column spaces / margins, border etc. to
# visually separate your models in the table
# -----------------------------------------------------------
sjt.lm(fit1, fit2, fit4, fit3, show.std = TRUE, show.aic = TRUE,
       show.fstat = TRUE, show.se = TRUE,
       CSS = list(css.modelcolumn1 = 'color:blue;',
                  css.modelcolumn2 = 'color:red;',
                  css.modelcolumn3 = 'color:green;',
                  css.modelcolumn4 = 'color:#ffff00;',
                  css.modelcolumn5 = 'color:#777777;',
                  css.modelcolumn6 = 'color:#3399cc;'))

sjt.lm(fit1, fit2, fit4, fit3, show.est = FALSE, show.std = TRUE,
       p.numeric = FALSE, group.pred = FALSE,
       CSS = list(css.modelcolumn4 = 'border-left:1px solid black;',
                  css.modelcolumn5 = 'padding-right:50px;'))

Run the code above in your browser using DataLab