5D Library › Psychophysics, the Weber-Fechner Law and Optimal Bayesian Multisensory Integration · 中文
Chapter 2 Stevens’s Power Law and Cross-Modality Matching
Asking directly how strong a sensation is
Fechner measured sensation indirectly, by counting JNDs. In the 1950s Stevens took a blunter route: ask people to put a number on their sensation. In magnitude estimation the experimenter presents a standard, calls its sensation 10, and asks the observer to give numbers to other stimuli in proportion: 20 for something that feels twice as strong, 5 for half. In magnitude production the roles are reversed: the experimenter names a number and the observer adjusts the stimulus until the sensation matches it.
Across many senses Stevens obtained results of one form: the numbers given grow as a power function of stimulus intensity (Stevens 1957),
On double-logarithmic axes this is a straight line whose slope is the exponent . In 1961 he published a paper in Science entitled “To honor Fechner and repeal his law” (Stevens 1961).
The exponents and the conditions of measurement
The framework lists three exponents: about 0.33 for brightness, 1.0 for length and 3.5 for electric shock. Checked against Stevens’s summary table (Stevens 1975), the three figures are right, but each comes with definite conditions:
| Continuum | Exponent | Stimulus condition |
|---|---|---|
| Brightness | 0.33 | 5° target viewed in the dark |
| Brightness | 0.5 | point source; or a brief flash |
| Visual length | 1.0 | projected line |
| Loudness | 0.67 | sound pressure of a 3000 Hz tone |
| Heaviness | 1.45 | lifted weights |
| Muscle force | 1.7 | static contraction (e.g. handgrip) |
| Electric shock | 3.5 | current through the fingers |
A few comments. The exponent for brightness changes with the size of the target and the manner of presentation, so “a brightness exponent of 0.33” holds only under particular conditions. Loudness 0.67 is relative to sound pressure; since intensity is proportional to the square of pressure, the exponent relative to intensity is about 0.33, which is where “loudness roughly doubles every 10 dB” comes from: . Senses with exponents below 1 are compressive and pack an enormous physical range into a limited range of sensation; senses with exponents above 1 are expansive: a slight increase in current makes the sensation surge, which is useful as a warning of injury.
What magnitude estimation measures
Magnitude estimation looks “direct”, but it rests on an assumption: that people use numbers in proportion to their sensations. There are three main lines of criticism.
The first is the regression effect. Stevens and Greenbaum (1966) found that the same sense yields a smaller exponent by magnitude estimation and a larger one by magnitude production: in both tasks people tend to pull their responses toward the middle of the range they are using (Stevens and Greenbaum 1966). The second concerns context and range. Poulton (1968) listed a range of biases in magnitude estimation, including the effects of the stimulus range, of the value of the first standard and of habits of number use (Poulton 1968); Teghtsoonian (1971) proposed that the measured exponents of different senses are roughly inversely related to the logarithm of each continuum’s stimulus range, so that an exponent may reflect the range more than the way the sensation itself grows (Teghtsoonian 1971). The third is that numbers are themselves a kind of “sensation”. Shepard (1981) pointed out that if people convert an internal sensation into a number through a further power function , the measured exponent is , and magnitude estimation alone cannot separate from (Shepard 1981).
The program below simulates three senses (true exponents 0.33, 1.0 and 3.5 from the table), with every judgement pulled toward the middle of the range (coefficient ) and log-normal noise added, and fits exponents by both magnitude estimation and magnitude production. It then repeats the exercise assuming that the observers use numbers through their own exponent . The stimulus ranges are illustrative.
Calculation
# Magnitude estimation and production with a "regression toward the middle" of the
# range (illustrative model of Stevens & Greenbaum 1966). True exponents from Stevens's
# table: brightness 0.33 (5 deg target, dark), visual length 1.0, electric shock 3.5.
# rho = 0.85 shrinks every judgement toward the middle of the range used; noise is
# log-normal (sd 0.10 in log10 units). Exponents are least-squares slopes on log axes.
import math, random
def slope(xs, ys):
mx, my = sum(xs) / len(xs), sum(ys) / len(ys)
return (sum((x - mx) * (y - my) for x, y in zip(xs, ys))
/ sum((x - mx) ** 2 for x in xs))
def experiment(rng, n, lo, hi, rho=0.85, m=1.0, reps=400):
li = [lo + (hi - lo) * j / 9 for j in range(10)] # log10 stimulus levels
mid_s = n * (lo + hi) / 2 # log10 sensation, middle
x_e, y_e, x_p, y_p = [], [], [], []
for _ in range(reps):
for x in li: # estimation: number for I
s = mid_s + rho * (n * x - mid_s)
x_e.append(x); y_e.append(m * s + rng.gauss(0, 0.10))
for x in li: # production: I for number
target = n * x # number given (log10)
s = mid_s + rho * (target - mid_s)
x_p.append(s / n + rng.gauss(0, 0.10 / n)); y_p.append(m * target)
return slope(x_e, y_e), slope(x_p, y_p)
if __name__ == "__main__":
rng = random.Random(1957)
rows = (("brightness", 0.33, 0.0, 4.0), ("visual length", 1.0, 0.0, 1.5),
("electric shock", 3.5, 0.0, 0.6))
print("continuum true n range(log10 I) estimation production geo. mean")
for name, n, lo, hi in rows:
e, p = experiment(rng, n, lo, hi)
print(f"{name:15s} {n:6.2f} {hi - lo:10.1f} {e:13.2f} {p:11.2f}"
f" {math.sqrt(e * p):10.2f}")
print("repeat, with people using numbers through their own exponent m = 0.8:")
for name, n, lo, hi in rows:
e, p = experiment(rng, n, lo, hi, m=0.8)
print(f" {name:15s} estimation {e:4.2f} production {p:4.2f}"
f" geo. mean {math.sqrt(e * p):4.2f} (0.8 x n = {0.8 * n:.2f})")
# continuum true n range(log10 I) estimation production geo. mean
# brightness 0.33 4.0 0.28 0.36 0.32
# visual length 1.00 1.5 0.85 1.11 0.97
# electric shock 3.50 0.6 2.98 3.99 3.45
# repeat, with people using numbers through their own exponent m = 0.8:
# brightness estimation 0.22 production 0.29 geo. mean 0.25 (0.8 x n = 0.26)
# visual length estimation 0.68 production 0.88 geo. mean 0.78 (0.8 x n = 0.80)
# electric shock estimation 2.38 production 3.18 geo. mean 2.75 (0.8 x n = 2.80)With the regression effect alone, magnitude estimation gives exponents that are too small (brightness 0.28, length 0.85, shock 2.98) and magnitude production exponents that are too large (0.36, 1.11, 3.99); their geometric means (0.32, 0.97, 3.45) come close to the true values, which is what Stevens and Greenbaum recommended. The geometric means fall slightly short because the observers’ errors in adjusting the stimulus in magnitude production flatten the regression slope. The second set of results illustrates Shepard’s point: when observers use numbers with an exponent of 0.8, the geometric means for all three senses become about (0.25, 0.78, 2.75), and nothing in the data looks amiss. The exponents given by magnitude estimation blend the sensation with the way numbers are used.
Cross-modality matching
Stevens answered such criticisms with a method that uses no numbers: cross-modality matching. The observer adjusts the intensity of one sensation (handgrip force, say) until it feels “as strong as” another (a sound, say). If the two sensations are and , setting them equal gives
On double-logarithmic axes, the matches should therefore fall on a straight line of slope . The framework’s statement that “matching A to B gives an exponent of ” is correct. Stevens (1959) ran such experiments with loudness, vibration and electric shock, and the matching slopes agreed roughly with the ratios of the exponents obtained by magnitude estimation (Stevens 1959).
The program below simulates five matches (taking the exponent for handgrip from the table’s “muscle force”, 1.7), first without and then with a regression effect of , and matches one pair in both directions. The final part treats another case: both senses obey Fechner’s logarithmic law, , and bisection finds the intensities that make them equal.
Calculation
# Cross-modality matching. If S_A = I_A^nA and S_B = I_B^nB, adjusting A until it feels as
# strong as B gives I_A = I_B^(nB / nA): on log axes a line of slope nB / nA. Simulated
# with matching noise (sd 0.05 log10) and the same regression toward the middle (rho).
# Exponents from Stevens's table (handgrip: "muscle force, static contraction" 1.7).
import math, random
N = {"loudness": 0.67, "brightness": 0.33, "length": 1.0, "shock": 3.5, "handgrip": 1.7}
def slope(xs, ys):
mx, my = sum(xs) / len(xs), sum(ys) / len(ys)
return (sum((x - mx) * (y - my) for x, y in zip(xs, ys))
/ sum((x - mx) ** 2 for x in xs))
def match(rng, a, b, rho=1.0, span=1.0, reps=300):
"""adjust continuum a to match b; return the fitted slope of log I_a on log I_b"""
xb = [span * j / 9 for j in range(10)]
mid = N[b] * span / 2
xs, ys = [], []
for _ in range(reps):
for x in xb:
s = mid + rho * (N[b] * x - mid) # felt strength, regressed
xs.append(x); ys.append(s / N[a] + rng.gauss(0, 0.05))
return slope(xs, ys)
if __name__ == "__main__":
rng = random.Random(1959)
print("adjust A to match B predicted nB/nA simulated with rho = 0.85")
pairs = (("handgrip", "loudness"), ("handgrip", "shock"), ("handgrip", "brightness"),
("loudness", "shock"), ("length", "brightness"))
for a, b in pairs:
print(f" {a:9s} <- {b:10s} {N[b] / N[a]:15.3f} {match(rng, a, b):11.3f}"
f" {match(rng, a, b, 0.85):13.3f}")
s1, s2 = match(rng, "loudness", "shock", 0.85), match(rng, "shock", "loudness", 0.85)
print(f"regression: slope(A<-B) x slope(B<-A) = {s1:.3f} x {s2:.3f} = {s1 * s2:.3f}"
" (1 without)")
# Two Fechner laws S = k ln(I / I0), thresholds 0.2 and 3: match A to B by bisection.
ka, kb, a0, b0 = 1.0, 2.5, 0.2, 3.0
def matched(ib):
lo, hi = 0.0, 50.0 # search in log I_a
for _ in range(100):
mid = (lo + hi) / 2
weaker = ka * (mid - math.log(a0)) < kb * math.log(ib / b0)
lo, hi = (mid, hi) if weaker else (lo, mid)
return math.exp(hi)
ib = [3 * 10 ** x for x in (0.5, 1.0, 1.5, 2.0)]
sl = [math.log(matched(y) / matched(x)) / math.log(y / x) for x, y in zip(ib, ib[1:])]
print("two Fechner (log) laws matched: log-log slopes",
", ".join(f"{v:.3f}" for v in sl), f"(kB / kA = {kb / ka})")
# adjust A to match B predicted nB/nA simulated with rho = 0.85
# handgrip <- loudness 0.394 0.389 0.331
# handgrip <- shock 2.059 2.061 1.753
# handgrip <- brightness 0.194 0.191 0.169
# loudness <- shock 5.224 5.225 4.437
# length <- brightness 0.330 0.330 0.282
# regression: slope(A<-B) x slope(B<-A) = 4.439 x 0.160 = 0.712 (1 without)
# two Fechner (log) laws matched: log-log slopes 2.500, 2.500, 2.500 (kB / kA = 2.5)Without a regression effect, the simulated slopes agree with the predicted (handgrip matched to shock, for instance: 2.059 and 2.061). With the regression effect every slope shrinks by about 15 %. Matching loudness to shock and then shock to loudness gives two slopes whose product should be exactly 1 without regression; here it is only 0.712. This check is useful: a product clearly below 1 signals a regression effect.
The last line matters more. When both senses obey a logarithmic law, cross-modality matching also gives a straight line, with slope equal to the ratio of the logarithmic coefficients . MacKay (1963) made this point: if people compare internal (logarithmic) representations of two sensations, cross-modality matching and magnitude estimation will both produce power functions even if each sense obeys Fechner’s law (MacKay 1963). Cross-modality matching tests the internal consistency of a set of senses; it cannot decide between Fechner and Stevens.
Note
Fechner and Stevens measured different things. Fechner’s method rests on discrimination (can two stimuli be told apart?), Stevens’s on judgement (how strong is this stimulus?). A sense can obey Weber’s law in discrimination and show a power function in magnitude judgements. Both “laws” summarise the results of particular experimental procedures; neither is a quantity that can be read directly off the nervous system.
Hypothesis · not established
Not yet established: “how a person uses numbers” is a stable personal trait across senses. If Shepard’s number-use exponent differs from person to person, then the exponents measured for one person on several senses should be high together or low together, and so correlate positively. If, after correcting for reliability, the exponents of the same people on three or more continua show no correlation, the hypothesis is false.
Chapter summary
Stevens’s magnitude estimation yields power functions for many senses. The three exponents in the framework (brightness 0.33, length 1.0, shock 3.5) agree with the summary table, but each has specific conditions: the brightness exponent changes with target size and duration, and loudness 0.67 is relative to sound pressure. Magnitude estimation is affected by regression, range and context, and measures a blend of sensation and number use. The slope of a cross-modality match equals the ratio of two exponents, which the program reproduces exactly; but two logarithmic laws matched against each other also produce a power function, so matching cannot prove the power law superior to the logarithmic one. The next chapter turns from single senses to the combination of several.
References
Fan, Y. (2026). Psychophysics, the Weber-Fechner Law and Optimal Bayesian Multisensory Integration: From Stevens's Power Law and the McGurk Effect to Sensory Substitution, Read Beside Classical Chinese Thought on the Six Senses [心理物理学、韦伯-费希纳定律与多感官贝叶斯整合的数学模型] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23788548 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).