R——概率統(tǒng)計(jì)與模擬(二)

原創(chuàng):hxj7

本文繼續(xù)介紹一些和概率統(tǒng)計(jì)相關(guān)的模擬。

前文《R-概率統(tǒng)計(jì)與模擬》介紹了一些用 R 進(jìn)行概率模擬的實(shí)驗(yàn)靠欢,本文繼續(xù)上次的工作,并在此過(guò)程中回顧一些相關(guān)的概率統(tǒng)計(jì)知識(shí)盐肃。

一共五題:

  • 對(duì)pi值的估計(jì)(蒙特卡洛模擬經(jīng)典示例)
  • 貝葉斯公式練習(xí)
  • 多個(gè)獨(dú)立并符合同一個(gè)正態(tài)分布的變量的平方和符合卡方分布
  • 多個(gè)獨(dú)立且符合同一個(gè)柯西分布的變量的平均值仍符合柯西分布
  • 馬爾可夫鏈練習(xí)

題目一:對(duì)pi值的估計(jì)(蒙特卡洛模擬經(jīng)典示例)

圓周率 pi (\pi)的值大家很早就知道了俯艰。其實(shí)我們可以用模擬的方法來(lái)自行估算。方法是:

假設(shè)有一個(gè)單位圓(半徑為1)懂更,我們?cè)谒耐饨泳匦卫镫S機(jī)產(chǎn)生一個(gè)點(diǎn)眨业,那么這個(gè)點(diǎn)落在單位圓中的理論概率是
p = \frac{S_{circle}}{S_{rect}} = \frac{\pi r^2}{(2r)^2} = \frac{\pi}{4}.
其中S_{circle}S_{rect}分別是單位圓和外接矩形的面積。所以沮协,理論上:
\pi = 4p.
那么龄捡,我們只需要模擬出這個(gè)p值,就可以得到\pi的估計(jì)值慷暂。
如果按上述隨機(jī)產(chǎn)生點(diǎn)的方法聘殖,p的估計(jì)值\hat{p}是:
\hat{p} = \frac{npoints_{circle}}{npoints_{rect}}.
其中,npoints_{circle}是落在單位圓里的點(diǎn)的數(shù)量,npoints_{rect}是落在外接矩形里的點(diǎn)的數(shù)量奸腺。
得到p的估計(jì)值后餐禁,\pi的估計(jì)值是:
\hat{\pi} = 4\hat{p} = 4\frac{npoints_{circle}}{npoints_{rect}}.

按照上述方法,筆者寫了一段隨機(jī)產(chǎn)生點(diǎn)的代碼:

# Q1: the value of pi
# 也是蒙特卡洛方法的經(jīng)典示例
opi <- function(i) {
  pt <- runif(2, min=-1, max=1)
  c(x=pt[1], y=pt[2], isInCircle=as.numeric(sum(pt ^ 2) < 1))
}

spi <- function(n) {
  set.seed(SEED)
  res <- sapply(1:n, opi)
  t(res)
}

SEED <- 123
N.pi <- 100000
res.pi <- as.data.frame(spi(N.pi))
ratio.pi <- mean(res.pi$isInCircle)
color.pi <- ifelse(res.pi$isInCircle == 1, "green", "yellow")
plot(x=res.pi$x, y=res.pi$y, col=color.pi, 
     main=paste0("Simulation for pi with ", N.pi, " points"), xlab="x", ylab="y")
ratio.pi * (2 ^ 2)    # the value of pi

產(chǎn)生的點(diǎn)如下:


image

題目二:貝葉斯公式練習(xí)

假設(shè)變量XY互相獨(dú)立突照,且都服從[0, 1]上的均勻分布坠宴,并且令事件AB為:
A=\{X < \frac{1}{3} \}, \quad B=\{Y < \sin \pi X \}.
那么試計(jì)算\Pr(B|A)

從理論上計(jì)算:

由題設(shè)可知绷旗,XY\text{ p.d.f.}是:
f_1(x) = 1, \quad f_2(y) = 1.
因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=X" alt="X" mathimg="1">和Y互相獨(dú)立喜鼓,所以二者的joint \text{ p.d.f.}是:
f(x,y)=f_1(x)f_2(y)=1
所以,
\Pr(A \cap B) = \int_{0}^{\frac{1}{3}} \int_{0}^{\sin\pi x} f(x,y) \, dx \, dy = \frac{1}{2\pi}
很容易就知道:
\Pr(A) = \frac{1}{3}
由貝葉斯定理可知:
\Pr(B|A) = \frac{\Pr(A \cap B)}{\Pr(A)} = \frac{3}{2\pi}

用于模擬的代碼是:

