Foundations · The Valuation Engineer
Machine-readable Prolog representation of this entry's facts, rules, and worked example.
Download entry.pl%% entry.pl
%%
%% Prolog companion to Foundations Vol. 1, Issue 1, Article 003
%% Title: Hedonic Price Function
%% Author: Bert Craytor
%% Concept: hedonic_price_function
%% Version: 0.1.0-draft
% =====================================================================
% DICTIONARY IMPORT
% =====================================================================
:- use_module('../../../../tools/dictionary/dictionary').
:- dictionary_release('dictionary-2026.1').
% --- From the dictionary (loaded via :- use_module above) -----------
% term(hedonic_price_function, "Hedonic Price Function", economic_theory,
% "The hedonic price function is the equilibrium mapping from
% points in the characteristics space of a heterogeneous good to
% transaction prices, formed as the envelope of buyer bid
% functions and seller offer functions in a competitive market.",
% published, 'dictionary-2026.1').
%
% term(bid_function, "Bid Function", economic_theory, ...).
% term(offer_function, "Offer Function", economic_theory, ...).
% term(sales_comparison_approach, ...).
% term(cost_approach, ...).
% term(income_approach, ...).
%
% formalized_by(hedonic_price_function, rosen_1974).
% depends_on(hedonic_price_function, heterogeneous_good).
% depends_on(hedonic_price_function, characteristics_space).
% ---------------------------------------------------------------------
:- use_terms([ hedonic_price_function, heterogeneous_good,
characteristics_space, implicit_price, hedonic_regression,
bid_function, offer_function,
sales_comparison_approach, cost_approach, income_approach,
adjustment, reconciliation ]).
:- use_relations([related/2, depends_on/2, formalized_by/2]).
% =====================================================================
% ARTICLE SUBJECT
% =====================================================================
article_concept(hedonic_price_function).
article_issue(volume(1), number(1), year(2026)).
article_id('foundations.2026.003').
% =====================================================================
% LOCAL VOCABULARY
% =====================================================================
local_term(equilibrium).
local_term(envelope).
local_term(functional_form).
local_term(market_segment).
local_term(linearity).
local_term(separability).
local_term(time_adjustment).
local_term(coefficient).
local_term(intercept).
% =====================================================================
% FORMAL ATTRIBUTION
% =====================================================================
attributed_formalization(hedonic_price_function, rosen_1974).
% =====================================================================
% CONSTRUCTION: ENVELOPE OF BID AND OFFER FUNCTIONS
% =====================================================================
%
% The Rosen (1974) construction: p(z) is the envelope of buyer bid
% functions and seller offer functions.
primitive_of_construction(bid_function, buyer).
primitive_of_construction(offer_function, seller).
constructed_as_envelope_of(hedonic_price_function,
[bid_function, offer_function]).
emerges_from(hedonic_price_function, market_equilibrium).
% Property that flows from the construction: the function is not
% chosen by any single market participant.
property(hedonic_price_function, not_set_by_individual_participant).
property(hedonic_price_function, equilibrium_object).
property(hedonic_price_function, defined_per_market_segment).
% =====================================================================
% APPRAISER ENCOUNTERS — IMPLICIT MANIPULATIONS OF p(z)
% =====================================================================
implicit_manipulation_of_hedonic(
adjustment,
sales_comparison_approach,
"Asserts a local slope of p in the relevant characteristic dimension.").
implicit_manipulation_of_hedonic(
reconciliation,
multi_approach_valuation,
"Three approaches should converge on the same point of p; divergence requires editorial judgment.").
implicit_manipulation_of_hedonic(
time_adjustment,
market_analysis,
"p shifts over time; appreciation rates are statements about that shift.").
% =====================================================================
% DEFENSIBILITY QUESTIONS
% =====================================================================
%
% The article names three questions the hedonic-price-function framing
% sharpens.
defensibility_question(function_existence,
"In thin or rapidly-changing markets, the equilibrium function may be poorly defined; the inferential machinery operates on a shaky foundation.").
defensibility_question(segment_specificity,
"One function per market segment, not one function globally. Conflating segments is usually wrong.").
defensibility_question(functional_form,
"Rosen showed only that p is an envelope, not its shape. Empirically nonlinear with interactions and thresholds; estimation requires defending the form.").
% =====================================================================
% WORKED EXAMPLE: ADDITIVE LINEAR SPECIFICATION
% =====================================================================
%
% For the Pacifica neighborhood, the article adopts the additive linear
% specification:
% p(z) = β0 + β_gla*z_gla + β_lot*z_lot + β_view*z_view + β_cond*z_cond
%
% The next entry (004) takes the coefficients as implicit prices; entry
% 005 estimates them by hedonic regression.
:- consult('../../kb/pacifica_comps').
specification_form(additive_linear).
specification_assumption(linearity_in_levels,
"Contribution of each characteristic is linear in its level.").
specification_assumption(no_interactions,
"Characteristics do not interact in the price function.").
specification_caveat(
"Both assumptions are testable and frequently violated; adopted here as a starting point.").
% Coefficient values reported in the article (estimated in entry 005,
% asserted here so this entry's worked example can be queried).
coefficient(intercept, 80777.07).
coefficient(beta_gla, 574.93).
coefficient(beta_lot, 22.70).
coefficient(beta_view, 86179.03).
coefficient(beta_cond, 49824.33).
%! predicted_price(?Property, -Predicted) is det.
%
% The fitted additive-linear hedonic price function applied to a
% property's characteristics. Symbolic view/cond are mapped to {0,1}
% and {1,2,3} respectively.
predicted_price(P, Predicted) :-
coord(P, gla_sqft, GLA),
coord(P, lot_sqft, Lot),
coord(P, view, View),
coord(P, cond_numeric, Cond),
coefficient(intercept, B0),
coefficient(beta_gla, Bg),
coefficient(beta_lot, Bl),
coefficient(beta_view, Bv),
coefficient(beta_cond, Bc),
Predicted is B0 + Bg * GLA + Bl * Lot + Bv * View + Bc * Cond.
coord(P, A, N) :-
attribute_value(P, A, V),
( number(V) -> N = V
; A == view, V == yes -> N = 1
; A == view, V == no -> N = 0
; V = N
).
% =====================================================================
% THE CENTRAL CONCEPTUAL MOVE
% =====================================================================
%
% The function exists, in principle, before estimation. The function is
% a property of the market; estimation is recovery.
claim(function_precedes_estimation,
"The hedonic price function is a property of the market and exists conceptually prior to any specific fitted model. Estimation is recovery, and recovery may be partial, biased, or noisy.").
% =====================================================================
% CROSS-REFERENCES
% =====================================================================
cross_reference(heterogeneous_good).
cross_reference(characteristics_space).
cross_reference(implicit_price).
cross_reference(hedonic_regression).
The source above is the canonical Prolog form of this entry. It imports the journal-wide dictionary (Issues/tools/dictionary/) and can be queried using SWI-Prolog. See the article's prose form (PDF / HTML galleys) for the human-readable exposition.