Changelog
Source:NEWS.md
tidyfinance (development version)
Breaking changes
-
download_factor_library_ids()anddownload_data("Tidy Finance", "factor_library")read the new layout of the factor library on Hugging Face, where the returns hold onlyid,date, andretin files of 1,000 consecutive IDs named after their range. Only the files that hold the requested IDs are downloaded, and the file listing of the dataset is no longer queried. The result no longer has aret_typecolumn; the weighting scheme is in theweighting_schemecolumn of the grid. Earlier versions of the package cannot read the new layout. - The factor library now builds on the signals of Open Source Asset Pricing, so sorting variables carry their names, e.g.
"size"instead of"me"and"high52"instead of"52w". The examples and the documented grid values follow the new release, which adds the"1m"lag and"capped VW"weighting.
New features
- Added
download_data_fred_md()and the"FRED-MD"/"FRED-QD"datasets fordownload_data("FRED", ...), which download the McCracken and Ng (2016, 2021) curated monthly / quarterly macro panels as wide tables (one column per series).transform = TRUEapplies each series’ stationarity transform code (tcode).vintageselects the current release (default), a specific"YYYY-MM"release, or"all"- the full real-time panel across every archived vintage (recent vintages are hosted individually; older ones are read from the St. Louis Fed vintage archive ZIPs), enabling leak-free point-in-time analysis.
Bug fixes
-
download_factor_library_grid()caches the grid of the factor library for the rest of the session, sodownload_factor_library_ids()anddownload_data("Tidy Finance", "factor_library", ...)no longer download the grid of more than four million rows on every call (previously twice perdownload_data()call when filtering). Userefresh = TRUEto download it again. - Passing a legacy identifier such as
"factors_ff_3_monthly"asdatasetnow warns that this value is deprecated and names the dataset that replaces it, e.g."Fama/French 3 Factors". The warning previously claimed that thetypeargument was used, although the caller never passed it. -
estimate_fama_macbeth()now orders the cross-sections chronologically before aggregating them over time. Newey-West standard errors depend on the order of the time series, so the same data in a different row order previously returned different standard errors and t-statistics while the risk premia were unchanged. Results for chronologically sorted input are unaffected (#302). - The documentation of
estimate_fama_macbeth(detail = TRUE)now lists theadj_r_squaredcolumn, which the function has always returned insummary_statisticsalongsider_squaredandn_obs. -
download_data_stock_prices()now derives dates from the exchange time zone reported by Yahoo Finance instead of converting the timestamps in UTC. Timestamps refer to the market open in local time, so for exchanges ahead of UTC (e.g."^AXJO","^NZ50") every observation was previously dated one calendar day too early and could fall on a weekend. -
download_data_stock_prices()now returns a range that is inclusive of bothstart_dateandend_datefor every exchange, matching the otherdownload_data_*()functions. The range was previously delegated to Yahoo Finance’speriod1/period2, which are resolved in the exchange’s local time zone, soend_datewas excluded for markets at or behind UTC but included for markets ahead of it. -
download_factor_library_grid(), and with itdownload_data("Tidy Finance", "factor_library"), now readsportfolio_sort_grid.parquetby name instead of every Parquet file listed in the grid repo, which also holds one slice of the grid per sorting variable and the list of sorting variables. Reading the listing failed as soon as the repo held more than one Parquet file.
tidyfinance 0.8.0
CRAN release: 2026-07-02
New features
- Added
download_data_pastor_stambaugh()and the"Pastor-Stambaugh"domain fordownload_data(), which downloads the liquidity factors of Pastor and Stambaugh (2003) from Lubos Pastor’s data library. The result carries the levels of aggregate liquidity, the non-traded liquidity factor (innovations), and the traded liquidity factorLIQ_V. - Added
download_data_stambaugh_yuan()and the"Stambaugh-Yuan"domain fordownload_data(), which downloads the mispricing factors (mgmtandperf) of Stambaugh and Yuan (2017) from Robert Stambaugh’s data library. Thedatasetargument selects between"monthly"and"daily"data. The source files currently end in December 2016. - Added
download_data_jkp()and the"Global Factor Data"domain fordownload_data(), which downloads data from Global Factor Data (Jensen, Kelly, and Pedersen, 2023). Thedatasetargument selects between factor returns ("factors"), the underlying long-short portfolios ("portfolios"), industry returns ("industry"), and the reference files"nyse_cutoffs"and"return_cutoffs". The requested selection is validated against the library’s live availability manifest, and the helperlist_supported_jkp_factors()lists the available regions and selectors.
Improvements
- The
sorting_variablecolumn of thefactor_library_griddataset no longer carries a"sv_"prefix, so its values now match thesorting_variableargument ofdownload_data("Tidy Finance", "factor_library", ...)(e.g."bm"rather than"sv_bm").download_data("Tidy Finance", "factor_library_grid")returns the bare values accordingly (#284). - Added a
tidyfinancevignette that walks through the complete factor-construction workflow: download, signal construction, fiscal-year lagging, portfolio sorting, and a Fama-MacBeth test. It builds entirely ondownload_data(domain = "Pseudo Data"), so it compiles without a WRDS subscription or network access.knitrandrmarkdownare added back toSuggests, andVignetteBuilder: knitris restored toDESCRIPTION. -
download_data("Open Source Asset Pricing")now aligns thedatecolumn to the beginning of the month (the dataset previously returned end-of-month dates), matching the convention used by the other download functions. All predictor columns are monthly long-short returns expressed in percent and are now divided by 100 to return plain numeric (decimal) returns.
Bug fixes
-
download_data_huggingface("factor_library", ...)now treats an explicitn_portfolios_secondary = NULLas “remove the filter and return all values” (univariate and bivariate sorts alike), consistent with the documented behavior for every other column. Previously an explicitNULLwas coerced toNA, restricting the result to univariate sorts.
tidyfinance 0.7.0
CRAN release: 2026-06-25
Improvements
-
estimate_betas()now uses a fast, vectorized closed-form approach based on rolling cumulants of the moment matrices instead of fitting one regression per stock and window. This removes the need for per-stock nesting and the optionalfurrrparallelization, so theuse_furrrargument and thefurrrdependency have been dropped. Estimates are numerically identical to the previous regression-based implementation. Windows with fewer thanmin_obsobservations are now dropped from the output rather than returned withNAcoefficients. - The package website moved from
package.tidy-finance.orgtor.tidy-finance.org. -
download_data()now uses the human-readable domain names returned bylist_supported_datasets()(e.g.,"Fama-French","Global Q","WRDS","Tidy Finance"). The"pseudo"and"tidyfinance"domains were renamed to"Pseudo Data"and"Tidy Finance". The previous machine-readable domain names (e.g.,"famafrench","wrds","pseudo","tidyfinance") are soft-deprecated but still accepted. -
download_data_wrds_crsp()now errors informatively whenversion = "v1"is used with anend_datelater than December 2024, reflecting the discontinuation of the CRSP legacy version at the end of 2024. - Removed the “experimental” lifecycle badge from
assign_portfolio(),compute_breakpoints(),compute_rolling_value(),estimate_model(), andjoin_lagged_values(), which are now considered stable.
tidyfinance 0.6.0
CRAN release: 2026-05-31
New features
- Added
domain = "pseudo"todownload_data()for generating pseudo data with the same schema as the corresponding real domain. Supported datasets in this release:"crsp_monthly","crsp_daily","compustat_annual","compustat_quarterly", and"ccm_links"(all mirroringdomain = "wrds"). Internally, everydomain = "pseudo"call funnels throughsimulate_pseudo_data(), the unexported router that dispatches to per-dataset generators. Per-dataset entry points (download_data_pseudo_crsp(),download_data_pseudo_compustat(),download_data_pseudo_ccm_links()) remain exported for direct use. All generators acceptn_assetsandseedarguments; identical(seed, n_assets)yields the same identifier universe across datasets, so pseudo CRSP and Compustat join cleanly viaadd_ccm_links = TRUEorccm_links. Daily CRSP is generated on weekdays only. - Added
download_factor_library_grid()to fetch thetidy-finance/factor-library-griddataset from Hugging Face. Also accessible viadownload_data("tidyfinance", "factor_library_grid").
Improvements
- Added
test-coverage.yamlworkflow and badge to README. - Added tests to get coverage to 100% (excl.
set_wrds_credentials()). - Fama-French factor data is now downloaded and parsed internally via
httr2, sofrenchdatais no longer declared inImports. The behavior ofdownload_data_factors_ff()is unchanged. -
download_data("tidyfinance", "factor_library", ...)now honors the canonicalstart_dateandend_datearguments, filtering the returned portfolio returns to the requested range. When both are omitted, the full history is returned and the standard “Returning the full data set” message is emitted (viavalidate_dates()). Previously these arguments were accepted but silently ignored for the factor library. - Removed the
using-tidyfinanceanddates-in-tidyfinancevignettes. Both predated the currentdownload_data()interface and are superseded by the package manuscript.knitrandrmarkdownare no longer declared inSuggests, andVignetteBuilderhas been dropped fromDESCRIPTION. -
download_data("tidyfinance", "factor_library", ids = <vector>)now delegates directly todownload_factor_library_ids(), bypassing the grid filter. Passingidstogether with filter arguments raises an informative error. - Renamed
list_supported_types()tolist_supported_datasets()(#242). The old name remains exported as a soft-deprecated alias that forwards to the new function. Internal helpers were renamed accordingly (e.g.list_supported_types_ff()->list_supported_datasets_ff()). -
download_data_constituents()now drops symbols equal to"-". - Renamed
only_usparameter indownload_data_wrds_compustat()toonly_usdto reflect that the filter keeps USD-denominated shares only. The old name is deprecated and forwards toonly_usdwith a warning. - Removed
arrow,glue, andstringrdependencies and addednanoparquet.
tidyfinance 0.5.0
CRAN release: 2026-05-12
New features
- Added
implement_portfolio_sort()as a convenience wrapper that combines sample construction filtering and portfolio return computation into a single call. - Added
download_data_risk_free()to download and process risk-free rate data from FRED, splicing TB3MS (pre-2001) with DTB4WK (from 2001 onwards) for monthly data, and using DTB3 for daily data. Also accessible viadownload_data("tidyfinance", "risk_free"). - Updated
download_data_wrds_crsp()to usedownload_data_risk_free()(FRED-based) instead of the Kenneth French risk-free rate when computing excess returns. - Added
download_data_risk_free(). - Added
only_usparameter todownload_data_wrds_compustat(). - Added new parameters for common CRSP transformation tasks (
add_ccm_links,adjust_volume) todownload_data_wrds_crsp(). - Added
prc_adjto"crsp_monthly"version"v1". - Added
adjust_volumeparameter for"crsp_daily"version"v1"and"v2"todownload_data_wrds_compustat(). - Added
compute_rolling_value(). - Added
outputparameter toestimate_model()to also return t-stats or residuals. - Added
join_lagged_values(). - Added more indexes to
list_supported_indexes(). - Added
download_data_huggingface()andget_available_huggingface_files(). and support fortype = "hf_high_frequency_sp500". - Deprecated
typeparameter in favor ofdomainanddataset. - Added
detailparameter toestimate_fama_macbeth()to include averagen_obs,r_squared, andadj_r_squared. - Removed lower bound of excess returns in
download_data_wrds_crsp(). - Removed
add_lag_columns()in favor ofadd_lagged_columns(). - Added domain
"tidyfinance"with datasets"high_frequency_sp500","factor_library", and"risk_free".
Improvements
- Removed
renvdue to lack of benefits. - Moved optional dependencies to imports for improved user experience (except for
furrr).
Bug fixes
- Removed erroneous time zone adjustment in
download_data_wrds_trace_enhanced()#133. - Replaced tabs in
list_supported_types_ff()with underscores #134. -
compute_portfolio_returns()andimplement_portfolio_sort()now applymin_portfolio_sizeto the reported portfolio cross-section. For bivariate sorts this is the firm count per(main_portfolio, date)summed across secondary buckets, not per(main, secondary, date)cell as before. Previously, settingmin_portfolio_sizeto the number of cells (e.g.n_main * n_secondary) silently voided every cell. Univariate behaviour is unchanged. The default has changed from0Lto1L, so each reported portfolio is required to have at least one observation by default; passmin_portfolio_size = 0Lto deactivate the check. The param documentation has also been corrected to reflect that small portfolios receiveNA(not zero). -
compute_long_short_returns()no longer errors withobject 'top' not foundwhen the input panel contains only one distinct portfolio (e.g., becauseassign_portfolio()collapsed to a single bucket on a constant sorting variable). The long-short return is nowNAon such dates, consistent with “no investment, no return”, instead of crashing.
tidyfinance 0.4.3.
CRAN release: 2024-12-17
tidyfinance 0.4.2
CRAN release: 2024-12-02
Bug fixes
-
download_macro_predictors(),download_factors(), anddownload_osap()now fail gracefully with informative messages instead of errors or warnings.
Improvements
- Updated
ccmxpf_linktableto the new WRDS defaultccmxpf_lnkhist. - Added support for “factors_q5_annual” in
download_factors_q() - Optimized
winsorize()by reducing quantile recalculations
tidyfinance 0.4.1
CRAN release: 2024-09-04
Bug fixes
- Added missing support of “wrds_trace_enhanced” and “wrds_fisd” support to
download_data_wrds(). - Added intercept to
estimate_model(),estimate_betas(), andestimate_fama_macbeth().
Improvements
- Renamed
download_data_wrds_clean_trace()todownload_data_wrds_trace_enhanced()for improved consistency. - Added
vcov_optionsparameter toestimate_fama_macbeth().
tidyfinance 0.4.0
CRAN release: 2024-08-30
New features
- Added
list_supported_indexes()anddownload_data_constituents()to download index constituents. - Added
estimate_betas()to estimate risk factor betas. - Added
estimate_fama_macbeth()to estimate Fama-MacBeth models. - Added
download_data_constituents()to download index constituents. - Added
download_data_osap()to download data from Open Source Asset Pricing. - Added
download_data_fred()to download data from Federal Reserve Economic Data. - Added
compute_portfolio_returns()to implement different portfolio sorting approaches. - Added
compute_long_short_returns()to quickly compute long-short portfolio returns. - Added
compute_breakpoints()to makeassign_portfolio()more flexible. - Added
breakpoint_options()anddata_options()to provide more flexibility with respect to column names.
Improvements
- Migrated to
clifor error messages and warnings. - Aligned documentation across functions.
- Switched to
NULLfor optional default values. - Removed dependency from named placeholder that is only available from R 4.2 on.
- Removed
readxldependency fromdownload_data_macro_predictors(). - Removed redundant
check_if_package_installed()function. - Updated
estimate_model()to support bothestimate_betas()andestimate_fama_macbeth(). - Updated
assign_portfolio()to supportcompute_portfolio_returns(). - Renamed
download_data_stocks()todownload_data_stock_prices()for better naming.
tidyfinance 0.3.0
CRAN release: 2024-07-23
New features
- Added support for all available Fama-French datasets (check via
list_supported_types()). All type names are created from a string cleaning algorithm and are hence more consistent. We kept implicit support for legacy type names to avoid breaking existing code. - Added new function to download stock data from Yahoo Finance:
download_data_stocks(). - Added support for
wrds_compustat_quarterly.
Bug fixes
- CRSP monthly data always contains the historically accurate stock characteristics instead of the oft misleading most recent information.
- Consistently implemented the
additional_columnsoption for CRSP and Compustat instead of having the error prone option to pass columns via.... - Added replacement of
-999by NA in Fama-French types, which was missing in the initial implementation.
Improvements
- Refactored the column name cleaning procedure in
download_data_factors()to support all available column names in the Fama-French universe. - Made all
start_dateandend_dateoptional with a message to user which dates are used as defaults. - Introduced automatic checks via GitHub Actions workflows.
- Synchronized
datecolumn and its references across WRDS types (see corresponding vignette for more information). - Improved handling of imports with
tidyfinance-package.Rfile. - Reformatted DESCRIPTION and roxygen comments for more consistency with
tidyversestyle.
tidyfinance 0.2.1
CRAN release: 2024-07-03
New features
- Added
domainandas_vectorparameters tolist_supported_types()
Bug fixes
- Replaced
...withadditional_columnsparameter and ensured that CRSP and Compustat types consider it correctly - Removed
mkt_excesscolumn from type “wrds_crsp_monthly”
Improvements
- Added
fixed = TRUEtogrepl()calls with fixed strings - Switched to
NA_real_instead ofas.double(NA) - Switched to
toString()instead ofpaste0()with collapse - Switched to
dplyr::between()instead of unequal signs
tidyfinance 0.2.0
CRAN release: 2024-05-29
New features
- Added
vignettes/using-tidyfinance - Added
set_wrds_credentials()function for a guided tour to store login data - Added support for
"factors_ff_industry_*"data types