# Q2: 貝葉斯定理
obayes <- function() {
  x <- runif(1, min=0, max=1/3)
  y <- runif(1, min=0, max=1)
  ifelse(y < sin(pi * x), 1, 0)
}

sbayes <- function(n) {
  set.seed(SEED)
  res <- replicate(n, obayes())
  mean(res)
}

SEED <- 123
N.bayes <- 1000000
sbayes(N.bayes)   # simulative value: 0.477231

1.5 / pi  # the theoretical value: 0.4774648

可以看出衔肢,當(dāng)模擬的重復(fù)結(jié)果達(dá)到一百萬(wàn)次時(shí)庄岖,模擬的結(jié)果和實(shí)際值很接近。

另外角骤,筆者還嘗試另一種計(jì)算方式:

Z = Y - \sin\pi X隅忿,那么當(dāng)計(jì)算出Z\text{c.d.f.} G(z)后,那么\Pr(B) = G(0).

但是沒(méi)有成功邦尊。如果有朋友找到計(jì)算G(z)的方法背桐,希望能指導(dǎo)一下。

題目三:多個(gè)獨(dú)立并符合同一個(gè)正態(tài)分布的變量的平方和符合卡方分布

正如標(biāo)題所說(shuō)蝉揍,模擬的任務(wù)就是看看多個(gè)獨(dú)立并符合同一個(gè)正態(tài)分布的變量的平方和是否符合卡方分布链峭。我們會(huì)嘗試不同的變量數(shù)目進(jìn)行模擬。

我們看一個(gè)變量是否符合某個(gè)特定的概率分布又沾,可以看這個(gè)變量的\text{p.d.f./p.f.}或者\text{c.d.f.}或者\text{m.g.f.}是否符合那個(gè)特定的概率分布弊仪。因?yàn)樯鲜?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Ctext%7Bp.d.f.%2Fp.f.%2Fc.d.f.%2Fm.g.f.%7D" alt="\text{p.d.f./p.f./c.d.f./m.g.f.}" mathimg="1">都是一個(gè)概率分布的特征函數(shù)。

所以杖刷,這次會(huì)模擬出“多個(gè)獨(dú)立并符合同一個(gè)正態(tài)分布的變量的平方和”這個(gè)變量的\text{c.d.f.}曲線励饵。

用于模擬的代碼:

# Q3: 模擬多個(gè)獨(dú)立同分布(正態(tài)分布)變量的平方和(cdf)
ochi <- function(n) {
  sum(rnorm(n) ^ 2)
}

schi <- function(n) {
  set.seed(SEED)
  res <- replicate(N.chi, ochi(n))
  ecdf(res)
}

SEED <- 123
N.chi <- 10000
varNum.chi <- c(2, 3, 5, 10)
lineCol <- c("red", "blue", "green", "black")
res.chi <- sapply(varNum.chi, schi)
plot(res.chi[[1]], do.points=F, verticals=T, col=lineCol[1],
     main="Simulation for quadratic sum of n i.i.d. variables\n(Normal distribution)")
for (i in 2:length(res.chi)) {
  lines(res.chi[[i]], do.points=F, verticals=T, col=lineCol[i])
}
legend("bottomright", legend=paste0("n=", varNum.chi), col=lineCol, lty=1, bty="n")

模擬出的\text{c.d.f.}曲線:

image

我們可以看看卡方分布理論上的\text{c.d.f.}曲線:

image

