Set of functions to directly extract some commonly used statistics, like the p-value or
the table of coefficients, from estimations. This was first implemented for
fixest estimations, but has some support for other models.
# S3 method for class 'fixest'
coeftable(
object,
vcov = NULL,
ssc = NULL,
cluster = NULL,
keep = NULL,
drop = NULL,
order = NULL,
list = FALSE,
...
)
# S3 method for class 'fixest'
se(
object,
vcov = NULL,
ssc = NULL,
cluster = NULL,
keep = NULL,
drop = NULL,
order = NULL,
...
)
# S3 method for class 'fixest'
tstat(
object,
vcov = NULL,
ssc = NULL,
cluster = NULL,
keep = NULL,
drop = NULL,
order = NULL,
...
)
# S3 method for class 'fixest'
pvalue(
object,
vcov = NULL,
ssc = NULL,
cluster = NULL,
keep = NULL,
drop = NULL,
order = NULL,
...
)A fixest object. For example an estimation obtained from feols.
A function to be used to compute the standard-errors of each fixest object. You can
pass extra arguments to this function using the argument .vcov_args. See the example.
An object of class ssc.type obtained with the function ssc. Represents
how the degree of freedom correction should be done.You must use the function ssc
for this argument. The arguments and defaults of the function ssc are:
adj = TRUE, fixef.K="nested", cluster.adj = TRUE, cluster.df = "min",
t.df = "min", fixef.force_exact=FALSE). See the help of the function ssc for details.
Tells how to cluster the standard-errors (if clustering is requested). Can
be either a list of vectors, a character vector of variable names, a formula or an
integer vector. Assume we want to perform 2-way clustering over var1 and var2 contained
in the data.frame base used for the estimation. All the following cluster arguments
are valid and do the same thing: cluster = base[, c("var1, "var2")],
cluster = c("var1, "var2"), cluster = ~var1+var2. If the two variables were used as
clusters in the estimation, you could further use cluster = 1:2 or leave it blank
with se = "twoway" (assuming var1 [resp. var2] was the 1st [resp. 2nd] cluster).
Character vector. This element is used to display only a subset of variables. This
should be a vector of regular expressions (see base::regex help for more info). Each
variable satisfying any of the regular expressions will be kept. This argument is applied post
aliasing (see argument dict). Example: you have the variable x1 to x55 and want to display
only x1 to x9, then you could use keep = "x[[:digit:]]$". If the first character is an
exclamation mark, the effect is reversed (e.g. keep = "!Intercept" means: every variable that
does not contain “Intercept” is kept). See details.
Character vector. This element is used if some variables are not to be displayed.
This should be a vector of regular expressions (see base::regex help for more info). Each
variable satisfying any of the regular expressions will be discarded. This argument is applied
post aliasing (see argument dict). Example: you have the variable x1 to x55 and want to
display only x1 to x9, then you could use drop = "x[[:digit:]]{2}". If the first character
is an exclamation mark, the effect is reversed (e.g. drop = "!Intercept" means: every variable
that does not contain “Intercept” is dropped). See details.
Character vector. This element is used if the user wants the variables to be
ordered in a certain way. This should be a vector of regular expressions (see base::regex
help for more info). The variables satisfying the first regular expression will be placed first,
then the order follows the sequence of regular expressions. This argument is applied post
aliasing (see argument dict). Example: you have the following variables: month1 to month6,
then x1 to x5, then year1 to year6. If you want to display first the x's, then the
years, then the months you could use: order = c("x", "year"). If the first character is an
exclamation mark, the effect is reversed (e.g. order = "!Intercept" means: every variable that
does not contain “Intercept” goes first). See details.
Logical, default is FALSE. If TRUE, then a nested list is returned, the
first layer is accessed with the coefficients names; the second layer with the
following values: coef, se, tstat, pvalue. Note that the variable "(Intercept)"
is renamed into "constant".
Other arguments to be passed to summary.fixest.
Returns a table of coefficients, with in rows the variables and four columns: the estimate, the standard-error, the t-statistic and the p-value.
If list = TRUE then a nested list is returned, the first layer is accessed with
the coefficients names; the second layer with the following values:
coef, se, tstat, pvalue. For example, with res = coeftable(est, list = TRUE)
you can access the SE of the coefficient x1 with res$x1$se; and its
coefficient with res$x1$coef, etc.
This set of tiny functions is primarily constructed for fixest estimations.
se(fixest): Extracts the standard-error of an estimation
tstat(fixest): Extracts the t-statistics of an estimation
pvalue(fixest): Extracts the p-value of an estimation
# Some data and estimation
data(trade)
est = fepois(Euros ~ log(dist_km) | Origin^Product + Year, trade)
#
# Coeftable/se/tstat/pvalue
#
# Default is clustering along Origin^Product
coeftable(est)
#> Estimate Std. Error z value Pr(>|z|)
#> log(dist_km) -1.023957 0.04728994 -21.65275 5.725404e-104
#> attr(,"type")
#> [1] "Clustered (Origin^Product)"
se(est)
#> log(dist_km)
#> 0.04728994
tstat(est)
#> log(dist_km)
#> -21.65275
pvalue(est)
#> log(dist_km)
#> 5.725404e-104
# Now with two-way clustered standard-errors
# and using coeftable()
coeftable(est, cluster = ~Origin + Product)
#> Estimate Std. Error z value Pr(>|z|)
#> log(dist_km) -1.023957 0.0906375 -11.29728 1.35342e-29
#> attr(,"type")
#> [1] "Clustered (Origin & Product)"
se(est, cluster = ~Origin + Product)
#> log(dist_km)
#> 0.0906375
pvalue(est, cluster = ~Origin + Product)
#> log(dist_km)
#> 1.35342e-29
tstat(est, cluster = ~Origin + Product)
#> log(dist_km)
#> -11.29728
# Or you can cluster only once:
est_sum = summary(est, cluster = ~Origin + Product)
coeftable(est_sum)
#> Estimate Std. Error z value Pr(>|z|)
#> log(dist_km) -1.023957 0.0906375 -11.29728 1.35342e-29
#> attr(,"type")
#> [1] "Clustered (Origin & Product)"
se(est_sum)
#> log(dist_km)
#> 0.0906375
tstat(est_sum)
#> log(dist_km)
#> -11.29728
pvalue(est_sum)
#> log(dist_km)
#> 1.35342e-29
# You can use the arguments keep, drop, order
# to rearrange the results
base = iris
names(base) = c("y", "x1", "x2", "x3", "species")
est_iv = feols(y ~ x1 | x2 ~ x3, base)
tstat(est_iv, keep = "x1")
#> x1
#> 7.960735
coeftable(est_iv, keep = "x1|Int")
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 2.438955 0.25349903 9.621160 2.688392e-17
#> x1 0.559183 0.07024264 7.960735 4.261663e-13
coeftable(est_iv, order = "!Int")
#> Estimate Std. Error t value Pr(>|t|)
#> fit_x2 0.4509765 0.01794806 25.126759 4.556383e-55
#> x1 0.5591830 0.07024264 7.960735 4.261663e-13
#> (Intercept) 2.4389548 0.25349903 9.621160 2.688392e-17
#
# Using lists
#
# Returning the coefficients table as a list can be useful for quick
# reference in markdown documents.
# Note that the "(Intercept)" is renamed into "constant"
res = coeftable(est_iv, list = TRUE)
# coefficient of the constant:
res$constant$coef
#> Estimate
#> 2.438955
# pvalue of x1
res$x1$pvalue
#> Pr(>|t|)
#> 4.261663e-13