cluster: Either i) a character vector giving the names of the variables onto which to cluster, or ii) a formula giving those names, or iii) a vector/list/data.frame giving the hard values of the clusters. Note that in cases i) and ii) the variables are fetched directly in the data set used for the estimation.
ssc: An object returned by the function ssc. It specifies how to perform the small sample correction.
vcov_fix: Logical scalar, default is TRUE. If the VCOV ends up not being positive definite, whether to "fix" it using an eigenvalue decomposition (a la Cameron, Gelbach & Miller 2011).
Returns
If the first argument is a fixest object, then a VCOV is returned (i.e. a symmetric matrix).
If the first argument is not a fixest object, then a) implicitly the arguments are shifted to the left (i.e. vcov_cluster(~var1 + var2) is equivalent to vcov_cluster(cluster = ~var1 + var2)) and b) a VCOV-request is returned and NOT a VCOV. That VCOV-request can then be used in the argument vcov of various fixest
functions (e.g. vcov.fixest or even in the estimation calls).
Examples
base = iris
names(base)= c("y","x1","x2","x3","species")base$clu = rep(1:5,30)est = feols(y ~ x1, base)# VCOV: using a formula giving the name of the clustersvcov_cluster(est,~species + clu)# works as well with a character vectorvcov_cluster(est, c("species","clu"))# you can also combine the two with '^'vcov_cluster(est,~species^clu)## Using VCOV requests## per se: pretty useless...vcov_cluster(~species)# ...but VCOV-requests can be used at estimation time:# it may be more explicit than...feols(y ~ x1, base, vcov = vcov_cluster("species"))# ...the equivalent, built-in way:feols(y ~ x1, base, vcov =~species)# The argument vcov does not accept hard values,# so you can feed them with a VCOV-request:feols(y ~ x1, base, vcov = vcov_cluster(rep(1:5,30)))
References
Cameron AC, Gelbach JB, Miller DL (2011). "Robust Inference with Multiway Clustering." Journal of Business & Economic Statistics, 29(2), 238-249. doi:10.1198/jbes.2010.07136.