從偏斜正態分佈抽樣
作為我的 matlab 項目的一部分,我想從偏正態分佈中抽取樣本。我已經實現了分發的 CDF 和 PDF,但從中採樣仍然困擾著我。
遺憾的是,R 包文檔中對該過程的描述充滿了死鏈接,因此我對該過程進行了一些閱讀。
從分佈中抽樣的一種方法是
inverse transform sampling
,它使用一個統一的隨機變量並涉及解決和是我們要從中採樣的分佈的 CDF。因為我不知道如何找到的倒數我自己,我做了一些搜索,發現這個問題被問了好幾次但沒有回答。
編輯:從分佈中抽樣的另一種方法是拒絕抽樣,但是為此我需要找到一個分佈
- 我可以從中抽取樣本
- 有一個 pdf “在每個點上至少與我們要從中採樣的分佈一樣高,因此前者完全包圍了後者。” (來自拒絕抽樣 wiki 文章)
我已經繪製了偏態正態分佈及其截斷版本(此處截斷為 [0,2.5])。
在我的應用中,我總是將分佈截斷到某個區間,所以我需要找到一個“包含”(希望)所有參數的 SN pdf 的分佈。
有什麼想法可以從這種截斷的偏態正態分佈中進行採樣嗎?
用 cdf 從分佈中模擬隨機變量的最直接方法是首先模擬一個Uniform變量第二個返回逆 cdf 變換. 當逆沒有封閉形式,可以使用數值反演。然而,數值反演可能代價高昂,尤其是在尾部。
當密度_可用並被另一個密度支配,即存在一個常數這樣
. 在偏正態分佈的情況下,密度為什麼時候和分別是標準正態分佈的 pdf 和 cdf。(添加位置和比例參數不會修改算法,因為結果只需要重新調整和轉換。) 這種密度似乎非常適合接受-拒絕,因為
作為是一個 CDF。這種不等式意味著運行accept-reject的第一個選項是選擇Normal pdf for和. 這樣就成功了,如下圖所示:
並導致一種算法
T=1e3 #number of simulations x=NULL while (length(x)<T){ y=rnorm(2*T) x=c(x,y[runif(2*T)<pnorm(alpha*y)])} x=x[1:T]
它通過直方圖返回合理的 pdf 擬合:
然而,標準分佈的變換會導致偏態正態變量:如果是獨立同居, 然後
是帶有參數的偏斜正態變量. (考慮到這兩個表示是相同的是一個獨立同住者一對。)