R
逆變換方法,理論圖與樣本不匹配
假設密度函數是
$$ f_X(x)=\left{1(1+x)2x≥0 0otherwise.
\right. $$我正在嘗試編寫一個算法來生成一個大小的樣本 n=104 通過使用逆變換方法從這個分佈。為什麼我的直方圖看起來不像下面的那樣“漂亮”?
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 有密度:
fX(x)=1(1+x)2,x≥0
然後你可以檢查 Y:=log(X) 有密度:
fY(y)=ey(1+ey)2,y∈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 具有對數邏輯分佈。