did2s <1.0.2the new default VCOV isiid for allestimations. To change the default to the way it was, placesetFixest_vcov(all = "cluster", no_FE = "iid") in your.Rprofile.
the functiondof is removed (it was deprecated andreplaced with the functionssc since 2021)
inetable, the argumentreplace = TRUEby default (it wasFALSE)
the arguments of the functionssc are renamed:
adj =>K.adjfixef.K =>K.fixeffixef.force_exact =>K.exactcluster.adj =>G.adjcluster.df =>G.dfRetro compatibility is ensured. Thanks to Kyle Butts and GrantMcDermott for the brainstorm!
in the functionscoefplot andiplot:the argumentobject is removed, now all models need to bepassed in.... The dots do not accept arguments to summarymethods any more. Retro-compatibility partly ensured.
in all estimations, now the default is to remove all observationsthat are perfectly fit by the fixed-effects (this includes thesingletons). To go back to the previous case, use the argumentfixef.rm="infinite_coef", or add the following command inyour.Rprofile:setFixest_estimation(fixef.rm = "infinite_coef").
the argumentfixef.rm is modified, the acceptedvalues now become “singletons”, “infinite_coef”, “perfect_fit” (newdefault), or “none” (formerly it was “singleton”, “perfect”, “both”,“none”). It leads to the removal of i) fixed-effects associated to asingle observation, ii) fixed-effects fitting perfectly the outcome andleading to infinite coefficients (in GLM families, e.g. think to only 0outcomes in a Poisson estimation), iii) the observations removed in thefirst two cases, iv) no observations is removed. In any case: the pointestimates (coefficients) do not vary depending on the value of thisargument. The inference on the other hand may vary (that is thestandard-errors of the coefficients may change).
new VCOVs: heteroskedaticity-robust HC2 and HC3 VCOVs availablethanks to
new function:sparse_model_matrix which createssparse model matrices from regression objects in a memory-efficient way.Contribution by
est=feols(mpg~ drat| cyl, mtcars)sparse_model_matrix(est,type ="lhs")#> 32 x 1 sparse Matrix of class "dgCMatrix"#> mpg#> [1,] 21.0#> [2,] 21.0#> [3,] 22.8sparse_model_matrix(est,type =c("rhs","fixef"))#> 32 x 4 sparse Matrix of class "dgCMatrix"#> drat cyl::4 cyl::6 cyl::8#> [1,] 3.90 . 1 .#> [2,] 3.90 . 1 .#> [3,] 3.85 1 . .# Or you can pass a (linear) formulasparse_model_matrix(mpg~i(vs)| gear^cyl,data = mtcars,type =c("rhs","fixef"))#> 32 x 10 sparse Matrix of class "dgCMatrix"#> [[ suppressing 10 column names ‘vs::0’, ‘vs::1’, ‘gear^cyl::4_6’ ... ]]#>#> [1,] 1 . 1 . . . . . . .#> [2,] 1 . 1 . . . . . . .#> [3,] . 1 . 1 . . . . . .# we regress `Ozone` and `Temp` on all other variables but `Day`:feols(c(Ozone, Temp)~regex("!Day"), airquality)#>NOTE: 42 observations removed because of NA values (RHS: 42).#> |-> this msg only concerns the variables common to all estimations#> x.1 x.2#> Dependent Var.: Ozone Temp#>#> Constant -58.05* (22.97) 55.93*** (4.405)#> Solar.R 0.0496* (0.0235) 0.0114 (0.0070)#> Wind -3.317*** (0.6458) -0.1925 (0.2126)#> Temp 1.871*** (0.2736)#> Month -2.992. (1.516) 2.047*** (0.4108)#> Ozone 0.1636*** (0.0239)#> _______________ __________________ __________________#> S.E. type IID IID#> Observations 111 111#> R2 0.61986 0.59476#> Adj. R2 0.60552 0.57947#> ---#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1more notes and messages better fit the user screen
the functionscoefplot andiplot nowaccept models passsed via..., aligning their design to theone ofetable
the functionscoefplot andiplot nowaccept the argumentvcov. The argumentvcovcan be a list of validvcov values, in which case it willbe recycled across the models.
all estimations gain the two arguments:panel.time.step andpanel.duplicate.method tohandle non standard lags
incoefplot: the argumentdict nowupdates the entries in the global dictionnary (instead of replacingthem)
improve the display of the numbers infitstat
use perl regular expressions (instead of standard RE) in allinstances of the argumentskeep,drop,order
when usingfeols estimations withsunab(att = TRUE), nowiplot reports the graphof the treatment effect aggregated by periods (i.e. as ifatt = FALSE)
in estimations,subset now accepts negativeintegers
functionxpd gains the argumentadd.after_pipe to add components to the formula after apipe (|)
theupdate.fixest andupdate.fixest_multi now handle the formula updates muchbetter, in particular for IVs
update.(fixest|fixest_multi) gain the new argumentfml which can override thefml.updateargument
update.(fixest|fixest_multi) gain the new argumentuse_calling_env which default toTRUE, so thatfixest objects created within a function can be updatedwithout problem even outside of the function
greatly improve theformula.fixest method, with nowa wide range of possibilities to compose the resulting formula
informula.fixest, add the new argumentsfml.update andfml.build to easily modify theformula of the original object
add new methodformula.fixest_multi
complete rewrite of the internal algorithm turning thefixed-effects into indexes, it is now: i) faster (much faster whencombining mutliple fixed effects), ii) more consistent for charactervectors
new algorithm removing the fixed-effects from the estimation dueto singletons or perfect fits: now the algorithm is recursive
the methodmodel.matrix gains the argumentsample which can be equal to “estimation” or “original”.The argumentna.rm is now more coherent as it does not domore than what is suggests (as was the case earlier).
the functiondemean gains the argumentsample to decide whether to get the demeaned variables: i)for only for the observations used in the estimation, or ii) for all theobservations of the original data set.
add a new vignette on collinearity
new data setbase_pub, based on publication datafrom the Microsoft Academic Graph, used to illustrate the newvignette
invcov: if the VCOV fails to be positivesemi-definite (having negative eigenvalues), a warning is reported. Thisshould be relatively rare and typically only very slightly changes thestandard errors.
default for the argumentcollin.tol increased from1e-10 to1e-9.
requires stringmagic >= 1.2.0
add checks in IVs as regards the number of instruments andendogenous variables
attribute renaming: attribute of the VCOVdof.Kbecomesdf.K (to be consistent with to other attributedf.t)
in IV estimations, the R2 reported in the second stage is basedon the residuals of the second stage estimation andnotthe corrected residuals (using the original variables with the secondstage coefficients)
slight performance increase for estimations with singlevariables
in multiple estimations for which, after NA removal, thevariables in the step-wise part are vectors of only 0s can now beestimated. The stepwise part is simply ignored. Feature request by
add explicit linkage to thenumDeriv package in themanual to fix CRAN notes
add suggestions when some variables are misspelled inestimations
substantially improve the robustness (and speed) of the internalalgorithms handling formulas
in all estimations: the argumentcombine.quick isrenamed intofixef.keep_names
the removal of the fixed-effects due to infinite coefficients isnow triggered more accurately for any GLM family (even uncommonones)
add a section in the documentation documenting the Latexdepdencies
setFixest_etable now accepts the argumentsdiv.class andsignif.code
when a file is created and the containing folders do notexist:
create_dirs (default isFALSE) creates all containing directorieswhenmarkdown = TRUE, the images are directlyinserted in the<img> container as URI, avoiding anyissue with paths
the caching of table images is now automatically enabled
argumenttitle becomescaption,retro-compatibility is ensured
argumentcaption (formerlytitle) nowaccepts character vectors, which become concatenated
argumentcoefstat gains the optionpvalue
default values forfitstat set insetFixest_etable can be accessed with a'.'
fix bug inpredict when the data of origin wasmissing. Thanks to
fix bug when several scalars to be evaluated from the callingenvironment are included in the formula of the regression
fix bug when: using IV, interpolating the LHS variable,requesting multiple LHS, using a RHS formula as interpolated variable.Reported by@sumtxt,#522
fix buglean = TRUE: remove a potentially large acopy of environments when an estimation was called within a function.Thanks to
fix bug inetable: some arguments globally set werewrongly reset when calling the function. Reported by
fix documentation bugs. Reported by
fix bug inetable:drop.section was notcatching the optioncoef. Thanks to
fix bug inetable whenview = TRUE, nowit displays properly in VSCode
fix bug inetable preventing the use of the argumentexport whenmarkdown = TRUE within a Rmddocument
fix bug regarding panels in estimations, the formatpanel.id = "id,time" did not work. Now fixed. Reported by@nataliamush,#537
fig bug preventing the use of the argumentvcov infitstat for the Wald statistics
fix bug incoeftable.default not catching the rightcoefficients matrix
fix bug inetable preventing the user to modify thefitstat argument if it was previously set withsetFixest_etable
fix bug inpredict.fixest when there is anestimation with only the constant. Reported by
fix bug inpredict.fixest wheninterval != "none" andsample = "estimation",now the prediction only applies to the estimation sample and not theoriginal sample. Reported by Alex Fisher, #549
fix bug when a customvcov is passed tofixest::feols with thefixest:: prefix. Thanksto Kyle Butts, #540
fix bug R crashing when data set with 0-observation was providedby the user. Reported by
fix bug which included the intercept in stepwise estimation evenwhen the user asked for no intercept
fix various bugs incoefplot/iplot.Among others, the one reported by
fix bug regarding the display of the x-axis in coefplot
fix bug preventing to jointly use the argumentssubset andfixef. Reported by
fix bug preventing the display of named custom vcov inetable
fix bug inetable whenheaders/extralines receive a list of numericand character values at the same time. Reported by
fix fatal crash infeols when: i) multipleestimations were used, ii) samples were different across estimations,iii) singletons were removed. Reported by
fix bug RMSE with weights, reported by
stringmagic version >= 1.1.2 to fix severalmajor bugs affecting R versions <= 4.1.2fix bug leading to CRAN error (in IV with fixed-effects and noexogenous variable)
fix display bug in errors regarding lead/lag problems in fixestestimations.
fix bug when arguments lead or lag in functions l/f were givenexplicitly in fixest estimations. Reported by
remove the diplay ofTRUE when creating lags/leadsindata.table.
fix bug when creating lead/lags indata.tables andthe name of the data set was equal to the name of a function. Reportedby@kmfrick,#500
fix several bugs affecting R version 3.5.0
fix bug inetable when variables appeared in thestatistics and those variables contained invalid Latex characters. PR by@MaelAstruc,#508
fix formatting for coefficients/statistics equal to 0. Reportedby@MaelAstruc,#504
.vcov has been removed. It was present forhistorical reasons, and is removed to increase code clarity. Old codewill still work with a warning to use thevcov argumentinsteadthe demeaning algorithm has been reworked! Thecode has been condensed and four new parameters have been introduced tocontrol the details of how the algorithm works. The new default valuesshould lead to quicker convergence in general (for difficult cases). Thenew functiondemeaning_algo gives the user fine controlover the internal parameters of the algorithm.
all estimation functions gain the argumentdata.save. IfTRUE, the data set used for theestimation is saved in the returned object. This ensures the consistencyof post-processing (like fit statistics, predict, update, etc) even ifthe original data has been modified in the meantime. Suggestion byVincent Arel-Bundock, #340
new functionfixest_data to access the original dataset used at estimation-time. Suggestion by Kyle Butts, #465
new methoddf.residual.fixest. Suggestion by
now thevcov method inherits the small samplecorrection and type of VCOV used in the original estimation. Thanks to@mgoplerud,#356
new functionn_models to identify the length of adimension of a multiple estimation. This facilitates the manipulation ofmultiple estimations programmatically:
base=setNames(iris,c("y","x1","x2","x3","species"))est=feols(y~csw(x1, x2, x3), base,fsplit =~species)# We can obtain the unique number of RHSs/samples with `n_models`n_models(est,rhs =TRUE)#> [1] 3n_models(est,sample =TRUE)#> [1] 4all_tables=list()for(iin1:n_models(est,sample =TRUE)){ all_tables[[i]]=etable(est[sample = i])}do.call(rbind, all_tables)# ... the output is too long to be displayed herefixest is now compatible withemmeansthanks to the contribution of Russell Lenth (#454).fix bug when the covariance matrix wasvery ill-defined.Thanks to Gianluca Russo.
pass correctlynthreads tosummary whenthe VCOV is provided at estimation time. Thanks to
fix bug in the functiondemean when a formula ispassed as argument and the data was in the form of adata.table. Reported by Patrick Baylis, with help from KyleButts, #433
fix bug when anoffset was used in the context ofmultiple outcomes. Reported by
fix bug in thecollinearity function. Reported by@grlju, #412
fix bug which allowed the estimation of models with variablesfrom the environment while it shouldn’t
fix bug in the demeaning code when the data set in input is oflength 1. Reported by
fix bug inpredict when theoffset wasplaced in a formula and not passed as a regular argument. Reported by@jl-flores,#309
fix bug in TSLS estimations when the formula contained multipleLHS to be expanded with the dot square bracket operator. Reported by@svraka, #395
fix bug leading to the absence of warning when the convergence ofthe demeaning algorithm failed. Thanks to
fix bug in IV estimation when all exogenous variables wereremoved because of collinearity with the fixed-effects. Thanks to
fix bug inupdate.fixest when no FEs were used inthe initial estimation and one wanted to add FEs. Reported by
fix bugupdate.fixest: single estimations extractedfrom multiple estimations can now be updated individually. Note howeverthat ifsplit was used in the main estimation, thesubsample does not carry trhough (this limitation will be fixedlater).
functionsvcov gains the argumentvcov_fix to monitor whether to fix the covariance matrixwith an eigenvalue decomposition (previously this was always turnedon).
in estimations, the algorithm now allows to use scalars from theenvironment which are non numeric. Thanks to
improve error messages iniplot.
improve speed of the functionfixef.fixest in thepresence of varying slopes. PR of
the subsetting of multiple estimations does not error any morewhen the index used was not relevant in the multiple estimation(provided its value is equal to 1)
new methodupdate.fixest_multi.
fix typos and display issues thanks to:
add missing documentation ofmvsw, thanks to
fix bug “t value” displaying in lieu of “z value”. Thanks toissue oneasystats/parameters#892. Very ancient bug!
fix bug in coefplot: now the confidence intervals use the Studentt when appropriate (before that, only the Normal law was used). Thanksto Grant McDermott,#409
fix broken links in documentation (to the fixest paper)
fix bad documentation markup
adapt to CRAN policy to remove multithreading when checking thepackage
binfix bug in functioncoef() leading to methods tothrow errors in R devel. Thanks to
fix bug in thepredict method when applied toobjects estimated withfeNmlm. Thanks again to
fix missing variable names in the VCOV matrix offeNmlm models. Thanks (yet again!) to
fix display bug in cluster names inetable.
fix bug in IV estimations with no exogenous variable and nofixed-effect (thanks to Kyle Butts, #296).
fix bug panel vs panel.id behaving differently in terms ofdefault type of VCOV when the estimation did not containedlags.
fix bug inconfint.fixest when only one variable wasestimated (thanks to
fix several bugs in predict when usingi(), inparticular when used in combination with a factor orpoly()(reported by
fix bug inetable relating to ampersands not beingcorrectly escaped.
fix bug insunab when the time variable is exactlynamedt (reported by Florian Hollenbach, #330).
fix bug infeols.fit whenvcov wassupplied and the estimation did not contain fixed-effects (reported by@grlju, #341).
fix bug insample_df when the name of the variablewas too long.
fix rare bug regarding an error message when a missing variabledid exist as a function in the environment.
fix bug preventing the use of binning with formulas reported by@tlcaputi,#359).
fix various errors in the documentation (thanks to Ed Rubin andothers!).
fix bug in warning message in peculiar case of divergence in GLM(reported by
fix bug preventing the use of the global data set in wrapperfunctions (fepois,fenegbin, etc). Reported by@turbanisch,#343.
fix bug preventing the use ofsplit in non-GLM,non-OLS estimations (reported by
new internal algorithm leading to an object very much like aplain list, much easier to interact with.
new functionmodels to extract the matrix ofreporting which model has been estimated.
base=setNames(iris,c("y","x1","x2","x3","species"))mult_est=feols(y~csw(x.[,1:3]), base)models(mult_est)#> id rhs#> 1 1 x1#> 2 2 x1 + x2#> 3 3 x1 + x2 + x3in multiple estimations: all warnings are turned to notes and allnotes are delayed and stacked.
coef.fixest_multi: Now reports the model of eachestimation in the first columns. Also gains the argumentscollin,long (to display the results in a longformat) andna.rm.
coef(mult_est)#> id rhs (Intercept) x1 x2 x3#> 1 1 x1 6.526223 -0.2233611 NA NA#> 2 2 x1 + x2 2.249140 0.5955247 0.471920 NA#> 3 3 x1 + x2 + x3 1.855997 0.6508372 0.709132 -0.5564827# Now in long formatcoef(mult_est,long =TRUE)#> id rhs coefficient estimate#> 1 1 x1 (Intercept) 6.5262226#> 2 1 x1 x1 -0.2233611#> 5 2 x1 + x2 (Intercept) 2.2491402#> 6 2 x1 + x2 x1 0.5955247#> 7 2 x1 + x2 x2 0.4719200#> 9 3 x1 + x2 + x3 (Intercept) 1.8559975#> 10 3 x1 + x2 + x3 x1 0.6508372#> 11 3 x1 + x2 + x3 x2 0.7091320#> 12 3 x1 + x2 + x3 x3 -0.5564827coeftable.fixest_multi,se.fixest_multi,tstat.fixest_multi,pvalue.fixest_multi to easily extract the results frommultiple estimations.coeftable(mult_est)#> id rhs coefficient Estimate Std. Error t value Pr(>|t|)#> 1 1 x1 (Intercept) 6.5262226 0.47889634 13.627631 6.469702e-28#> 2 1 x1 x1 -0.2233611 0.15508093 -1.440287 1.518983e-01#> 3 2 x1 + x2 (Intercept) 2.2491402 0.24796963 9.070224 7.038510e-16#> 4 2 x1 + x2 x1 0.5955247 0.06932816 8.589940 1.163254e-14#> 5 2 x1 + x2 x2 0.4719200 0.01711768 27.569160 5.847914e-60#> 6 3 x1 + x2 + x3 (Intercept) 1.8559975 0.25077711 7.400984 9.853855e-12#> 7 3 x1 + x2 + x3 x1 0.6508372 0.06664739 9.765380 1.199846e-17#> 8 3 x1 + x2 + x3 x2 0.7091320 0.05671929 12.502483 7.656980e-25#> 9 3 x1 + x2 + x3 x3 -0.5564827 0.12754795 -4.362929 2.412876e-05confint.fixest_multi to extract theconfidence intervals of multiple estimations.new argumentadd to facilitate adding elements tothe formula.
new argumentframe to tell where to fetch the valuesof the variables expanded with the dot square bracket operator.
empty strings or empty elements expanded with.[]are now set to be equal to1 (the neutral element informulas):
x=""xpd(y~ .[x]+ .[NULL])#> y ~ 1 + 1!:xpd(am~..("!^am"),data = mtcars)#> am ~ mpg + cyl + disp + hp + drat + wt + qsec + vs + gear + carbbase=setNames(iris,c("y","x1","x2","x3","species"))xpd(y~ x..,data = base)#> y ~ x1 + x2 + x3feols(y~ x.., base)#> OLS estimation, Dep. Var.: y#> Observations: 150#> Standard-errors: IID#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 1.855997 0.250777 7.40098 9.8539e-12 ***#> x1 0.650837 0.066647 9.76538 < 2.2e-16 ***#> x2 0.709132 0.056719 12.50248 < 2.2e-16 ***#> x3 -0.556483 0.127548 -4.36293 2.4129e-05 ***#> ---#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#> RMSE: 0.310327 Adj. R2: 0.855706xpd in non-fixest functions, the algorithmtries to guess thedata so that calls to..("regex") or auto-completion can be used seamlessly.lm(xpd(y~ x..), base)#> Call:#> lm(formula = xpd(y ~ x..), data = base)#>#> Coefficients:#> (Intercept) x1 x2 x3#> 1.8560 0.6508 0.7091 -0.5565xpd also expandsone-sided formulas:x_all=~sepal+ petalxpd(color~ .[x_all])#> color ~ sepal + petalfitstat, the formula is nowautomatically expanded withxpd. This means that you canset fit statistics macro which can be summoned frometable.Useful to set default fit statistics for: IVs, GLMs, etc.base=setNames(iris,c("y","x1","x2","x3","species"))est=feols(y~csw(x.[,1:3]), base)# setting the macrosetFixest_fml(..fit_ols =~ n+ ar2+ my)# summoning itetable(est,fitstat =~..fit_ols)#> est.1 est.2 est.3#> Dependent Var.: y y y#>#> Constant 6.526*** (0.4789) 2.249*** (0.2480) 1.856*** (0.2508)#> x1 -0.2234 (0.1551) 0.5955*** (0.0693) 0.6508*** (0.0667)#> x2 0.4719*** (0.0171) 0.7091*** (0.0567)#> x3 -0.5565*** (0.1275)#> _______________ _________________ __________________ ___________________#> S.E. type IID IID IID#> Observations 150 150 150#> Adj. R2 0.00716 0.83800 0.85571#> Dep. Var. mean 5.8433 5.8433 5.8433now there is support for models with no coefficient (onlyfixed-effects).
the application of markdown markup is now more robust and canalso be escaped with a backslash. The escaping has been ported toc++.
list. IfTRUE, thenthe result is returned in a list form. Useful in Rmarkdown documents forquick reference to specific values.est=feols(mpg~ cyl+ drat+ wt, mtcars)ct=coeftable(est,list =TRUE)ct$constant$coef#> Estimate#> 39.76766ct$wt$se#> Std. Error#> 0.8293065split andfsplit gain the%keep% and%drop% operators which allow tosplit the sample only on a subset of elements. All estimations also gainthe argumentssplit.keep andsplit.drop whichdo the same thing as the previous operators.base=setNames(iris,c("y","x1","x2","x3","species"))est=feols(y~ x.[1:3], base,fsplit =~species%keep%c("set","vers"))etable(est)#> model 1 model 2 model 3#> Sample (species) Full sample setosa versicolor#> Dependent Var.: y y y#>#> (Intercept) 1.856*** (0.2508) 2.352*** (0.3929) 1.896*** (0.5071)#> x1 0.6508*** (0.0667) 0.6548*** (0.0925) 0.3869. (0.2045)#> x2 0.7091*** (0.0567) 0.2376 (0.2080) 0.9083*** (0.1654)#> x3 -0.5565*** (0.1275) 0.2521 (0.3469) -0.6792 (0.4354)#> ________________ ___________________ __________________ __________________#> S.E. type IID IID IID#> Observations 150 50 50#> R2 0.85861 0.57514 0.60503#> Adj. R2 0.85571 0.54743 0.57927as.dict:x="# Main varsmpg: Miles per gallonhp: Horsepower# Categorical variablescyl: Number of cylinders; vs: Engine"as.dict(x)#> mpg hp cyl vs#> "Miles per gallon" "Horsepower" "Number of cylinders" "Engine"# setFixest_dict works directly with xsetFixest_dict(x)setFixest_dict: i) now the dictionary only grows, ii)you can define variables directly in the arguments ofsetFixest_dict, iii)as.dict is applied to thedictionary if relevant, iv) there’s a new argumentreset.new functiondegrees_freedom_iid which is a moreuser-friendly version ofdegrees_freedom.
new functionfdim to print the dimension of a dataset in an user-readable way.
remove warnings when a binomial family is used with weights infeglm.
add the argumentsy,X,weights,endo,inst to thefunctionest_env to make it more user-friendly.
fix documentation typos (thanks to Caleb Kwon).
etable now returns adata.frame whosefirst column is the variables names (before this was contained in therow names).
fix environment problems whenlean = TRUE, leadingto large objects when saved on disk.
print.fixest now displays the information on thesample/subset/offset/weights.
fixef) when there are 3+ fixed-effects. This bug led to, insome specific circumstances, wrong values for the fixed-effectscoefficients. Thanks a lot tofix bug inconfint whensunab was used(thanks to Sarah Hofmann).
fix an important “documentation bug” on the Sun and Abrahammethod (thanks to Kyle Butts, #287).
fix bugs regardingview/markdownfeatures ofetable.
added compatibility withcar::deltaMethod followingGrant McDermott’s suggestion.
new functionlag_fml which is an alias tolag.formula. The latter being easily stomped by otherfunction names from other packages.
fix bug linked to the proper identification of estimations withonly fixed-effects.
remove the use ofanyNA.data.frame leading to adependency to R 3.6.3 (reported by
fix bug in stepwise estimations when two (stepwised) explanatoryvariables have exactly the same NAs values.
fix display bug regarding factors inetable whendict was present.
fix bugtablefoot.value not working any more(reported by
fix possible environment problem when estimating non linearfunctions outside of the global environment.
fix bug in the stepwise functionssw andcsw when they contained only one variable.
fix bug inetable preventing automatic headers to bedisplayed.
fix bug inn_unik preventing the auto completion ofvariable names.
fix bug infitstat for the KPR statistic (reportedby
fix bug ini when two factor variables wereinteracted and one specific value of one variable was to be set as areference.
fix bug inmodel.matrix when no variable was used inthe estimation (reported by
model.matrix now returns the variables in the sameorder as in the estimation – a discrepancy could happen in stepwiseestimations with interactions in which the interactions were putbefore fixed covariates (related to
fix bugs infeglm.fit prevented the VCOV to becomputed (reported by
fix bug inpredict with variables created withi() leading to a prediction even for values not included inthe original estimation (reported by
fix bug in multiple estimations when the data contains weightsand there are missing values in the y’s or X’s (reported by
fix bug multiverse stepwise when the estimation containsfixed-effects or IVs (reported by
fix bug in the startup message trigger.
increase the robustness of the code leading to the startupmessage (reported by
improve the robustness of the algorithm parsing the fixed-effects(linked to issue, #253).
fix minor bug in the Cragg-Donald statistic.
fix peculiar problem on load when directories names end with “.R”(thanks to@kyleam,#271).
remove remaining large items from GLM estimations withlean = TRUE.
fix bug in removing the singletons from several fixed-effects(reported by
in rep.fixest: replace argument cluster with argument vcov toenable the use of any VCOV (related to, #258 by
fix bug in predict, which automatically discarded NA values(reported by
new argumentview to display the latex table in theviewer pane (suggestion by Or Avishay-Rizi, #227). You need to a) have aworking distribution of pdflatex, imagemagick and ghostscript, or b)have the R packages pdftools and tinytex installed, for this feature towork.
new argumentview.cache insetFixest_etable: whether to cache the PNGsgenerated.
new argumentexport to export the Latex table in PNGto a file.
new (experimental) argumentmarkdown: Latex tablescan be automatically integrated in the non-Latex markdown document inPNG format.
new argumentdiv.class. Linked to themarkdown argument. In Rmarkdown documents, the table in PNGformat is embedded in a<div> container. The class ofthe div isdiv.class, which is by default"etable".
new argumenttpt to nest the table in athreeparttable environment. Notes are then nested into thetablenotes environment.
instyle.tex: new argumentnotes.tpt.intro to insert code right after thetablenotes environment and before any note (useful to setthe font size of notes globally for instance).
new argumentarraystretch to set the height of thetable rows.
new argumentfontsize which applies Latex font sizesto the table.
new argumentadjustbox:adjustbox = TRUE nests the tabular into anadjustbox environment withwidth = \\textwidth, center as default option. Useadjustbox = x withx a number giving thetext-width. Useadjustbox = "x th" withx anumber giving the text-height. Finally you can use a character string,as inadjustbox = "my options", that will be passedverbatim as a anadjustbox option.
new argumenthighlight to highlight the coefficientswith a frame or by changing the row/cell color.
new argumentcoef.style to apply an arbitrary styleto one or several coefficients.
instyle.tex: new argumentrules_widthto easily set the width of thebooktabs rules.
instyle.tex: new argumentcaption.after to insert code right after thecaption.
instyle.tex: new argumentno_border toremove the borders on the sides of the table.
the quality of the tex output has been substantiallyimproved.
signif.code now replacessignifCode(retro compatibility ensured).
signifCode is removed fromsetFixest_etable, andsignif.code is added tobothstyle.tex andstyle.df so that each stylecan have its own significance code defined globally.
the object returned byetable are now of classetable_tex (whentex = TRUE) oretable_df, both types having their own printingmethod.
the significance codes are now displayed under the table when theoutput is adata.frame.
inheaders/extralines:cmidrule does not show up for empty column names anymore.
new markup: markdown-style markup (e.g. **text**)can be used to put text in italic/bold in almost anything in thetable.
notes can be set in the dictionary: useful for notes(like source for example) that gets repeated across tables.
line.top andline.bottom now admit thevaluessimple anddouble. The argumentline.bottom now affects the “effective” end of table,irrespective of the value oftablefoot. This is more inline with intuition.
improve the use oftabularx.
automatic supportmakecell: any new lines found innames within the table will be translated withmakecell.For example:"The \n long \n varname" is automaticallytranslated into\makecell{The \\ long \\ varname}.
completely new functiondsb() to manipulate strings.Applies many low level string operations very easily. The syntax may bea bit disturbing at first, but, unlike French grammar, there’s somelogic behind!
there are over 30 basic string operations available! Do complexstring manipulations in a single call!
# At first sight, it's impossible to understand what's going on.# But I assure you, it's pretty logical!# Type dsb("--help") to get some help.dollar=6reason="glory"dsb("Why do you develop packages? For .[`dollar`*c!$]?","For money? No... for .[U,''s, c?reason]!",sep ="\n")#> Why do you develop packages? For $$$$$$?#> For money? No... for G L O R Y!dsb when the calls are nested:xpd(~sw(.[,"disp:.[/mpg, cyl]"]))#> ~sw(disp:mpg, disp:cyl)only.coef in all estimation. IfTRUE, then only the estimated coefficients are returned,which can be useful for MC experiments.est_env to estimate a model from afixest environment. Mostly useful to cut overheads insimulations.# First we get the environment (the estimation is not performed!)env=feols(mpg~ disp+ drat, mtcars,only.env =TRUE)# Then we estimate: we get the reult from feols(mpg ~ disp + drat, mtcars)est_env(env)#> OLS estimation, Dep. Var.: mpg#> Observations: 32#> Standard-errors: IID#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 21.844880 6.747971 3.23725 3.0167e-03 **#> disp -0.035694 0.006653 -5.36535 9.1914e-06 ***#> drat 1.802027 1.542091 1.16856 2.5210e-01#> ---#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#> RMSE: 3.07661 Adj. R2: 0.712458# Why doing that? You can modify the env w/t incurring overheadsassign("weights.value", mtcars$wt, env)# New estimation with weightsest_env(env)#> OLS estimation, Dep. Var.: mpg#> Observations: 32#> Standard-errors: IID#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 21.967576 6.320006 3.47588 1.6241e-03 **#> disp -0.032922 0.005884 -5.59478 4.8664e-06 ***#> drat 1.505517 1.470671 1.02369 3.1444e-01#> ---#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#> RMSE: 5.08781 Adj. R2: 0.709392ref which allows to re-factor variableson-the-fly. This function always returns a factor and relocates thevalues given in the argument as the first factor levels. It also allowsto bin values, similarly to the functionbin:# We want to place 5 in the first placeref(1:5,5)#> [1] 1 2 3 4 5#> Levels: 5 1 2 3 4# You can also bin at the same timeref(1:5, .("4:5"=4:5))#> [1] 1 2 3 4:5 4:5#> Levels: 4:5 1 2 3bin:cut:: now ignores white spaces, sothatcut:: q1 ] q3 [ works appropriately.
speed of stepwise estimations (usingsw [notcsw]) has been improved.
recursive formula macro definitions are allowed (feature requestby@turbanisch,#234).
the startup message does not pop in Rmarkdown documents anymore.
functionsample_df gains the argumentprevious which recovers the previous draw.
remove new R native piping test|> which led toerrors in R < 4.1.0 despite conditional testing.
fix bug inetableheaders when onewants to include several lines and the first line contains only oneelement repeated across columns.
fix bugs in predict: a) when variables are created with functionsof the data, and b) when the new data contains single level factors(relates to issues #200 and #180 by
fix bug inetable non-clustered standard errors notdisplaying properly in footers.
fix bug inetable regarding the escaping offixef_sizes (reported by Apoorva Lal, #201).
fix bug introduced in 0.10.0 preventing the estimation of IVmodels with interacted fixed-effects (reported by
fix bug in IV estimations when: a) no exogenous variables werepresent AND the IV part contained at lags; and b) the endogenousvariables contained at least two lags. Reported by RobbieMinton.
fix bug in the.fit methods when the argumentvcov wasn’tNULL.
fix bug insummary.fixest_multi: when the variancewas NA and internal bug could pop in some circumstances.
fix bugplot.fixef not working forfepois (reported by
fix error message when the (wrong) argumentX isused infeols.
.[,stuff], to separatevariables with commas (instead of separating them with additions):lhs_vars=c("var1","var2")xpd(c(.[,lhs_vars])~csw(x.[,1:3]))#> c(var1, var2) ~ csw(x1, x2, x3)new functiondsb: applies the dot square bracketoperator to character strings.
in the functiondsb, you can add a string literal infirst or last position in.[] to “collapse” the characterstring in question. The way the collapse is performed depends on theposition:
name=c("Juliet","Romeo")# default behavior => vectordsb("hello .[name], what's up?")#> [1] "hello Juliet, what's up?" "hello Romeo, what's up?"# string literal in first positiondsb("hello .[' and ', name], what's up?")#> [1] "hello Juliet and Romeo, what's up?"# string literal in last positiondsb("hello .[name, ' and '], what's up?")#> [1] "hello Juliet and hello Romeo, what's up?"bin: numeric vectors can be ‘cut’ with the new specialvalue'cut::q3]p90]', check it out!data(iris)plen= iris$Petal.Length# 3 parts of (roughly) equal sizetable(bin(plen,"cut::3"))#>#> [1.0; 1.9] [3.0; 4.9] [5.0; 6.9]#> 50 54 46# Three custom binstable(bin(plen,"cut::2]5]"))#>#> [1.0; 1.9] [3.0; 5.0] [5.1; 6.9]#> 50 58 42# .. same, excluding 5 in the 2nd bintable(bin(plen,"cut::2]5["))#>#> [1.0; 1.9] [3.0; 4.9] [5.0; 6.9]#> 50 54 46# Using quartilestable(bin(plen,"cut::q1]q2]q3]"))#>#> [1.0; 1.6] [1.7; 4.3] [4.4; 5.1] [5.2; 6.9]#> 44 31 41 34# Using percentilestable(bin(plen,"cut::p20]p50]p70]p90]"))#>#> [1.0; 1.5] [1.6; 4.3] [4.4; 5.0] [5.1; 5.8] [5.9; 6.9]#> 37 38 33 29 13# Mixing alltable(bin(plen,"cut::2[q2]p90]"))#>#> [1.0; 1.9] [3.0; 4.3] [4.4; 5.8] [5.9; 6.9]#> 50 25 62 13# Adding custom namestable(bin(plen,c("cut::2[q2]p90]","<2","]2; Q2]",NA,">90%")))#> <2 ]2; Q2] [4.4; 5.8] >90%#> 50 25 62 13bin also accepts formulas,e.g. bin = list("<2" = ~ x < 2) (x mustbe the only variable).
bin accepts the use of.() forlist().
you can add the location of the element using@d inthe name. Useful to rearrange factors:
base=setNames(iris,c("y","x1","x2","x3","species"))table(base$species)#> setosa versicolor virginica#> 50 50 50table(bin(base$species, .("@3"="seto","@1 VIRGIN"="virg")))#> VIRGIN versicolor setosa#> 50 50 50the tex output is now “nicely” formatted.
argumentextralines replaces the argumentextraline to increase coherence. Hence functionextraline_register becomesextralines_register(the change is done without deprecation since I guess this function mustbe only rarely used).
argumentsextralines andheaders accept.() forlist().
base=setNames(iris,c("y","x1","x2","x3","species"))check_conv_feols: checks the convergence of thefixed-effects infeols models by looking at the first-orderconditions.Although a bit unrelated to the purpose of this package, thesefunctions are so extensively used in the author’s research that hedecided to leverage his author privileges to include them infixest to make them easier to share with co-authors.
osize: simple function returning a formatted objectsize.
n_unik: simple but flexible function returning thenumber of unique elements from variables in one or several data sets.Useful for checking keys.
sample_df: simple function to extract random linesfrom adata.frame.
when computing Newey-West standard-errors for time series, thebandwidth is now selected thanks to thebwNeweyWestfunction from thesandwichpackage. This function implements the method described in Newey and West1994.
addtype = "se_long" tosummary.fixest_multi which yields all coefficients and SEsfor all estimations in a “long” format.
only infixest estimations, using a “naked” dotsquare bracket variable in the left-hand-side includes them as multipleleft hand sides. Regular expressions can also be used in theLHS.
base=setNames(iris,c("y","x1","x2","x3","species"))y=c("y","x1")feols(.[y]~ x2, base)#> Standard-errors: IID#> Dep. var.: y#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 4.306603 0.078389 54.9389 < 2.2e-16 ***#> x2 0.408922 0.018891 21.6460 < 2.2e-16 ***#> ---#> Dep. var.: x1#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 3.454874 0.076095 45.40188 < 2.2e-16 ***#> x2 -0.105785 0.018339 -5.76845 4.5133e-08 ***etable(feols(..("x")~ y+i(species), base))#> model 1 model 2 model 3#> Dependent Var.: x1 x2 x3#>#> (Intercept) 1.677*** (0.2354) -1.702*** (0.2301) -0.4794** (0.1557)#> y 0.3499*** (0.0463) 0.6321*** (0.0453) 0.1449*** (0.0306)#> species = versicolor -0.9834*** (0.0721) 2.210*** (0.0705) 0.9452*** (0.0477)#> species = virginica -1.008*** (0.0933) 3.090*** (0.0912) 1.551*** (0.0617)#> ____________________ ___________________ __________________ __________________#> S.E. type IID IID IID#> Observations 150 150 150#> R2 0.56925 0.97489 0.93833#> Adj. R2 0.56040 0.97438 0.93706improve error messages whensubset does not selectany element.
inxpd andfixest estimations,variables can be “grepped” from the data set withregex("regex").
add inheritance of the default style iniplot whenthe style is set globally withsetFixest_coefplot.
improve error messages in general by prompting additional errorcalls (when appropriate).
the dictionaries now ignore white spaces in coefficient names(thanks to Caleb Kwon).
the package startup messages have been improved (they should popup less often).
to comply with CRAN policies, the startup message doesn’t writeon the .Renviron file any more.
Fix bug occurring in IV models with multiple instruments and withmultithreading on. That bug could lead to the wrong imputation of the IVresiduals, hence affecting the standard-errors (although the order ofmagnitude of the variation should be minor). Thanks to
Fix minor, rare, bug occurring infeglm when themodel was badly specified and VAR(Y) >>>> VAR(X) and therewere only one variable.
model.matrix did not work withtype = "fixef" (thanks to
In nonlinear estimations:fixef.rm = "none" orfixef.rm = "singleton" did not work as expected (thanks to@kre32, #171).
Fix bug that could occur when observations had to be removed onseveral fixed-effects dimensions (had no impact on the estimatesthough).
Fix bug inetable whenfile is providedandtex = FALSE (thanks to
Fix bug when: i) afixest_panel is used as a dataset in an estimation, ii) NA values are to be removed and iii)fixed-effects are used. Thanks to Nicola Cortinovis for thereport!
Fix bug into_integer when converting multiplevectors and sorting is required, without items.
Fix bug infeols.fit when the matrix of regressorswas only partially named (reported by
Fix bug in the value of the fixed-effects coefficients in IVestimations (thanks to
Fix bug incoefplot whenlean = TRUE inthe estimation (reported by
Fix bug iniplot when IVs containedinteractions.
Fix bug iniplot preventing some variables to beremoved (reported by
Fix 0 right-padding of numbers displayed in estimation resultsthat could be confusing (reported by
New argumentvcov:
greatly simplifies and extends how to specify the SEs
completely replaces the argumentsse andcluster (they still work)
accepts functions
see the documentation in thevignette
New built-in VCOVs:
Newey-West (1987) for serially correlated errors
Driscoll-Kraay (1998) for cross-sectionally and seriallycorrelated errors
Conley (1999) for spatially correlated errors
you can summon variables from the environment directly in theformula using the new dot square bracket (DSB) operator. The DSBoperator can be used to create many variables at once, and can also beusing within regular expressions. One example:
base=setNames(iris,c("y","x1","x2","x3","species"))i=2:3z="i(species)"feols(y~ x.[i]+ .[z], base)#> OLS estimation, Dep. Var.: y#> Observations: 150#> Standard-errors: IID#> Estimate Std. Error t value Pr(>|t|)#> (Intercept) 3.682982 0.107403 34.291343 < 2.2e-16 ***#> x2 0.905946 0.074311 12.191282 < 2.2e-16 ***#> x3 -0.005995 0.156260 -0.038368 9.6945e-01#> species::versicolor -1.598362 0.205706 -7.770113 1.3154e-12 ***#> species::virginica -2.112647 0.304024 -6.948940 1.1550e-10 ***#> ---#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1#> RMSE: 0.333482 Adj. R2: 0.832221ini andsunab you can now bin thevariables on the fly with the new argumentbin. The newfunctionbinis also available at the user-level.
Functiondof has been renamed intossc(stands for small sample correction) to improve clarity. Retrocompatibility is partially ensured but the functiondofwill be removed at some point.
FunctionssetFixest_dof andsetFixest_se have been renamed intosetFixest_ssc andsetFixest_vcov.Noretro compatibility ensured.
Removal of thevar::factor operator to interact acontinuous variable with a variable treated as a factor.
feglm now accepts partially matched charactershortcuts for families: “poisson”, “logit”, “probit” are now validfamily arguments.
predict.fixest accepts the new argumentfixef which, ifTRUE, returns a data.frame ofthe fixed-effects coefficients for each observation, with the samenumber of columns as the number of fixed-effects (feature requests #144and #175 by@pp2382and
offsets present in the formula are now accepted.
VCOV aliases (both Grant McDermott’s suggestions: thanksGrant!):
the default standard-errors is now"iid" (formerkeywords still work)
the keywordhc1 can be used to summonheteroskedasticity-robust SEs
Argument sliding: the argumentvcov can becalled implicitly whendata is set up globally:
base=setNames(iris =c("y","x1","x2","x3","species"))# Setting up the datasetFixest_estimation(data = base)# Now vcov can be used without using vcov = stuff:feols(y~ x1+ x2,~species)# => same as feols(y ~ x1 + x2, vcov = ~species)mtcars|>feols(cyl~ mpg)# => same as feols(cyl ~ mpg, mtcars)the user can now specify custom degrees of freedom to compute thet-tests inssc() (feature request by Kyle F.Butts).
the predict method gains the new argumentse.fit andinterval which computes the SEs/CI of the predictedvariable. This only works for OLS models without fixed-effects. Featurerequest by Gábor Békés, #193.
iplot gains the argumenti.select tonavigate through the different variables created withi()(provided there are more than one of course).
new argumentinteraction.order to control the orderin which interacted variables are displayed (feature request by
new argumenti.equal to control how the values takenby factor variables created withi() aredisplayed.
newmeta.XX family of arguments when exporting toLatex. They include various type of information as comments before thetable (suggestion of adding the time by Apoorva Lal, #184). So far thenew arguments are:meta.time,meta.author,meta.sys,meta.call,meta.comment. The argumentmeta is a shortcutto all these.
default values can be saved at the project level using theargumentsave = TRUE in the functionsetFixest_etable. This means that default values will beautomatically set without having to callsetFixest_etableat the startup of the R session. For example, if you want to permanentlyadd the creation time in your Latex exports, just usesetFixest_etable(meta.time = TRUE, save = TRUE), and youwon’t need to bother about it anymore in any future session in yourcurrent project.
some changes inextraline, now:i) itaccepts raw vectors,ii) it accepts lines without title,iii) the elements are recycled across models,iv) itaccepts elements of the formlist("item1" = #item1, "item2" = #item2, etc), andv) the elements are Latex-escaped.
instyle.tex: all Latex-escaping isremoved.
the argumentsubtitle has been renamed intoheaders (retro-compatibility is ensured).
on the new argumentheaders:
headers = list("Gender" = list("M" = 3, "F" = 4)) willcreate a line with 3 times “M” and 4 times “F”.":_:" in the row name will add arule for each column group (in the previous example":_:Gender" would do). Suggestion byheaders = list("_Gender" = list("M" = 3, "F" = 4)) willplace the header line at the very bottom of the headers.":tex:" in the row title.argumentsdBelow has been renamed intose.below (retro-compatibility is ensured).
new argumentse.row to control whether the rowdisplaying the standard-errors should be displayed (clarificationrequested by
dict now directly modifies the entries in the globaldictionary instead of creating a brand new one. For example if you havesetFixest_dict(c(cyl="Cylinder")) and then useetable withdict=c(mpg="miles per gallon"),you end up with both the namescyl andmpg tobe modified. To disable this behavior, you can add"reset"as the first element, like indict=c("reset", mpg="miles per gallon").
Major bug, leading R to crash, occurring when the same variablewas used with several different slopes (thanks to
Major bug, leading R to crash, occurring when 3+ fixed-effectsare to be combined.
Major bug, leading R to crash, occurring when multiple LHS areestimated with the optionfixef.rm = "singleton" (thanks toOle Rogeberg).
Major bug, leading R to crash, occurring whenmanyfixed-effects have to be removed because of only 0/1 outcomes (thanks to@mangelett #146 and
Fix bug occurring for undefined covariances with only oneregressor (thanks to
Fix bug in IV estimations regarding the Wald statistic of thefirst stage whenlean = TRUE and the VCOV computation isdone post estimation.
Fix bug in the Wald test in IV estimations when variables areremoved because of collinearity (thanks to
Fix bug regarding multiple estimations when the multiplefixed-effects contained variables with varying slopes.
Fix various display bugs infitstat.
Fix bug inetable: using split sample estimationsprevented the argumenttitle to render correctly.
Fix incorrect information message when observations are removedbecause of infinite values (in some circumstances the removal waswrongly attributed to NAness).
Fix bug inetable when checking the argumentcoefstat (thanks to
Fix bug infeols when IV estimations containedfixed-effects andlean = TRUE (thanks to
Fix bug in IV estimations when an endogenous regressor wasremoved because of collinearity.
Fix bug estimation without intercept not working when lags arepresent in the formula (thanks to
Fix various bugs when usingsubset in theestimations (reported by
Fix error message when data cannot be fetched (reported by
Fix bug getting the “G” statistic infitstat.
Fix bug inpredict when apoly() termwas used and the formula was long (reported by
fix bug for extracting sub statistics of"ivwald"and"ivf" infitstat.
fix bug wheni() was used withoutintercept.
Fix display bug inetable when Tex output isrequested and interactions composed of identical variables withdifferent interacted orders are present (reported by
Fix bug inetabe whenfixef.group isused and fixed-effects are renamed (reported by
Fix bug whenfplit is used with subset.
Fix bug when usingcluster withsubsetand NA values are removed (reported by
Fix bug argumentlean not working onsummary when applied to an existingsummaryand only the argumentlean was present (reported by
Fix bug when using multiple LHS with lags in the formula(reported by@NicolasReigl, #158).
Fix bug regarding the intercept-only likelihood when weights areprovided (only with Poisson and logit models), reported by
the functioni(), used to create factors orinteractions has been tidied up, leading to breaking changes.
the first two arguments have been swapped! such that now thefirst argument will always be treated as a factor.
the new syntax isi(factor_var, var, ref, keep, ref2, keep2) wherevar can be either continuous or factor-like (the argumentf2, for interaction with factors, has beenremoved).
Fix rare bug when the number of parameters is greater than thenumber of observations and the GLM family has a dispersionparameter.
glm, the new defaultfamily forfeglm isgaussian (previously itwas Poisson, if you were using it, please now use the functionfepois instead).the functioncoefplot has been split in two:
coefplot: always plotsall thecoefficients.
iplot: plots only interactions or factors createdwith the functioni().
the functioniplot hence replacescoefplot’s former argumentonly.inter whichcontrolled whether or not to focus on interactions.
group andextraline: enhanced andsimplified control of the placement of the new rows. Now only twospecial characters at the beginning of the row name decide itslocation.
new argumentfixest.group. IfTRUE,then fixed-effects appearing always jointly across models will begrouped in a single row. The user can alternatively specify a list todeclare which fixed-effect to group and customize the row name.
sdBelow now works whentex = FALSE(request by Sasha Indarte).
extraline can now be equal to a formula containingextraline macros or validfitstat types.
When a list,extraline can contain functions(returning a scalar) that will be applied to each model.
When a list,extraline can contain formulascontainingextraline macros or validfitstattypes.
You can registerextraline macros with the newfunctionextraline_register.
Whentex = TRUE, n-way clustering now always leadsto the name of clustered SEs (n-way is not shown any more).
Add the argumentcoef.just that controls thejustification of the coefficients and standard-errors. Only works whentex = FALSE (i.e. adata.frame isrequested).
new functionsunab that simplifies theimplementation of the SA method.
just typesunab(cohort, period) in afixest estimation and it works!
Common methods have been extended tofixest_multiobjects.
coef.fixest_multi: re-arranges the coefficients ofmultiple estimations into a matrix.
resid.fixest_multi: re-arranges the residuals ofmultiple estimations into a matrix.
kpr: Kleibergen-Paap rank test for IVestimations.
cd: Cragg-Donald F statistic for IVestimations.
my: gives the mean of the dependentvariable.
degrees_freedom: to access the DoFs of the models(sometimes that can be intricate).
feols.fit: fit method for feols.
obs: to obtain the observations used in theestimation.
Allfixest estimation now accept scalars from theglobal environment (variables are still not allowed!).
Better handling of the DoFs infitstat (inparticular when the VCOV is clustered).
model.matrix:
the endogenous and exogenous regressors, and the instruments fromIV estimations can now be easily extracted.
new argumentsas.matrix andas.df tocoerce the result to a particular format.
.fit methods (feols.fit andfeglm.fit) now handle multiple dependentvariables.
to_integer now sorts appropriately any kind ofvectors (not just numeric/character/factors).
substantial speed improvement when combining several vectors withmany cases (> millions).
The number of threads to use can now be set permanently at theproject level with the new argumentsave in the functionsetFixest_nthreads.
model.matrix whentype = "lhs" thereturn object is now a vector (previously it was a data.frame).Improve error messages.
hatvalues.fixest: now returns an error instead of amessage when fixed-effects are present (it makes the interplay withsandwich ‘nicer’).
Fix bugdepvar = FALSE not working when tex outputwas requested (thanks to
Fix bug in naming wheni() led to only one variablebeing retained (thanks to @ colejharvey, #106).
Fix bug display when only degrees of freedom are selected infitstat.
Fix bug whenlean = TRUE in IV estimations withfixed-effects (a large object was still present, thanks to
Fix bug display ofetable in Rmarkdown (thanks to@kdzhang, #93, and@nikolassch,#112)
Improve error messages infitstat when selectingstatistics components.
Fix bug inpredict whenpoly() was usedin the estimation (thanks to
Fix bug inpredict: an error message would not popwhen combined fixed-effects are used withcombine.quick = TRUE (thanks to
Fix bug to properly account for the nestedness of combinedfixed-effects when clustered standard-errors are requested (thanks to@Oravishayrizi, #116).
Fig major bug inmodel.matrix that could make itvery slow. Led the functionaggregate to be very slow(thanks to Benny Goldman).
Fix bug that preventedaggregate to effectively useweights (thanks to Benny Goldman).
model.matrix gains the new argumentsubset which allows the creation of the design matrix for asubset of variables only.
drop.section now works foretable whentex = FALSE.
The argumentpanel.id used in all estimations can beset globally with the functionsetFixest_estimation.
i: Factor variables with only the values of 0 and 1are treated as numeric.
fitstat: The statisticG is now equalto the degrees of freedom used in the t-test of coefficientstesting.
esttable andesttex are not deprecatedany more: they are now pure aliases ofetable.
aggregate: for weighted regressions,use_weights controls whether to use the weights to performthe aggregation.
Remove test that leads to a (uber odd) bug on fedoradevel.
Fix bug in IV estimation when using factors as instrumentedvariables (thanks to
Fix bug when using at least two fixed-effects and varying slopeswith singletons (thanks to
xpd, macros are parsed even after creating theformula with thelhs andrhs arguments.Fix bug in IV estimations whenlean = TRUE (thanksto@reifjulian,#88).
Fix various bugs related to the use ofsummary whenlean = TRUE in the estimation.
Fix bug preventingse = "cluster" to be used inetable (thanks to Caleb Kwon).
Fix bugetable not escaping variable names properlywhensdBelow = FALSE (thanks to Jeppe Viero).
Fix bug in IV estimation withlean = TRUE.
Fix bug preventing the return of demeaned variables in IVestimations (thanks to
i() now automatically converts its first argument tonumeric if it was of type logical. The user can still pass logicals tothe argumentf2 if the expected behavior is really to treatit as a logical.
Improvefitstat help and error messages.
Bug inetable when the default value offitstat was set withsetFixest_etable.
Bug inmodel.matrix when the model containedfixed-effects and the RHS was requested: the intercept was wrongfullyadded.
Fix rare bug wheni() was called within a veryspecific set of functions.
Fix bug in R old release due toanyNA.data.frame.
Fix bug regardingpanel data sets when variableswere created in adata.table within functions (thanks to@tcovert,#76).
Add extra elements to be removed whenlean = TRUE tokeep the object as small as possible (reported by
Fix bug in fixed-effects estimations with multiple LHS anddifferent number of observations per estimation that prevented to getthe default behavior for standard-errors to work.
Fix occasional bug when usingsplit withfixed-effects.
xpd now appropriately returns a two sided formulawhen a one sided formula is fed in and the argumentlhs isprovided.
Fix bug incoefplot preventing the proper scaling ofthe x-axis for interactions when multiple models are displayed.
Fix occasional bug in the ordering of sub-selections of multipleestimations.
For staggered difference-in-difference analyzes: the method ofSun and Abraham (forthcoming, Journal of Econometrics) has beenimplemented.
After having usedi() to interact cohort dummieswith time to treatment dummies, use the functionaggregateto recover the yearly treatment effects.
So far the way to do it, although easy, is a bit arcane but thenext versions of the software will include a user-friendly way.
For details, check out the help page of the functionaggregate or the staggered DiD section in the vignettefixestwalkthrough.
Functioni() now has the new argumentsf2,drop2 andkeep2 which allowsthe interaction of two factors (useful for staggered DiDestimations).
Argumentdof, used to compute the standard-errors,can now be used at estimation time.
Inetable, the argumentdigits can nowaccepts a character value specifying the way the decimals should bedisplayed. For example ifdigits = "r2" this means that allnumbers will be rounded at two decimals and these two decimals willalways be displayed. The default behavior is to display significantdigits. Follows feature request #82 by
etable also gains the argumentdigits.stats which monitors how the fit statistics decimalsshould be displayed.
Argumentsplit now accepts variable names.
More coherence regarding the use ofsummary appliedto models for which the SEs were computed at estimation time. Now thereis a memory of how the SEs were computed, so that, for example, if onlythe argumentdof is passed tosummary, thenthe SEs will be clustered in the same way as estimation time and onlydof will change.
Now an error is raised wheni() is used in thefixed-effects part of the formula. The appropriate way is indicated(related to #77 by
Improved default setting of standard-errors.
Improved error messages.
In multiple estimations, models returning full NA coefficientsare not returned (instead of raising an error).
Major bug when predict was used in the presence of fixed-effects(thanks to
When using variable names to cluster the standard-errors insidefunctions, summary may not fetch the data in the right frame (thanks to@chenwang, #52). Nowa completely new internal mechanic is in place.
When using variables with varying slopes and the number ofiterations is greater than 300, a bug occurred in the function checkingthe convergence was right (thanks to
Fix bug in the demeaning algorithm when two variables withvarying slopes were identical.
Fix bug in femlm/feNmlm when factor variables are removed due tothe removal of some observations.
Insummary, fix bug when the argumentcluster was equal to a formula with expressions and not avariable name (thanks to
Fix bug when integers are present in the RHS (thanks to
Fix bug when nb_FE >= 2 and the data was large (thanks to@zozotintin,#56).
Fix bug display of how the standard-errors were clustered inetable.
Fix bug occurring when lags were used in combination withcombined fixed-effects (i.e. fe1 ^ fe2) (thanks to
Fix bugcoefplot when representing multipleestimations and coefficient names are numbers.
base= irisnames(base)=c("y","x1","x_endo","x_inst","species")base$endo_bis=0.5* base$y+0.3* base$x_inst+rnorm(150)base$inst_bis=0.2* base$x_endo+0.3* base$endo_bis+rnorm(150)# The endo/instrument is defined in a formula past a piperes_iv1=feols(y~ x1| x_endo~ x_inst, base)# Same with the species fixed-effectres_iv2=feols(y~ x1| species| x_endo~ x_inst, base)# To add multiple endogenous regressors: embed them in c()res_iv3=feols(y~ x1|c(x_endo, x_endo_bis)~ x_inst+ x_inst_bis, base)Thefitstat function has been significantlyenhanced.
Now the following types are supported:
Likelihood ratios
F-tests
Wald tests
IV related tests (F/Wald/Sargan)
common stats like the R2s, the RMSE, Log-likelihood, etc
You can register your own fit statistics. These can then beseamlessly summoned inetable via the argumentfitstat.
Theprint.fixest function now supports thefitstat argument. This means that you can display your owndesired fit statistics when printingfixest objects. Thisis especially useful in combination with thesetFixest_print function that allows to define the defaultfit statistics to display once and for all. See the example in the“Instrumental variables” section of the Walkthrough vignette.
The new functionwald computes basic Waldtests.
New argumentssplit andfsplit: you cannow perform split sample estimations (fsplit adds the fullsample).
Estimations for multiple left-hand-sides can be done at once bywrapping the variables inc().
In the right-hand-side and the fixed-effects parts of theformula, stepwise estimations can be performed with the new stepwisefunctions (sw,sw0,csw andcsw0).
The object returned is of classfixest_multi. Youcan easily navigate through the results with its subsetmethods.
aq= airquality[airquality$Month%in%5:6, ]est_split=feols(c(Ozone, Solar.R)~sw(poly(Wind,2),poly(Temp,2)), aq,split =~ Month)# By default: sample is the rootetable(est_split)# Let's reorder, by considering lhs the rootetable(est_split[lhs =TRUE])# Selecting only one LHS and RHSetable(est_split[lhs ="Ozone",rhs =1])# Taking the first root (here sample = 5)etable(est_split[I =1])# The first and last estimationsetable(est_split[i =c(1, .N)])..("regex"):data(longley)# All variables containing "GNP" or "ployed" in their names are fetchedfeols(Armed.Forces~ Population+..("GNP|ployed"), longley)Newstyle.tex andstyle.df argumentsthat define the look of either Latex tables or the outputdata.frames.
it can be set with the new functionsstyle.tex andstyle.df that contain their own documentation.
someetable arguments have been ported to thestyle functions (yesNo,tablefoot).
Newpostprocess.tex andpostprocess.dfarguments which allow the automatic postprocessing of the outputs. Seethe dedicated vignette on exporting tables for an illustration.
newtabular arguments which allows to createtabular* tables (suggestion by
polynomials and powers are automatically renamed to facilitatecomparison across models. You can set their style with the argumentpoly_dict.
the labeling of models is enhanced whenrep.fixestis used with different standard-errors (the model names are now “modelINDEX.SUB-INDEX”).
the argumentsubtitles has been improved, and nowautomatically displays the samples when split sample estimations areperformed.
In all estimations:
subset: regular subset (long overdue).
split,fsplit: to perform split sampleestimations.
se,cluster: to cluster thestandard-errors during the call.
lean: ifTRUE, then summary is appliedand any large object is removed from the result. To save memory =>but many methods won’t work afterwards.
fixef.rm: argument that acceptsnone,perfect,singleton,both.Controls the removal of fixed-effects from the observation.
auto parsing of powers. Now you don’t need to useI() to have powers of variables in the RHS, it isautomatically done for you (i.e. x^3 becomesI(x^3)):
base= irisnames(base)=c("y","x1","x2","x3","species")# The multiple estimation below works just finefeols(y~csw(x, x^2, x^3), base)Estimation options can be set globally withsetFixest_estimation().
Thedemean function has been enhanced (with thecontribution of Sebastian Krantz).
Internal demeaning algorithm: some copies of the data are avoidedwhen usingfeglm.
Internal algorithm ofto_integer (used in allestimations): one copy of the input data is now avoided.
All estimations: smarter handling of the intercept, thus avoidingthe reconstruction of the design matrix.
Fix bug int overflow in estimations with only onevariable.
Fix bug in tests occurring in R old release.
Fix bug in examples occurring in R old release.
Functioni() now behaves asfactor(),setting automatically a reference when appropriate.
Internal algorithm ofi() is much faster.
Inetable, the user can now provide a type ofclustering for each model.
New methodrep.fixest to replicate fixest objects,mostly useful inetable when several SEs for the samemodels are to be reported.
Automatic fix when the variance is not positivedefinite.
Major bug when fixed-effects were combined with^and they contained NAs (thanks to
Bug when using lead/lags in estimations. The bug was due to a bugin a dependency (dreamerr) and wasfixed. Now fixest requiresdreamerr version >=1.2.1. Bug spotted by
Major bug when n_obs x n_vars > 2B or n_obs x n_fixed-effects> 2B. In such cases estimations could just not be done, even leadingR to crash when using nthreads > 1. The algorithm was fixed to allowdatasets with up to 2B observations to be estimated in allcircumstances. Bug reported, and many help for checking provided, byHoward Zihao Zhang.
coefplot: Problem regarding interactions whenobservations, and hence coefficients, were removed from the estimation.Now the coefficients are removed from the plot. Bug reported by
coefplot: Corrected various bugs when asked for theplotting of several estimations.
Fix the stack imbalance warning (report by
Brand new internal algorithm which now uses closed form solutionswhen dealing with variables with varying slopes. This means that whenvariables with varying slopes are present, the algorithm is incomparablyfaster and more accurate.
Two deep copies of some data are now avoided in the demeaningfunction. This improves the performance in terms of memory footprint,and also makes the algorithm faster.
New default values for standard-errors (only concerns multiwayclustering). They become similar toreghdfe to increasecross-software comparability. Computing the standard-errors the old wayis still possible using the argumentdof. See the dedicatedvignette:Onstandard errors.
Name change insummary/vcov/etable: To getheteroskedasticity-robust standard-errors,se = "hetero"now replacesse = "white" to enhance clarity. Note thatse = "white" still works.
fitstatfitsat that computes various fitstatistics. It is integrated withetable and can be invokedwith the argumentfitstat. So far only two fit statisticsare included, but more will come.interact()You can now usei(var) to treat the variablevar as a factor. You can select which values to drop/keepwith the respective arguments.
Usingi(var) leads to a special treatment of thesevariables in the functionscoefplot andetable.
etableNew argumentplacement to define the position of thefloat in Latex (suggestion by Caleb Kwon).
New argumentdrop.section, with which you can dropa) the fixed-effects, b) the variables with varying slopes, or c) thestatistics, sections (suggestion by Caleb Kwon).
Fix glitch in help pages regarding the use of the ‘%’(percentage) character in regular expressions.
Two new arguments.vcov and.vcov_argsto compute the standard-errors with custom functions.
The number of observations (n) is now treated as aregular statistic and can be placed where one wants.
The statistics can now have custom aliases using the argumentdict.
The overdispersion becomes a regular fit statistic that can beincluded (or not) usingfitstat.
The dictionnary now applies to the factors of interactions, andthe values of factors.
Argumentnthreads:
The new default of argumentnthreads is 50% of allavailable threads.
Accepts new values: a) 0 means all available threads, b) a numberstrictly between 0 and 1 will represent the fraction of all threads touse.
When setting formula macros:
xpd andsetFixest_fml nowaccept character vectors and numeric scalars on top of formulas.demean:
coefplot:
The argumentgroup now accepts a special character"^^", when used, it cleans the beginning of the coefficientname. Very useful for, e.g., factors although factors created withi() need not that.
Whenhoriz = TRUE, the order of the coefficients isnot reversed any more.
Improved display of numbers inprintmethod.
Added variables names toX_demeaned fromfeols.
Lagging functions:
Nowtime.step = NULL by default, which means thatthe choice of how to lag is automatically set. This means that thedefault behavior for time variables equal to Dates or character valuesshould be appropriate.
New operatord which is the differenceoperator.
In all estimations:
mem.clean: internally, intermediaryobjects are removed as much as possible andgc() is calledbefore each memory intensive C++ section. Only useful when you’re at theedge of reaching the memory limit.collin.min_norm, this value informs on thepossible presence of collinearity in the system of variables.only.env andenv:only.env, allows to recover only theenvironment used to perform the estimation (i.e. all the preprocessingdone before the estimation).env, accepts a fixest environment createdbyonly.env, and performs the estimation using thisenvironment–all other arguments are ignored.env, we cut all preprocessing).In non-linear estimations:
NL.start now accepts numeric scalars,initializing all coefficients to the same value (avoids the use of theother argumentNL.start.init).summary.fixest:
.vcov now accepts functions that compute thevcov. This ensures convenient compatibility with thesandwich package (compatibility is still not full though:bootstraped SEs don’t work yet).update.fixest:
evaluate to ensure consistency with theupdate method from stats.feols &feglm:
na_inf.rm has been removed. It was present forhistorical reasons, and is removed to increase code clarity.Invcov, the degree-of-freedom in the small samplecorrection correction was fixed to “nested” and couldn’t be modified,now corrected. Further, “nested” was not properly accounted for, nowcorrected.
Inetable,fitsat = FALSE orfitsat = NA led to a bug.
r2: bug when the estimation contained only fixedeffects (thanks to Luis Fonseca, #27).
Now theBIC offeglm is similar to theone ofglm.
Bug in the log-likelihood in the presence of weights, nowcorrected.
Bug incoefplot when some interacted variables wereremoved because of collinearity. Now corrected.
On standard-errors: how are the SEs computed in fixest and how toreplicate the SEs from other software.
Exporting estimation tables: how to use efficientlyetable, in particular how to customize the tables.
New arguments:group,extraline,notes,tablefoot.
group allows to eliminate variables (likedrop) and adds an extra line with TRUE/FALSE if the modelcontained those variables.
extraline allows to add extra lines with anycontent.
notes allows to add notes after the table(suggestion by
tablefoot controls whether the table footer,containing the type of standard-errors and the significance codes,should be displayed.
Renaming:yesNoFixef =>yesNo.
Most default values can be set globally with the new functionsetFixest_etable.
dof, used to adjust the small samplecorrections, is now much more complete and allows to replicate a largeset of estimation results from alternative software.You can now provide custom VCOVs to summary by using the argument.vcov.
A warning is now prompted when the maximum number of iterationsof the algorithm is reached (suggestion by
The types of standard-errors can now be set globally with thefunctionsetFixest_se (suggestion by
Newfeols argumentdemeaned. IfTRUE, then the centered variables are returned(y_demeaned andX_demeaned). (Suggestion byLinus Holtermann.)
interact gains two new arguments:dropandkeep (suggestion by
hatvalues has been implemented for feols and feglmestimations.
theestfun fromsandwich has beenimplemented.
residuals.fixest.etablestyle which allows to set many elements ofthe output table.signifCode can be equal to"letters" to display letters instead of stars.setFixest_nthreads now respects theOMP_THREAD_LIMIT environment variable.var::fesyntax withconfirm = TRUE and no reference.etable when the standard-errors whereNA.feglm for non-poisson, non-binomialfamilies, are now correct (minor differences).fixef did not work when the slope was an integer, nowcorrected (thanks tosetFixest_fml(..ctrl = ~ var1 + var2). Here the macrovariable..ctrl has been set to the value"var1 + var2".fixestestimation:e.g. data(airquality) ; setFixest_fml(..ctrl = ~ Temp + Day) ; feols(Ozone ~ Wind + ..ctrl, airquality).xpd,which expands formulas. E.g.lm(xpd(Ozone ~ Wind + ..ctrl), airquality).to_integer: user-level version of the internalalgorithm transforming any kind of vector (or combination of vectors)into an integer ranging from 1 to the number of unique elements of thevector. Very fast.demean: user-level version of the demeaning algorithmused infeols.New internal algorithm to estimate OLS (applies to bothfeols andfeglm):
It is numerically more stable.
Incomparably faster when factors are to be estimated (and notexplicitly used as fixed-effects).
Collinear variables are removed on the fly.
var::fe(ref) now accept multiplereferences (i.e. ref can be a vector).etable, the variable names of non-Latex output cannow be changed.n when applying summary tochoose the number of coefficients to display.confirm has been removed from the functioninteract.r2 allows more flexibility in the keywords itaccepts.dof gains a new argumentadjwhich allows to make different types of common small sample corrections.Its other arguments have been renamed for clarity (fixef=>fixef.K,exact =>fixef.exact,cluster =>cluster.adj).feols and non-poisson,non-binomial models infeglm. For all other models,z-statistics are used. This complies with the default’s R-statsbehavior.residuals method has been substantially improved,now allowing different types.collinearity help pages: an example could leadto an error (due to random data generation). It has been removed.collinearity, corrected the problem of display ofthe intercept in some situations.cex andlwd incoefplot have been changed to 1 and 1 (instead ofpar(“cex”) and par(“lwd”)). Otherwise this led to the creation ofRplots.pdf in the working directory (thanks to KurtHornik).fixef_sizes.simplify, which provides thesizes of the fixed-effects in parentheses when there is noambiguity.signifCode = NA.float which decides whether to embed thetable into a table environment. By default it is set toTRUE if atitle orlabel ispresent.keep to select the variables to keep inthe table.coefstat defining what should be shownbelow the coefficients (standard-errors, t-stats or confidenceintervals). Suggestion byhoriz. The coefficients can now be displayedhorizontally instead of vertically.lab.fit:“simple”, the classic axis, “multi”, the labels appear across multiplelines to avoid collision, and “tilted” for tilted labels.style allows you to set styles with thefunctionsetFixest_coefplot, you can then summon the styleincoefplot with this argument.coefplot.group andgroup.par).terms.fixest giving the terms of the estimation.donttest sections were removed from helppages.etable. In the process, some of their arguments were“lost”, this is now corrected.coefplot now accepts lists ofestimations.You can now add lags and leads in anyfixestestimations. You only need to provide the panel identifiers with the newargumentpanel.id, then you’re free to use the newfunctionsl() for lags andf() forleads.
You can also set up a panel data set using the functionpanel which allows you to use the lagging functions withouthaving to provide the argumentpanel.id, and which disposeof more options for setting the panel.
You can now add interactions in formulas with a new syntax:var::fe(ref)
The commandvar::fe(ref) interacts the variablevar with each value offe and setsref as a reference. Note that if you don’t use the argumentref, the commandvar::fe is identical tovar:factor(fe).
Usingvar::fe(ref) to write interactions opens up aspecial treatment of such variables in the exporting functionetable and in the coefficient plotting functioncoefplot.
coefplotYou can plot coefficients and their associated confidenceintervals with the functioncoefplot.
coefplot dispose of many options, whose defaultvalues can be set with the functionsetFixest_coefplot.
As for the functionetable, you can easilyrename/drop/order the coefficients.
coefplot detects when interactions have been usedand offers a special display for it.
etable Estimations table: new function toexport the results of multiple estimations. Replaces the two functionsesttex andesttable (the two functions stillexist but they will be deprecated in the future).
[Lagging] New functions related to lagging:l,f,panel,unpanel and[.fixest_panel.
[Utilities] A set of small utility functions has been added. Theyallow to extract part a coefficient table or parts of it (like thet-statistics of the standard-error) from an estimation. These functionsarecoeftable,ctable (an alias tocoeftable),se,tstat andpvalue.
[coefplot] The functionscoefplot andsetFixest_coefplot.
[dof] New function to set the type of degree of freedomadjustment when computing the variance-covariance matrix. You canpermanently set the type of DoF adjustment with the new functionsetFixest_dof().
dict=c(x1="Wind", x2="Rain"), with an estimation with thefollowing variables ‘x1’, ‘x2’, ‘x1:x2’ will lead to the followingaliases in Latex ‘Wind’, ‘Rain’ and ‘WindyesNoFixef can be of lengthone, defaulting the second element to the empty string.did_estimate_yearly_effects.feglm.-[did_means] New functiondid_means to convenientlycompare means of groups of observations (both treat/control andpre/post). Contains tools to easily export in Latex.
sym macro in Latex isdropped.This package is an effort to create a family of fast anduser-friendly functions to perform estimations with multiplefixed-effects (F.E.).
Estimations with fixed-effects (or call it factor variables) is astaple in social science. Hence having a package gathering many methodswith fast execution time is of prime importance. At the time of thisversion, this is the fastest existing method to perform F.E. estimations(often by orders of magnitude, compared to the most efficientalternative methods [both in R and Stata]). The underlying method toobtain the F.E. is based on Berge 2018, and the workhorse of the code isin c++ parallelized via OpenMP (btw thanks Rcpp for simplifying coders’life!).
This package is the follow up of the (now deprecated) packageFENmlm which performed fixed-effects estimations but foronly four likelihood families. Packagefixest completelysupersedesFENmlm by extending the method to regular OLSand all GLM families, and adding new utility functions. Further, thedesign of the functions has been completely overhauled and extendedtowards much more user-friendliness. Massive effort has been put intoproviding a set of informative error messages to the user for quickdebugging of her workflow (e.g. one of the functions contains over 100different errors messages).