In quantitative economics, public policy analysis, and corporate compensation strategy, evaluating policy outcomes purely through average income or GDP per capita is inherently flawed: it fails to account for economic inequality. The Atkinson Social Welfare Function addresses this limitation by formalising a mathematical framework that explicitly incorporates societal inequality aversion ((epsilon)). It derives the Equally Distributed Equivalent Income ((y_{ede}))—the hypothetical uniform income level that would generate the same social welfare as the actual unequal distribution. In Microsoft Excel, leveraging modern dynamic array formulas alongside LAMBDA, MAP, and VSTACK empowers analysts to construct dynamic welfare models without macros.
Understanding Atkinson Social Welfare Formulation
The Atkinson Social Welfare Function evaluates social welfare ((W)) and Equally Distributed Equivalent Income ((y_{ede})) based on individual incomes (y_i) and inequality aversion (epsilon ge 0):
y_{ede} = ( (1 / N) * SUM( y_i^(1 - epsilon) ) )^(1 / (1 - epsilon)) [for epsilon != 1]
y_{ede} = EXP( (1 / N) * SUM( LN(y_i) ) ) [for epsilon == 1]
W = y_{ede} [Social Welfare Metric]
- (epsilon = 0) (Utilitarian Benchmark): Zero aversion to inequality. Social welfare equals the simple arithmetic mean ((mu)).
- (epsilon > 0): Reflects increasing social aversion to disparity. As (epsilon) rises, (y_{ede}) drops further below the arithmetic mean.
- Welfare Loss from Inequality: Defined as (mu – y_{ede}), representing the monetary loss per capita attributable solely to unequal distribution.
Building the Dynamic LAMBDA Welfare Engine
Assuming raw income or revenue observations reside in A2:A50, create a custom formula using LET:
=LAMBDA(values, epsilon,
LET(
clean_y, FILTER(values, ISNUMBER(values) * (values > 0)),
n, ROWS(clean_y),
mu, AVERAGE(clean_y),
y_ede, IF(
epsilon = 0,
mu,
IF(
epsilon = 1,
EXP((1 / n) * SUM(LN(clean_y))),
((1 / n) * SUM(clean_y^(1 - epsilon)))^(1 / (1 - epsilon))
)
),
welfare_loss, mu - y_ede,
pct_loss, welfare_loss / mu,
HSTACK(y_ede, welfare_loss, pct_loss)
)
)
Constructing the Executive Sensitivity Dashboard with VSTACK
Assemble an executive sensitivity table comparing multiple inequality aversion levels ((epsilon = 0.0, 0.5, 1.0, 2.0)) using VSTACK:
=LET(
incomes, B2:B40,
clean_vals, FILTER(incomes, ISNUMBER(incomes) * (incomes > 0)),
n_count, ROWS(clean_vals),
mean_inc, AVERAGE(clean_vals),
calc_ede, LAMBDA(eps,
IF(eps = 0, mean_inc, IF(eps = 1, EXP((1 / n_count) * SUM(LN(clean_vals))), ((1 / n_count) * SUM(clean_vals^(1 - eps)))^(1 / (1 - eps))))
),
ede_00, calc_ede(0.0),
ede_05, calc_ede(0.5),
ede_10, calc_ede(1.0),
ede_20, calc_ede(2.0),
headers, HSTACK("Aversion Parameter", "Equally Distributed Equivalent (y_ede)", "Inequality Welfare Loss", "Relative Welfare Cost"),
row1, HSTACK("Epsilon = 0.0 (Utilitarian)", TEXT(ede_00, "$#,##0.00"), TEXT(mean_inc - ede_00, "$#,##0.00"), TEXT(0, "0.0%")),
row2, HSTACK("Epsilon = 0.5 (Moderate)", TEXT(ede_05, "$#,##0.00"), TEXT(mean_inc - ede_05, "$#,##0.00"), TEXT((mean_inc - ede_05) / mean_inc, "0.0%")),
row3, HSTACK("Epsilon = 1.0 (Standard)", TEXT(ede_10, "$#,##0.00"), TEXT(mean_inc - ede_10, "$#,##0.00"), TEXT((mean_inc - ede_10) / mean_inc, "0.0%")),
row4, HSTACK("Epsilon = 2.0 (High Aversion)", TEXT(ede_20, "$#,##0.00"), TEXT(mean_inc - ede_20, "$#,##0.00"), TEXT((mean_inc - ede_20) / mean_inc, "0.0%")),
VSTACK(headers, row1, row2, row3, row4)
)
Key Methodological Advantages
- Mathematical Rigour: Handles the boundary condition (epsilon = 1) seamlessly via the geometric mean (
EXP(AVERAGE(LN()))), preventing division-by-zero errors. - Instant Scenario Re-evaluation: Updating source figures instantly spills refreshed welfare equivalents across the entire matrix.
- Universal Compatibility: Register
CALC_ATKINSON_WELFAREin Name Manager to empower organizational planners to assess distribution models across any corporate worksheet effortlessly.