R
逆變換方法,理論圖與樣本不匹配
假設密度函數是
$$ f_X(x)=\left{\begin{aligned}\frac{1}{(1+x)^2} & \quad x \ge 0 \ 0 & \quad \text{otherwise.}\end{aligned}\right. $$
我正在嘗試編寫一個算法來生成一個大小的樣本 $ n = 10^4 $ 通過使用逆變換方法從這個分佈。為什麼我的直方圖看起來不像下面的那樣“漂亮”?
n <- 10^4 u <- runif(n) x <- (-u)/(u-1) # histogram hist(x, prob = TRUE, main = bquote(f(x)==1/((1+x)^2))) #density histogram of sample y <- seq(0, 100, .01) lines(y, 1/((1+y)^2)) #density curve f(x)
我看不出逆變換方法的實現有什麼問題。
第一個分佈是強烈右傾的。如果您運行模擬,您應該看到大約 95% 的觀察值將小於 19 (=0.95/0.05),但最大的樣本通常要大得多,比如幾千個。
因此,大多數樣本都很小,但非常大樣本的概率很小。直方圖上的條具有固定的寬度,因此您最終會看到第一個條包含大多數觀察值,然後是右側的其他幾個條,它們只是很小的矩形條。
對於這個特定的分佈,由於支持是正實數,您可以在對數尺度上繪製直方圖以更好地查看它,但您需要導出轉換後的密度。如果 $ X $ 有密度:
$$ f_X(x) = \frac{1}{(1+x)^2}, \quad x \geq 0 $$
然後你可以檢查 $ Y := \log(X) $ 有密度:
$$ f_Y(y) = \frac{e^y}{(1+e^y)^2}, y \in \mathbb{R} $$
然後,如果你繪製它:
hist(log(x), prob = TRUE, main = "Histogram for Y", xlab = "Y") z <- seq(-10,10,length.out = 100) lines(z, (exp(z)/(1+exp(z))^2))
你可以看到他們的一致性相當好。
供參考,分佈 $ Y $ 稱為邏輯分佈,並且 $ X $ 具有對數邏輯分佈。