(圖片引自網(wǎng)頁(yè)https://wiki.mbalib.com/wiki/%E5%8D%A1%E6%96%B9%E5%88%86%E5%B8%83

可以看出,模擬曲線和理論曲線很相像滑燃。

題目四:多個(gè)獨(dú)立且符合同一個(gè)柯西分布的變量的平均值仍符合柯西分布

如同題目三役听,這次是看柯西分布的平均值。同樣是看\text{c.d.f.}曲線:

模擬的代碼:

# Q4: 模擬柯西分布的均值(cdf)
ocauchy <- function(n, g) {
  mean(rcauchy(n, 0, g))
}

scauchy <- function(n, g) {
  set.seed(SEED)
  res <- replicate(N.cauchy, ocauchy(n, g))
  ecdf(res)
}

SEED <- 123
N.cauchy <- 10000
g <- 1    # Let Xi ~ C(g, 0).
x.max <- 5
varNum.cauchy <- c(2, 3, 5, 10)
lineCol <- c("red", "blue", "green", "black")
res.cauchy <- sapply(varNum.cauchy, scauchy, g=g)
plot(res.cauchy[[1]], do.points=F, verticals=T, col=lineCol[1], 
     xlim=c(-x.max, x.max), 
     main="Simulation for mean of n i.i.d. variables\n(Cauchy distribution)")
for (i in 2:length(varNum.cauchy))
  lines(res.cauchy[[i]], do.points=F, 
        verticals=T, col=lineCol[i], xlim=c(-x.max, x.max))
legend("bottomright", legend=paste0("n=", varNum.cauchy), col=lineCol, lty=1, bty="n")

模擬的曲線:


image

可以看出:

  • 模擬出的曲線非常像\arctan函數(shù)的曲線表窘,而理論上一個(gè)柯西分布的\text{c.d.f.}就是一個(gè)\arctan函數(shù)典予。
  • 當(dāng)n值(\text{i.i.d.}變量的數(shù)目)變化時(shí),它們的模擬\text{c.d.f.}曲線是重合的蚊丐,說(shuō)明它們不僅都符合柯西分布熙参,而且是同分布的。

題目五:馬爾可夫鏈練習(xí)

馬爾可夫鏈大家應(yīng)該都很熟悉了麦备。我們用一個(gè)小題目回顧一下:

假設(shè)有一個(gè)四宮格,從一個(gè)格子到另一個(gè)格子的概率有一個(gè)概率轉(zhuǎn)移矩陣\bm{P}。如果最初是在格子1里面凛篙,每走一步都是隨機(jī)的黍匾,那么10步后到達(dá)格子3的概率是多少?

image

它的理論值很容易推斷:
\bm{P}^{10}_{1,3}

用于模擬的代碼是:

# Q5: 馬爾科夫鏈(用四宮格模擬即可)
MT <- matrix(c(
  0.5, 0.2, 0.2, 0.1,
  0.2, 0.5, 0.18, 0.12,
  0.15, 0.25, 0.5, 0.1,
  0.22, 0.18, 0.1, 0.5
), byrow = T, nrow=4)

powerOfMat <- function(M, n) {
  R <- diag(1, nrow=nrow(M))
  for (i in 1:n)
    R <- R %*% M
  R
}

omarkov <- function(mt, k, start, end, nstep) {
  res <- start
  for (i in 1:nstep)
    res <- sample(1:k, 1, replace = T, prob=mt[res, ])
  ifelse(res == end, 1, 0)
}

smarkov <- function(mt, k, start, end, nstep, N) {
  set.seed(SEED)
  res <- replicate(N, omarkov(mt, k, start, end, nstep))
  mean(res)
}

SEED <- 123
startState <- 1
endState <- 3
nstate <- 4
nstep <- 10
N.markov <- 100000
smarkov(MT, nstate, startState, endState, nstep, N.markov)  # simulative value:0.2512
powerOfMat(MT, nstep)[startState, endState]  # theoretical value:0.2519698

可以看出呛梆,當(dāng)模擬的重復(fù)次數(shù)到達(dá)十萬(wàn)次時(shí)锐涯,模擬值很接近理論值了。

小結(jié)

從前文到本文填物,我們共通過(guò)八個(gè)小題目回顧了一些概率統(tǒng)計(jì)相關(guān)的知識(shí)纹腌,并嘗試用 R 去做一些模擬,希望能對(duì)朋友們有所幫助滞磺。如果文中有任何錯(cuò)誤升薯,期望大家能指正!

(公眾號(hào):生信了)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末击困,一起剝皮案震驚了整個(gè)濱河市涎劈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阅茶,老刑警劉巖蛛枚,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脸哀,居然都是意外死亡蹦浦,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門撞蜂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)白筹,“玉大人,你說(shuō)我怎么就攤上這事谅摄⊥胶樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵送漠,是天一觀的道長(zhǎng)顽照。 經(jīng)常有香客問(wèn)我,道長(zhǎng)闽寡,這世上最難降的妖魔是什么代兵? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮爷狈,結(jié)果婚禮上植影,老公的妹妹穿的比我還像新娘。我一直安慰自己涎永,他們只是感情好思币,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布鹿响。 她就那樣靜靜地躺著,像睡著了一般谷饿。 火紅的嫁衣襯著肌膚如雪惶我。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天博投,我揣著相機(jī)與錄音绸贡,去河邊找鬼。 笑死毅哗,一個(gè)胖子當(dāng)著我的面吹牛听怕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虑绵,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼尿瞭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蒸殿?” 一聲冷哼從身側(cè)響起筷厘,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宏所,沒(méi)想到半個(gè)月后酥艳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爬骤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年充石,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霞玄。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骤铃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坷剧,到底是詐尸還是另有隱情惰爬,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布惫企,位于F島的核電站撕瞧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狞尔。R本人自食惡果不足惜丛版,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偏序。 院中可真熱鬧页畦,春花似錦、人聲如沸研儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至州胳,卻和暖如春记焊,著一層夾襖步出監(jiān)牢的瞬間逸月,已是汗流浹背栓撞。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碗硬,地道東北人瓤湘。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像恩尾,于是被迫代替她去往敵國(guó)和親弛说。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容