SPB Git

spb/firc0001_uqo

Public
9.7 KB · 40 lines latex
1% Owner: Agent 10 (Stage E writing). Every generated exhibit is \input exactly once in the prose at the anchor2% where it is discussed; please do not add a second \input of the same float (duplicate labels). — 2026-11-053% ============================================================================4\section{Sample: Issuer Universe and Filing Coverage}\label{sec:sample}5% ============================================================================67\subsection{Estimand: current constituents of a proxy at a snapshot date}89Two different populations can be labeled ``the Russell~3000''. The first is the set of \emph{historical point-in-time constituents}: for each date, the companies that FTSE Russell included in the index after its reconstitution \citep{ftserussell2026}. The second is the set of \emph{current constituents at a snapshot date}. The two differ because of index entries and exits, mergers, delistings and IPOs; a panel built on the second population is subject to survivorship and backfilling biases that a point-in-time panel is not. SPID targets the second population, and it observes it through a proxy. No licensed historical constituent list was available to the team at the time of the build, and FTSE Russell does not publish machine-readable membership lists for free; the universe is therefore read from the holdings file of the iShares Russell~3000 ETF (IWV). The index factsheet of \SPIDfactsheetDate\ lists \SPIDrussellIndexConstituents\ constituents \citep{ftserussell3000factsheet2026}; the IWV holdings of \SPIDiwvHoldingsDate\ map to \SPIDrussellDistinctCiks\ SEC registrants, \SPIDrussellProxyCoveragePct\% of that count. The fund's prospectus states that it uses a representative-sampling strategy rather than full replication \citep{iwvholdings2026}, so it need not hold every index member, and which members it omits cannot be determined from public documents; the gap of at most \SPIDrussellGapMax\ securities (\SPIDrussellGapMaxPct\% of the index count) is an upper bound on omitted issuers, and under sampling the omitted names are expected to be the smallest, that is, the extension beyond the S\&P~500 that motivated the build. The three dates differ (index characteristics \SPIDfactsheetDate, holdings \SPIDiwvHoldingsDate, download \SPIDiwvFetchDate), and the index counts securities while the proxy counts issuers after collapsing share classes, so issuer-level coverage is somewhat higher than the printed ratio. Any inference about the ``Russell~3000 over 2010--2026'' from this database is therefore an inference about firms that were in the IWV proxy in October 2026 and about their filings back to 2010.1011\subsection{Universe construction and reconciliation}1213The issuer universe is frozen in a single JSON artefact, \texttt{data/metadata/universe.json}, built by \texttt{scripts/build\_universe.py} and documented in \texttt{docs/universe\_definition.md}; the artefact and its two inputs are archived with the paper with SHA-256 checksums (\texttt{data/metadata/SHA256SUMS}; digests in \Cref{tab:universe_artefacts}). It merges two sources on the SEC Central Index Key (CIK):1415\begin{enumerate}16\item the S\&P~500 constituent list scraped from the public Wikipedia table on \SPIDspWikipediaDate\ (\SPIDspWikipediaRows\ rows, \SPIDbackfilledCiks\ distinct CIKs, with GICS sector and sub-industry) \citep{wikipediasp500}, used for the first SPID release; and17\item the holdings file of the iShares Russell~3000 ETF published by iShares as \texttt{latest-holdings.csv}, with holdings as of \SPIDiwvHoldingsDate, downloaded on \SPIDiwvFetchDate\ \citep{iwvholdings2026}. The file carries the fund's own sector labels.18\end{enumerate}1920Tickers are normalized to the SEC convention (share-class separators become hyphens: ``BRK B'' $\to$ \texttt{BRK-B}) and mapped to CIKs through the SEC's public \texttt{company\_tickers.json} (\SPIDtickerMapSize\ entries at fetch time). \Cref{tab:reconciliation} gives the reconciliation from input securities to issuers with resolved projects, and two of its steps must be read with care. The first line, \SPIDiwvEquityLines\ equity lines with a ticker, is the count reported by the build log: neither the downloaded holdings file nor the ticker file was archived, the build script drops non-company lines (contingent value rights, escrow shares, rights when-issued) without recording them, and the difference between that count and the \SPIDrussellMappedLines\ mapped lines is therefore not reconstructible line by line. The \SPIDrussellUnmatched\ tickers that reached the mapping step without a CIK are listed in the artefact's \texttt{unmatched} field: four banks that file with the FDIC rather than the SEC and three tickers absent from the SEC ticker file on the download date, for which no reason is recorded. Earlier project documents gave other counts of excluded lines; the artefact count of \SPIDrussellUnmatched\ is the only one that can be verified and is the one used here. The \SPIDrussellMappedLines\ mapped lines collapse to \SPIDrussellDistinctCiks\ CIKs because \SPIDdualClassCiks\ registrants appear with two share classes. The merged universe of \SPIDuniverseN\ issuers is \SPIDbackfilledCiks\ S\&P~500 CIKs plus \SPIDrussellDistinctCiks\ proxy CIKs minus \SPIDuniverseBoth\ present in both lists; \SPIDuniverseSpOnly\ issuers are in the S\&P~500 snapshot but no longer in the IWV file (typically recently acquired) and are retained with an \texttt{in\_sp500} flag.2122% exhibit generated by code/make_tables.py (self-contained float)23\input{tables/tab_reconciliation}2425Several design decisions deserve to be stated plainly. The proxy universe counts \emph{issuers}, not securities. The universe table records, for each issuer, the SEC name, SIC code and description, state of incorporation, exchange and fiscal-year end from the SEC submissions header, the fund weight, and the cluster node that processed its filings (\texttt{shard\_node}). The research-design specification against which the build is audited in \texttt{docs/implementation\_audit.md} (hereafter ``the specification'': the list of required tables, keys and validation gates for a research-ready release) calls for a \texttt{universe\_snapshots} table with source checksums, membership dates and match confidence; this is only partially met. Snapshot date, source URL and match method are recorded and the derived artefacts are now hashed, but the source files are not archived and no per-row match confidence is stored, which is why gate~(a) of \Cref{tab:gates} is reported as partially met.2627The June 2026 release remains a subset of the October build in the sense that every S\&P~500 issuer is in the universe, but not in the sense of identical counts. The June block yielded \SPIDjuneProjects\ projects from \SPIDbackfilledMentions\ mentions, both reproduced exactly when the resolver is run on the backfilled rows alone; the same \SPIDbackfilledCiks\ issuers now carry \SPIDspProjects\ projects from \SPIDspMentions\ mentions. The increase is explained by scope, not by the resolver: the June run had read only \SPIDjuneTenQFilings\ S\&P~500 10-Qs (\SPIDjuneTenQSections\ sections, \SPIDjuneTenQMentions\ mentions), and the October run added \SPIDoctoberSpTenQSections\ 10-Q sections of \SPIDoctoberSpTenQFilings\ filings for the same issuers (\SPIDoctoberSpTenQMentions\ mentions) plus \SPIDoctoberSpTenKMentions\ 10-K and \SPIDoctoberSpEightKMentions\ 8-K mentions. Of the \SPIDspProjects\ S\&P~500 projects, \SPIDspProjectsJuneOnly\ rest on June mentions only, \SPIDspProjectsBothRuns\ on both runs and \SPIDspProjectsOctoberOnly\ on October mentions only (\Cref{app:runs}).2829\subsection{Filing scope}3031For every issuer the pipeline enumerates the SEC submissions index (\texttt{data.sec.gov/}\allowbreak\texttt{submissions/}\allowbreak\texttt{CIK\{cik\}.json}, including the paginated archive blocks) and retains the primary document of every Form 10-K, 10-Q and 8-K filed on or after January~1, 2010. Amendments (\texttt{/A}), exhibits other than the primary document, proxy statements, registration statements and foreign-issuer forms are out of scope. Within the retained documents, the extractor reads Items 1, 1A, 2, 7 and 7A of the 10-K, all seven segmented items of the 10-Q (Part~I Items 1--4, Part~II Items 1, 1A and 2) and the body of the 8-K; 10-K Items 3--6 and 8--9B are parsed but not submitted, and a 10-K in which the parser recognizes no Item heading at all is kept as one \texttt{full\_document} section that is outside the submitted scope (\SPIDfullDocumentTenK\ filings, of which \SPIDfullDocumentTenKLegacy\ were covered by the earlier S\&P~500 ingestion and \SPIDfullDocumentTenKInvisible\ are invisible to SPID; \Cref{sec:architecture}). The choice reflects where strategic initiatives are described in prose, and it is a defensible but not innocuous restriction: press releases attached as Exhibit~99 to an 8-K, which often carry the first and most detailed announcement of a project, are not read when they are not the primary document. Testing whether this scope omits important announcements is part of the validation roadmap.3233% exhibit generated by code/make_tables.py34\input{tables/tab_filings}3536\Cref{tab:filings} summarizes the corpus: \SPIDfilingsTotal\ primary documents, \SPIDrawGb~GB of raw HTML, of which \SPIDfilingsNotParsed\ documents (\SPIDfilingsNotParsedPct\%) were not parsed. \Cref{fig:coverage} and \Cref{tab:coverage_year} in the appendix show the coverage by year. The number of issuers with at least one filing rises from \SPIDissuersFilingFirstYear\ in 2010 to \SPIDissuersFilingLastYear\ in 2026: the snapshot universe contains many companies that went public after 2010, so the early years of the panel are populated by the older and larger survivors. This is the concrete form taken by the survivorship caveat above.3738% exhibit generated by code/make_tables.py39\input{figures/fig_coverage}40
Files · 94fe8693c9c271753f77c08ce61d06dd1ca79202
Menu

Theme