Simple utility to extract the degrees of freedom from a fixest
estimation.
Usage
degrees_freedom(
x,
type,
vars = NULL,
vcov = NULL,
se = NULL,
cluster = NULL,
ssc = NULL,
stage = 2
)
degrees_freedom_iid(x, type)
Arguments
- x
A
fixest
estimation.- type
Character scalar, equal to "k", "resid", "t". If "k", then the number of regressors is returned. If "resid", then it is the "residuals degree of freedom", i.e. the number of observations minus the number of regressors. If "t", it is the degrees of freedom used in the t-test. Note that these values are affected by how the VCOV of
x
is computed, in particular when the VCOV is clustered.- vars
A vector of variable names, of the regressors. This is optional. If provided, then
type
is set to 1 by default and the number of regressors contained invars
is returned. This is only useful in the presence of collinearity and we want a subset of the regressors only. (Mostly for internal use.)- vcov
Versatile argument to specify the VCOV. In general, it is either a character scalar equal to a VCOV type, either a formula of the form:
vcov_type ~ variables
. The VCOV types implemented are: "iid", "hetero" (or "HC1"), "cluster", "twoway", "NW" (or "newey_west"), "DK" (or "driscoll_kraay"), and "conley". It also accepts object fromvcov_cluster
,vcov_NW
,NW
,vcov_DK
,DK
,vcov_conley
andconley
. It also accepts covariance matrices computed externally. Finally it accepts functions to compute the covariances. See thevcov
documentation in the vignette.- se
Character scalar. Which kind of standard error should be computed: “standard”, “hetero”, “cluster”, “twoway”, “threeway” or “fourway”? By default if there are clusters in the estimation:
se = "cluster"
, otherwisese = "iid"
. Note that this argument is deprecated, you should usevcov
instead.- cluster
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
andvar2
contained in the data.framebase
used for the estimation. All the followingcluster
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 fixed-effects in the estimation, you can leave it blank withvcov = "twoway"
(assumingvar1
[resp.var2
] was the 1st [resp. 2nd] fixed-effect). You can interact two variables using^
with the following syntax:cluster = ~var1^var2
orcluster = "var1^var2"
.- ssc
An object of class
ssc.type
obtained with the functionssc
. Represents how the degree of freedom correction should be done.You must use the functionssc
for this argument. The arguments and defaults of the functionssc
are:adj = TRUE
,fixef.K="nested"
,cluster.adj = TRUE
,cluster.df = "min"
,t.df = "min"
,fixef.force_exact=FALSE)
. See the help of the functionssc
for details.- stage
Either 1 or 2. Only concerns IV regressions, which stage to look at.
The type of VCOV can have an influence on the degrees of freedom. In particular, when the VCOV is clustered, the DoF returned will be in accordance with the way the small sample correction was performed when computing the VCOV. That type of value is in general not what we have in mind when we think of "degrees of freedom". To obtain the ones that are more intuitive, please use
degrees_freedom_iid
instead.
Examples
# First: an estimation
base = iris
names(base) = c("y", "x1", "x2", "x3", "species")
est = feols(y ~ x1 + x2 | species, base)
# "Normal" standard-errors (SE)
est_standard = summary(est, se = "st")
# Clustered SEs
est_clustered = summary(est, se = "clu")
# The different degrees of freedom
# => different type 1 DoF (because of the clustering)
degrees_freedom(est_standard, type = "k")
#> [1] 5
degrees_freedom(est_clustered, type = "k") # fixed-effects are excluded
#> [1] 3
# => different type 2 DoF (because of the clustering)
degrees_freedom(est_standard, type = "resid") # => equivalent to the df.residual from lm
#> [1] 145
degrees_freedom(est_clustered, type = "resid")
#> [1] 147