Valuation / Methodology
Valuation methodology
Two sources, two vintages, and a register of everything in them that can mislead a reader who does not know it is there. Every number on /valuation and on the 94 industry pages comes from a query written against these files at build time.
The sources
| Table | Coverage | Source |
|---|---|---|
| shiller_ie_data | 1,845 monthly rows, 1871-01 to 2024-09. S&P composite only. | Robert J. Shiller, Irrational Exuberance data, Yale |
| damodaran_cost_of_capital, damodaran_betas, damodaran_valuation_multiples_{pe, pbv, ps, ev_ebitda} | One vintage, 2026-01-05. 94 industries plus two aggregate rows, in two regions. | Aswath Damodaran, NYU Stern |
These two files do not describe the same moment. Shiller ends 2024-09; the Damodaran snapshot is dated 2026-01-05. No sentence on this layer combines a number from one with a number from the other.
CAPE
CAPE at month t is the real price of the index divided by the mean of the trailing 120 months of real earnings, both deflated to the last month’s price level. Recomputing it that way from real_price and real_earnings reproduces Shiller’s own cape column to within 0.325 index points at every one of the 1,722 months where 120 trailing earnings observations exist. The residual is not zero, so the published column is used, not the recomputation.
The denominator is a 120-month average by construction, which is the point of the measure and also its main limitation: CAPE responds to an earnings collapse over ten years, not over a quarter. cape is populated for 1,725 of the 1,845 rows, the missing ones being the first 120 months, before there is ten years of history to average. earnings_nominal is populated for 1,842 rows: it stops at 2024-06, so the last 3 months of the file carry a CAPE but no reported earnings. Today’s reading, 35.23 in 2024-09, is one of those months.
The forward-return test
real_10yr_ann_stock_returnis Shiller’s own column: the annualised real return the index went on to deliver over the 120 months after each row. It is not computed here. Two null patterns bound the test:
capeis null for the first 120 months of the file, which need ten years of trailing earnings.real_10yr_ann_stock_returnis null for the last 120 months, which need ten years of future prices.
Both columns have the same non-null count, which makes them look aligned. They are not. 1,605 rows carry both, 1881-01 to 2014-09, and that is the only sample in which the test can run. The build asserts that the forward column ends exactly 120 months before the file and that cape begins exactly 120 months after it starts; if either stops being true, the build fails rather than the page quietly changing meaning.
Overlap
Two consecutive rows of the forward column describe windows sharing 119 of their 120 months. Its lag-1 autocorrelation is 0.993; at lag 12 it is 0.857. A t statistic computed on 1,605 such rows treats them as 1,605 independent draws, which is why it comes out at 24.6. That number is published on the index page next to its replacement so the size of the error is visible, not to be used.
The non-overlapping sample is drawn by taking the first testable month and every 120th month after it: 14 windows, 1881-01 to 2021-01, no two of which share a month. On those, t is 2.19 on 12 degrees of freedom. R-squared moves from 0.274 to 0.286, that is, hardly at all: overlap inflates the apparent precision of the estimate, not the estimate itself.
The regression reported is of the realised return on 1 / CAPE, the CAPE earnings yield, because a yield is the quantity that enters a return linearly. The index page reports CAPE and log CAPE alongside it so the choice can be inspected rather than trusted. Overlapping fit: a = 0.0038, b = 0.8908, residual SD 4.39% a year. Non-overlapping fit: a = 0.0092, b = 0.8108, residual SD 5.36% a year.
With 14 independent observations, the only available robustness check is to drop each in turn. Doing so moves R-squared between 0.106 and 0.376 and t between 1.14 and 2.57; 11 of the 14 refits fall below the two-sided 5 percent critical value of 2.201 at 11 degrees of freedom. That result is on the index page. It is the honest summary of what this test can support.
The Damodaran cross-section
94 industries, two regions, one vintage. The US tables cover US-listed companies; the Global tables cover the worldwide universe and are reported in US dollars, per the source file’s own header. Two further rows per region, Total Market and Total Market (without financials), are aggregates and are excluded from every cross-section here; the Total Market row is shown as a benchmark column on each industry page. The build asserts that the 94 industry firm counts sum exactly to the Total Market count in each region (5,994 US, 48,156 Global), so the aggregates cannot silently start double-counting.
Two identities, asserted at build time
- Cost of equity is an exact affine function of beta within a region. US: 3.950% + 4.460% × beta. Global: 3.950% + 5.630% × beta. Maximum absolute residual 3.5e-17 and 5.6e-17 respectively. The build throws if the residual ever exceeds 1e-12. Read plainly: the intercept is the risk-free rate and the slope is the equity risk premium, applied identically to every industry, so the cross-section of cost of equity is the cross-section of beta rescaled.
- Cost of capital equals its own weighted average. equity_to_capital × cost_of_equity + debt_to_capital × after_tax_cost_of_debt reproduces cost_of_capital. The build throws if the maximum absolute difference across the rows exceeds 1e-12.
- Cost of debt is a bucket, not an industry estimate. It takes 4 distinct values across the 94 US industries and 4 across the 94 Global ones.
Traps in the source
- Two PEs with the same name.
current_pe,trailing_peandforward_peare averages across the firms in an industry.agg_mktcap_to_net_income_all_firmsis total market capitalisation over total net income. Only the second is a market multiple. The industry pages and the index table lead with the aggregate. - Units are fractions, not percents.
cost_of_capital,tax_rate,roe,roic, the margins andpct_money_losing_firms_trailingare stored as fractions (0.0696 means 6.96%). Betas and multiples are raw numbers. Every display here multiplies the fractions by 100 exactly once. - The two files disagree with each other about 2 numbers.
damodaran_cost_of_capital.std_dev_in_stockanddamodaran_betas.std_dev_of_equityare the same quantity under two names. They agree in 190 of the 192 rows the two files share (94 industries and two aggregates, in each of two regions) and disagree in 2: Utility (Water) (Global): 33.5% in the cost-of-capital file, 42.1% in the betas file; Utility (Water) (US): 29.6% in the cost-of-capital file, 48.1% in the betas file. In 2 of the 2 disagreeing rows, the betas-file value is exactly the Total Market value for that region, which is what a spilled cell in a spreadsheet looks like. Neither value has been corrected here, and both are printed side by side on the industry pages so the reader can see the conflict rather than inherit a silent choice. - The multi-year beta columns are not shown.
damodaran_betascarriesyr_2022throughyr_2025andaverage_beta_multiyear. The US spreadsheet titles the average column “Average (2022-2026)”; the Global spreadsheet titles the same column “Average (2020-24)”. The ingest normalised both to one column name, so a single label here would be wrong for one region. It is also not the arithmetic mean of the four year columns: across the 192 rows it equals that mean in 0 of them and the mean of those four plus the current beta in 0. All five columns are therefore omitted from the pages. - The industry names are Damodaran’s, spelling included. Names such as “Heathcare Information and Technology” and “Rubber& Tires” are reproduced as the source writes them. Correcting them here would break the join back to the source file.
Missing cells
All 35 data columns that these pages display were counted for nulls across the 188 industry-region rows of their tables. The 14 columns that have any null are listed in full; the other 21 are complete.
| Column | Nulls | Industry (region) |
|---|---|---|
| agg_mktcap_to_net_income_all_firms | 10 of 188 | Broadcasting (Global); Drugs (Biotechnology) (Global); Real Estate (Development) (Global); Broadcasting (US); Chemical (Diversified) (US); Drugs (Biotechnology) (US); Electrical Equipment (US); Electronics (Consumer & Office) (US); Entertainment (US); Software (Internet) (US) |
| ev_ebit_all_firms | 9 of 188 | Bank (Money Center) (Global); Banks (Regional) (Global); Brokerage & Investment Banking (Global); Bank (Money Center) (US); Banks (Regional) (US); Brokerage & Investment Banking (US); Coal & Related Energy (US); Electronics (Consumer & Office) (US); Software (Internet) (US) |
| peg_ratio | 9 of 188 | Shipbuilding & Marine (Global); Chemical (Diversified) (US); Electronics (Consumer & Office) (US); Insurance (Life) (US); Paper/Forest Products (US); Real Estate (Development) (US); Real Estate (General/Diversified) (US); Reinsurance (US); Rubber& Tires (US) |
| ev_ebit_pos_ebitda_firms | 8 of 188 | Bank (Money Center) (Global); Banks (Regional) (Global); Brokerage & Investment Banking (Global); Bank (Money Center) (US); Banks (Regional) (US); Brokerage & Investment Banking (US); Coal & Related Energy (US); Electronics (Consumer & Office) (US) |
| roic | 8 of 188 | Bank (Money Center) (Global); Banks (Regional) (Global); Brokerage & Investment Banking (Global); Financial Svcs. (Non-bank & Insurance) (Global); Bank (Money Center) (US); Banks (Regional) (US); Brokerage & Investment Banking (US); Financial Svcs. (Non-bank & Insurance) (US) |
| ev_ebitda_all_firms | 7 of 188 | Bank (Money Center) (Global); Banks (Regional) (Global); Brokerage & Investment Banking (Global); Bank (Money Center) (US); Banks (Regional) (US); Brokerage & Investment Banking (US); Electronics (Consumer & Office) (US) |
| ev_ebitda_pos_ebitda_firms | 6 of 188 | Bank (Money Center) (Global); Banks (Regional) (Global); Brokerage & Investment Banking (Global); Bank (Money Center) (US); Banks (Regional) (US); Brokerage & Investment Banking (US) |
| agg_mktcap_to_net_income_profitable_firms | 3 of 188 | Chemical (Diversified) (US); Electronics (Consumer & Office) (US); Rubber& Tires (US) |
| expected_growth_5yr | 3 of 188 | Chemical (Diversified) (US); Real Estate (General/Diversified) (US); Reinsurance (US) |
| std_dev_operating_income_10yr | 3 of 188 | Bank (Money Center) (US); Brokerage & Investment Banking (US); Electronics (Consumer & Office) (US) |
| trailing_pe | 3 of 188 | Chemical (Diversified) (US); Electronics (Consumer & Office) (US); Rubber& Tires (US) |
| roe | 2 of 188 | Retail (Building Supply) (US); Tobacco (US) |
| current_pe | 1 of 188 | Electronics (Consumer & Office) (US) |
| price_to_book | 1 of 188 | Tobacco (US) |
Nulls are rendered as “n/a” and never imputed, never zero-filled, and never dropped silently from a mean. Each industry page names the fields that are null for that industry.
What this layer will not do
- Compare CAPE across countries. CAPE is a price index over a ten-year average of reported earnings; two markets with different index composition and different accounting rules produce numbers that cannot be ranked against each other. Only the S&P composite is shown.
- Slice Damodaran through time. One vintage, 2026-01-05, and no other date column in the file.
- Put a Shiller number and a Damodaran number in the same sentence. They are 2024-09 and 2026-01-05.
- Claim that 14 observations settle the question. They do not, and the leave-one-out table on the index page shows how far they are from settling it.