{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2603-11304","title":"Worst-case low-rank approximations","arxiv_id":"2603.11304","date":"2026-03-11","proceeding":null,"authors":["Anya Fries","Markus Reichstein","David Blei","Jonas Peters"],"abstract":"Real-world data in health, economics, and environmental sciences are often collected across heterogeneous domains (such as hospitals, regions, or time periods). In such settings, distributional shifts can make standard PCA unreliable, in that, for example, the leading principal components may explain substantially less variance in unseen domains than in the training domains. Existing approaches (such as FairPCA) have proposed to consider worst-case (rather than average) performance across multiple domains. This work develops a unified framework, called wcPCA, applies it to other objectives (resulting in the novel estimators such as norm-minPCA and norm-maxregret, which are better suited for applications with heterogeneous total variance) and analyzes their relationship. We prove that for all objectives, the estimators are worst-case optimal not only over the observed source domains but also over all target domains whose covariance lies in the convex hull of the (possibly normalized) source covariances. We establish consistency and asymptotic worst-case guarantees of empirical estimators. We extend our methodology to matrix completion, another problem that makes use of low-rank approximations, and prove approximate worst-case optimality for inductive matrix completion. Simulations and two real-world applications on ecosystem-atmosphere fluxes demonstrate marked improvements in worst-case performance, with only minor losses in average performance.","url_abs":"https://arxiv.org/abs/2603.11304","url_pdf":"https://arxiv.org/pdf/2603.11304","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2603.11304","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2603.11304"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/anyafries/wcPCA","reach":null},{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/asberk/matrix-completion-whirlwind","reach":null}],"summary":{"unverified":15},"by_repo_kind":{"found_in_text":{"samples":15,"ran":0,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":6,"samples":[{"code_sha256_prefix":"3f8316a913f50328","entry":"build_env_dicts","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"application/shared_preprocessing.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/application/shared_preprocessing.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3f8316a913f50328"}},{"code_sha256_prefix":"0316a40b84c5869f","entry":"compute_diff","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"simulations/sim2_avg_vs_wc.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/simulations/sim2_avg_vs_wc.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0316a40b84c5869f"}},{"code_sha256_prefix":"f73a9d2e8b9794fa","entry":"compute_difference_df","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"simulations/sim3_finite_sample.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/simulations/sim3_finite_sample.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f73a9d2e8b9794fa"}},{"code_sha256_prefix":"5fa13fc9e59bbea9","entry":"compute_diffs","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"application/fluxnet/fluxnet_analysis.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/application/fluxnet/fluxnet_analysis.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5fa13fc9e59bbea9"}},{"code_sha256_prefix":"688e3ba0077f3814","entry":"create_envzeromean","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"application/shared_preprocessing.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/application/shared_preprocessing.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"688e3ba0077f3814"}},{"code_sha256_prefix":"fd62fa6f0ac8417b","entry":"create_poolscale","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"application/shared_preprocessing.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/application/shared_preprocessing.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fd62fa6f0ac8417b"}},{"code_sha256_prefix":"063a64e30e22bd8b","entry":"f_minpca_np","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"comparison/utils.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/comparison/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"063a64e30e22bd8b"}},{"code_sha256_prefix":"9fb541b2dd5b0fcf","entry":"f_pca_np","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"comparison/utils.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/comparison/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9fb541b2dd5b0fcf"}},{"code_sha256_prefix":"91b0e5fea4ba8815","entry":"f_regret_np","repo":"anyafries/wcPCA","repo_kind":"found_in_text","path":"comparison/utils.py","file_url":"https://github.com/anyafries/wcPCA/blob/HEAD/comparison/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"91b0e5fea4ba8815"}},{"code_sha256_prefix":"5e22a8d9ebd86cfb","entry":"matrixCompletionSetup","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_util.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5e22a8d9ebd86cfb"}},{"code_sha256_prefix":"6570b39cec58aae4","entry":"mcFrobSolveLeftFactor_cvx","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_solve.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_solve.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6570b39cec58aae4"}},{"code_sha256_prefix":"a5c38dc0ca04d7d1","entry":"mcFrobSolveLeftFactor_ls","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_solve.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_solve.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a5c38dc0ca04d7d1"}},{"code_sha256_prefix":"43440de1865c5721","entry":"mcFrobSolveRightFactor_cvx","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_solve.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_solve.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"43440de1865c5721"}},{"code_sha256_prefix":"65219557f1a3151d","entry":"rmse","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_util.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"65219557f1a3151d"}},{"code_sha256_prefix":"0c085d68f7cb930d","entry":"subsampledMatrix","repo":"asberk/matrix-completion-whirlwind","repo_kind":"found_in_text","path":"mc_util.py","file_url":"https://github.com/asberk/matrix-completion-whirlwind/blob/HEAD/mc_util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0c085d68f7cb930d"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}