Search code examples
rstargazer

Multiply coefficients with standard deviation


In R, the stargazer package offers the possibility to apply functions to the coefficients, standard errors, etc:

dat <- read.dta("http://www.ats.ucla.edu/stat/stata/dae/nb_data.dta")
dat <- within(dat, {
    prog <- factor(prog, levels = 1:3, labels = c("General", "Academic", "Vocational"))
    id <- factor(id)
})
m1 <- glm.nb(daysabs ~ math + prog, data = dat)
transform_coef <- function(x) (exp(x) - 1)
stargazer(m1, apply.coef=transform_coef)

How can I apply a function where the factor with which I multiply depends on the variable, like the standard deviation of that variable?


Solution

  • This may not be exactly what you hoped for, but you can transform the coefficients, and give stargazer a custom list of coefficients. For example, if you would like to report the coefficient times the standard deviation of each variable, the following extension of your example could work:

    library(foreign)
    library(stargazer)
    library(MASS)
    
    dat <- read.dta("http://www.ats.ucla.edu/stat/stata/dae/nb_data.dta")
    dat <- within(dat, {
      prog <- factor(prog, levels = 1:3, labels = c("General", "Academic", "Vocational"))
      id <- factor(id)
    })
    m1 <- glm.nb(daysabs ~ math + prog, data = dat)
    
    # Store coefficients (and other coefficient stats)
    s1 <- summary(m1)$coefficients
    
    # Calculate standard deviations (using zero for the constant)
    math.sd  <- sd(dat$math)
    acad.sd  <- sd(as.numeric(dat$prog == "Academic"))
    voc.sd   <- sd(as.numeric(dat$prog == "Vocational"))
    int.sd   <- 0
    
    # Append standard deviations to stored coefficients
    StdDev   <- c(int.sd, math.sd, acad.sd, voc.sd)
    s1       <- cbind(s1, StdDev)
    
    # Store custom list
    new.coef <- s1[ , "Estimate"] * s1[ , "StdDev"]
    
    # Output
    stargazer(m1, coef = list(new.coef))
    

    You may want to consider a couple of issues outside your original question about outputting coefficients in stargazer. Should you report the intercept when multiplying times the standard deviation? Will your standard errors and inference be the same with this transformation?