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),

S=aIn.S = aI^{\,n}.

On double-logarithmic axes this is a straight line whose slope is the exponent nn. 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: 100.33≈2.110^{0.33} \approx 2.1. 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.

Left: three power functions (stimulus and sensation both in units of a reference): brightness, n = 0.33, compressive; visual length, n = 1, proportional; electric shock, n = 3.5, expansive. Right: simulated cross-modality matching. When handgrip force is matched to loudness, electric shock and brightness, the matching force is a straight line on double-logarithmic axes with slope equal to the ratio of exponents n_B/n_A.

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 SS into a number through a further power function R=SmR = S^{\,m}, the measured exponent is n×mn \times m, and magnitude estimation alone cannot separate nn from mm (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 ρ=0.85\rho = 0.85) 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 m=0.8m = 0.8. 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.8n0.8n (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 SA=IAnAS_A = I_A^{\,n_A} and SB=IBnBS_B = I_B^{\,n_B}, setting them equal gives

IA=IBnB/nA.I_A = I_B^{\,n_B/n_A}.

On double-logarithmic axes, the matches should therefore fall on a straight line of slope nB/nAn_B/n_A. The framework’s statement that “matching A to B gives an exponent of nB/nAn_B/n_A” 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 ρ=0.85\rho = 0.85, and matches one pair in both directions. The final part treats another case: both senses obey Fechner’s logarithmic law, S=kln⁡(I/I0)S = k\ln(I/I_0), 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 nB/nAn_B/n_A (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 kB/kA=2.5k_B/k_A = 2.5. 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 mm 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 S=aInS = aI^{\,n} 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

MacKay, Donald M. 1963. “Psychophysics of Perceived Intensity: A Theoretical Basis for Fechner’s and Stevens’ Laws.” Science 139 (3560): 1213–16.
Poulton, E. C. 1968. “The New Psychophysics: Six Models for Magnitude Estimation.” Psychological Bulletin 69 (1): 1–19.
Shepard, Roger N. 1981. “Psychological Relations and Psychophysical Scales: On the Status of ‘Direct’ Psychophysical Measurement.” Journal of Mathematical Psychology 24 (1): 21–57.
Stevens, S. S. 1957. “On the Psychophysical Law.” Psychological Review 64 (3): 153–81. https://doi.org/10.1037/h0046162.
Stevens, S. S. 1959. “Cross-Modality Validation of Subjective Scales for Loudness, Vibration, and Electric Shock.” Journal of Experimental Psychology 57 (4): 201–9.
Stevens, S. S. 1961. “To Honor Fechner and Repeal His Law.” Science 133 (3446): 80–86. https://doi.org/10.1126/science.133.3446.80.
Stevens, S. S. 1975. Psychophysics: Introduction to Its Perceptual, Neural, and Social Prospects. Edited by Geraldine Stevens. Wiley.
Stevens, S. S., and H. B. Greenbaum. 1966. “Regression Effect in Psychophysical Judgment.” Perception & Psychophysics 1 (5): 439–46.
Teghtsoonian, Robert. 1971. “On the Exponents in Stevens’ Law and the Constant in Ekman’s Law.” Psychological Review 78 (1): 71–80.

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).