吻合度蠻高,但不光滑。html
> L=10000
> K=135/64
> x=runif(L) > ind=(runif(L)<(20*x*(1-x)^3/K)) > hist(x[ind],probability=T, + xlab="x",ylab="Density",main="")
/* 應用了平滑數據的核函數 */ > d=density(x[ind],from=0,to=1) // 只對標記爲true的x作統計 --> 核密度估計 > lines(d,col=4) // (BLUE)
> xx=seq(0,1,length=100) > lines(xx,20*xx*(1-xx)^3,lwd=2,col=2) //lwd: line width, col: color number (Red)
API DOC: https://stat.ethz.ch/R-manual/R-devel/library/stats/html/density.html算法
參見:函數
http://blog.csdn.net/yuanxing14/article/details/41948485 基於核函數的目標跟蹤算法 (貌似淘汰的技術)spa
https://www.zhihu.com/question/27301358/answer/105267357?from=profile_answer_card.net
Importance Sampling (Green line) 更爲光滑:code
> L=10000
> K=135/64
> x=runif(L) > ind=(runif(L)<(20*x*(1-x)^3/K)) > hist(x[ind],probability=T, xlab="x",ylab="Density",main="") >
> d=density(x[ind],from=0,to=1) > lines(d,col=4) >
> y=runif(L) > w=20*y*(1-y)^3 // 可見,權重大小與實際分佈吻合。
> W=w/sum(w) // 每一個x軸的sample point的權重值W。 > d=density(y,weights=W,from=0,to=1) > lines(d,col=3) >
> xx=seq(0,1,length=100) > lines(xx,20*xx*(1-xx)^3,lwd=2,col=2)
不管是拒絕抽樣仍是重要性採樣,都是屬於獨立採樣,即樣本與樣本之間是獨立無關的,這樣的採樣效率比較低,htm
如拒絕採樣,所抽取的樣本中有很大部分是無效的,這樣效率就比較低,MCMC方法是關聯採樣,即下一個樣本與這個樣本有關係,從而使得采樣效率高。blog