隨機變數的函數,仍是一個隨機變數
到了現在,你對單一隨機變數 X 已經很熟練了——它的質量或密度、它的 cdf、它的期望值。但真正要緊的問題,很少就停在 X 本身。工程師量到一個隨機電壓 X,他在乎的是功率,而功率約莫隨 X^2 變化。物理學家測到一個隨機速度,想要的是動能。交易員手上握著一個隨機的對數報酬,需要的卻是真正的價格,也就是 e 的那個報酬次方。每一種情況裡,你都從一個你已知其分配的東西出發,把它推過一個函數 g,然後問:這個新的量 Y = g(X),分配是什麼?
首先要釐清的是,這裡沒有什麼奇異之處。Y = g(X) 本身就是個再普通不過的隨機變數:餵給它同一個隨機結果,套上 g,讀出一個數字。所以 Y 有它自己的 cdf、自己的密度、自己的期望值——而整個這個階段,講的就是找出它們的機器。本篇用最可靠的那條路徑,也就是累積分布函數法,來處理函數的分配。後面幾篇會把它特化成俐落的變數變換公式、特化成處理和的卷積,以及特化成順序統計量;但累積分布函數法是它們全都立足其上的基岩,也是你拿不準時該伸手去拿的那一招。
去追機率,不要追公式
整個想法用一句話說完。要找出 Y = g(X) 的分配,不要試圖直接去變換密度——而是把每一個關於 Y 的問題,翻譯回關於 X 的問題,因為在 X 那邊你早就知道答案。做這件事最乾淨的地方是累積分布函數,因為 cdf 永遠只問一種問題:「不超過 y 的機率是多少?」寫下 F_Y(y) = P(Y <= y),然後代入 Y = g(X),把不等式 g(X) <= y 對 X 解出來。你把一個關於 Y 的事件,轉換成一個關於 X 的事件,用你手上已有的 X 的 cdf 來計算它,掉出來的答案就是 F_Y,也就是 Y 的 cdf。
一旦 F_Y 到手,要拿到密度就是你已經學過的那一步:微分。從 cdf 還原密度就只是 f_Y(y) = F_Y(y) 的導數。所以完整的方法是一個俐落的三步迴圈,而且請注意,無論 g 是遞增還是遞減、是不是一對一、會不會把兩個輸入摺到同一個輸出上,它都行得通——因為在 cdf 這個層次上,你始終只在處理一個不等式,而不等式會誠實地把那一切都接住。正是這份穩健,讓它成為那個永遠不會讓你失望的「最後手段」。
The CDF method, in three steps:
1. F_Y(y) = P(Y <= y) = P( g(X) <= y )
2. solve g(X) <= y -> an event about X
-> evaluate with F_X
3. f_Y(y) = d/dy F_Y(y) (differentiate)一個實作例子:均勻分布的平方
令 X 在 [0, 1] 上服從均勻分布——在那個區間上密度平平地等於 1——再令 Y = X^2。憑直覺,把 0 到 1 之間的數平方會把它們*縮小*,並把結果擠向 0(因為 0.5^2 = 0.25、0.1^2 = 0.01),所以我們預期 Y 會在低端堆積。累積分布函數法把這份直覺變得精確。對於介於 0 與 1 之間的目標值 y,寫下 F_Y(y) = P(X^2 <= y)。由於這裡 X 從不為負,X^2 <= y 與 X <= sqrt(y) 是同一個事件。這就是那關鍵的翻譯:一個關於 Y 的問題,已經變成一個關於 X 的問題。
- 建立:對 y 在 [0, 1] 內,F_Y(y) = P(Y <= y) = P(X^2 <= y)。
- 翻譯事件:因為 X >= 0,不等式 X^2 <= y 恰好就是 X <= sqrt(y)。所以 F_Y(y) = P(X <= sqrt(y)) = F_X(sqrt(y))。
- 用你已知的:均勻分布的 cdf 在 [0, 1] 上是 F_X(x) = x,所以 F_X(sqrt(y)) = sqrt(y)。因此 F_Y(y) = sqrt(y)。
- 微分得到密度:f_Y(y) = sqrt(y) 的導數 = 1 / (2 sqrt(y)),其中 y 在 (0, 1] 內。
來讀讀這個答案在告訴你什麼。密度 f_Y(y) = 1 / (2 sqrt(y)) 在 y 趨近 0 時會爆掉——它在底端極大、在 1 附近很小——這正是我們猜的「在零附近堆積」。而它也印證了上一個階段的一條教訓:密度不是機率。這裡 f_Y(y) 在 0 附近衝向無窮大,但這沒問題,因為密度不是機率;任何單一點的機率依然是零,只有 f_Y 在某區間上的*面積*才是真正的機率。(順手檢查一下:1 / (2 sqrt(y)) 從 0 到 1 的積分總面積等於 1——是個合法的分配。)
當 g 走相反方向,或會摺疊時
平方那個例子裡,g 在相關範圍上是遞增的,所以不等式乾淨地翻了過來。有兩種狀況會不斷出現,而累積分布函數法兩種都吞得下,因為它始終只對事件進行推理。第一,遞減的 g 會把不等式反向。比方說若 Y = -X,那麼 Y <= y 意思是 -X <= y,也就是 X >= -y,所以 F_Y(y) = P(X >= -y) = 1 - F_X(-y)。每當你除以一個負數,或反轉一個遞減函數時,不等號就會翻向——而把這個翻向弄對,是最常見的單一失誤。靠著機率的單調性(較大的集合所帶的機率至少一樣多)來把帳目記誠實。
第二種,也更有意思:g 可能會摺疊——兩個不同的輸入落到同一個輸出上,所以 g 不是一對一的。把一個可能為負的變數平方就會這樣:x 與 -x 都給出同一個 x^2。假設 X 可以取遍整條實線,且 Y = X^2。那麼(對 y > 0)Y <= y 意思是 X^2 <= y,這是*雙邊*事件 -sqrt(y) <= X <= sqrt(y)。所以 F_Y(y) = F_X(sqrt(y)) - F_X(-sqrt(y)):你必須把摺到 y 上的兩個分枝都收集起來。這正是累積分布函數法值回票價之處——後面的變數變換公式假設 g 是一對一的,但累積分布函數法不需要這樣的承諾。它只是把 X 線上所有映射到 y 以下的片段都收攏起來。
為什麼用這個方法,以及它通往何處
值得點明:為什麼扛起重擔的是 cdf,而不是密度。cdf 是一個機率——F_Y(y) 真的就是 P(Y <= y),一個介於 0 與 1 之間的貨真價實的數——所以對它代入與操作,從不會違反任何規則。密度是一個「率」,不是機率,你不能單純地把 g「塞進」密度裡;下一篇的變數變換公式之所以存在,正是為了修補你硬要這麼做時出的差錯,它插入一個伸縮因子(雅可比行列式),來計入 g 如何壓縮或拉伸座標軸。累積分布函數法則完全繞開這件事:因為它在事件的層次上運作,那份伸縮會在你最後一刻微分時被自動處理掉。
光憑這一個方法,你就已經能抵達一些令人意外的地方。把累積分布函數法中的 g 選成某變數*自己的* cdf,你就得到機率積分變換——也就是 F(X) 服從均勻分布這個神奇事實,它是模擬任何分配背後的引擎,也是第 4 篇的主題。把它用在好幾個變數的最大值或最小值上,你就得到第 5 篇的順序統計量。餵給它一個和 X + Y,累積分布函數法就生出卷積,也就是第 3 篇。這個階段後面的每一篇,骨子裡都是你剛學會的這三步:寫下新量的 cdf、把事件翻譯回你已知的東西、再微分。