從分布函數法到一條捷徑
在上一篇指南裡,你學到了分布函數法:要找出 Y = g(X) 的分布,你寫下 P(Y <= y),把它翻譯成關於 X 的敘述,讀出 F_X,再微分得到密度。這套做法永遠不會失敗。但當 g 是像 Y = 2X + 1 或 Y = X^2 這樣溫和的東西時,它會讓人覺得手續很繁瑣,而做過幾個例子後,你會開始注意到同一個模式一再重複。變數變換公式就是這個模式,把它打包好,讓你可以直接跳到答案。
這條公式適用於一個特別友善的情況:X 是連續型隨機變數,密度為 f_X,而 g 在 X 的支撐集上是一個平滑、嚴格單調(一對一)的函數。「嚴格單調」是指 g 總是遞增或總是遞減,使得每個 y 都恰好來自一個 x。許多你關心的變換——縮放、平移、取對數、取指數——在適當的區間上都是這樣的。當 g 把兩個 x 值摺疊到同一個 y 上時(就像 Y = X^2 把 +2 和 -2 都送到 4 那樣),這條簡單公式就不能照字面套用,我們會在最後處理那種情況。
公式本身,以及導數為什麼會出現
陳述如下。若 Y = g(X),其中 g 平滑且嚴格單調,令 x = h(y) 為反函數,使得 h 把 g 還原。那麼變數變換公式說 Y 的密度為 f_Y(y) = f_X(h(y)) * |h'(y)|。用白話說:要得到新密度在 y 處的高度,就取舊密度在對應點 x = h(y) 處的值,再乘以反函數導數的絕對值。那個多出來的因子 |h'(y)| 就是整個故事的關鍵;所有微妙之處都住在那裡。
為什麼會有那個因子?因為密度是「每單位長度的機率」,而一個變換會改變你把機率攤開在多長的長度上。想像一條寬為 dx 的細長 x 值薄片;它裝著大約 f_X(x) * dx 的機率。變換把那條薄片映成一條寬為 dy 的 y 值薄片,而這兩條薄片必須裝著相同的機率——機率不會因為換個標籤而被創造或消滅。所以 f_Y(y) * dy = f_X(x) * dx,整理後得到 f_Y(y) = f_X(x) * |dx/dy|。導數 |dx/dy| = |h'(y)| 正是局部的拉伸因子:一單位的 y 長度對應到多少 x 長度。
一個你可以親手驗算的範例
設 X 在 [0, 1] 上均勻分布,所以當 0 <= x <= 1 時 f_X(x) = 1,其他地方為 0。定義 Y = -ln(X) / 2——一個平滑、嚴格遞減的變換,把區間 (0, 1] 映到 [0, 無窮)。我們預期 Y 會是指數型的隨機變數;讓我們確認一下並釘出它的速率。先求反函數:把 y = -ln(x)/2 對 x 解出,得到 x = h(y) = e^(-2y)。它的導數是 h'(y) = -2 * e^(-2y),所以 |h'(y)| = 2 * e^(-2y)。
現在代入公式。因為 f_X 在其支撐集上等於 1,所以對 y >= 0 而言,f_Y(y) = f_X(e^(-2y)) * |h'(y)| = 1 * 2 * e^(-2y) = 2 * e^(-2y)。這恰好就是速率 lambda = 2 的指數型隨機變數的密度。所以把一個均勻變數擠過 Y = -ln(X)/2,就會產生一個指數分配——這個事實在你學習如何模擬隨機變數時會再次用上。你完全不用公式也能驗算這個答案:它應該積分為 1,而 2 * e^(-2y) 從 0 到無窮的積分確實等於 1。
- 檢查 g 在 X 的支撐集上是平滑且嚴格單調的(如果它會摺疊,就把範圍切成幾段單調的部分——見最後一節)。
- 求反函數:把 y = g(x) 對 x 解出,得到 x = h(y),並記下 y 的新取值範圍。
- 對反函數微分得到 h'(y),再取絕對值 |h'(y)|。
- 寫下 f_Y(y) = f_X(h(y)) * |h'(y)|,它在新範圍內成立,範圍外為零。
- 驗算:確認 f_Y 在其範圍上的積分為 1。
線性情況,以及關於支撐集的警告
最簡單也最常見的變換是線性的:Y = aX + b,其中 a 不等於 0。反函數是 x = (y - b)/a,它的導數是 1/a,所以 |h'(y)| = 1/|a|。公式給出 f_Y(y) = f_X((y - b)/a) * (1/|a|)。這短短一行解釋了一個你已經倚賴了一陣子的事實:一個常數平移 b 只是把密度往旁邊滑動,並不改變它的形狀;而一個縮放因子 a 把它水平拉伸 |a| 倍,並且——為了讓總面積保持為 1——把它的高度壓縮為 1/|a|。拉得越寬就變得越矮;這個取捨是由機率守恆所強制的。
把這套用到 X ~ Normal(mu, sigma^2) 與 Y = (X - mu)/sigma 上。這裡 a = 1/sigma、b = -mu/sigma,而代數運算會把鐘形曲線塌縮成標準常態分配的密度。這就是變數變換公式悄悄地為你先前學過的 z 分數標準化提供了正當性——它不是魔法,只是把線性規則套用到高斯分布上而已。
當 g 不是一對一時,以及邁向多維的一躍
那麼 Y = X^2 呢?這裡 +x 和 -x 都落到同一個 y 上。乾淨的公式不能直接套用,因為每個 y 都有兩個原像。誠實的補救辦法是:把定義域切成幾段在其上 g 確實是一對一的部分,在每一段上套用公式,再把各部分的貢獻加起來。對 Y = X^2 而言,兩個分支給出對 y > 0 而言 f_Y(y) = [f_X(sqrt(y)) + f_X(-sqrt(y))] * (1/(2*sqrt(y)))。因子 1/(2*sqrt(y)) 就是來自 x = sqrt(y) 的 |h'(y)|;對各分支求和才是新加入的成分。這正是那種摺疊的情況,在這種情況下上一篇指南的分布函數法往往是更安全的路線,而這兩種方法必須給出一致的答案。
不過,這條公式之所以如此重要,真正的原因在於它可以推廣到好幾個變數——而在那裡分布函數法會變得真正令人頭痛。如果你把一對 (X1, X2) 變換成 (Y1, Y2),那個單一的導數 |h'(y)| 就會被一個偏導數矩陣的行列式的絕對值所取代,也就是 Jacobi 行列式。想法是一模一樣的:Jacobi 行列式衡量這個變換把一小塊面積(或體積)拉伸或壓縮了多少,而機率守恆強制密度要按那個因子來縮放。我們稍後會正式遇到這條多變數變換規則;現在只要記住一個畫面:Jacobi 行列式就是 |dx/dy| 的多維版本。
最後一個連結。變數變換的全部重點,就是描述前推分布——也就是 g 把 X 的分布「推」到哪裡去。一個著名的成果是 Box-Muller 變換,它把兩個獨立的均勻變數送過一個巧妙的雙變數映射,把它們前推成兩個獨立的標準常態變數;正是 Jacobi 行列式讓這一切恰好得出高斯密度。請記住這個工具誠實的邊界:它是一條連續型變數的公式。離散型變數上的機率質量不會像密度那樣被拉伸——你只要把質量重新貼標籤並重新加總即可——而且要始終記得,密度不是機率;|h'(y)| 這個因子之所以說得通,正是因為我們是在密度之間轉換,而不是在機率之間轉換。