R語言布朗運(yùn)動模擬股市、物種進(jìn)化樹狀圖、二項(xiàng)分布可視化
全文鏈接:http://tecdat.cn/?p=32393
原文出處:拓端數(shù)據(jù)部落公眾號
本文模擬了在連續(xù)和離散時間布朗演化一些簡單的方法。
布朗運(yùn)動的數(shù)學(xué)模型(也稱為隨機(jī)游動)也可以用來描述許多現(xiàn)象以及微小顆粒的隨機(jī)運(yùn)動, 如股市的波動和在化石中的物理特性的演變。
布朗運(yùn)動是隨機(jī)模式,即改變了從一次到下一個是隨機(jī)從正態(tài)分布繪制均值為0.0,方差為σ2×ΔT。換句話說,根據(jù)布朗運(yùn)動的預(yù)期方差通過時間與瞬時差σ2線性增加。
股市模擬
首先,模擬股市一個實(shí)例為100的離散時間布朗運(yùn)動,其中,擴(kuò)散過程的方差為σ2=0.01。
## 首先模擬隨機(jī)數(shù) ?x <- rnorm(n = length(t) - 1, sd = sqrt(sig2)) ?## 計算累加和 ?x <- c(0, cumsum(x))

畫圖
我們得出各t的時間間隔的隨機(jī)正偏離改變;然后在每個時間間隔,我們計算累積總和。從而可以看出布朗運(yùn)動的變化的分布是不變的,并且不依賴于時間的狀態(tài)。
1) ?
X <- cbind(rep(0, nsim), t(apply(X, 1, cumsum))) ?plot(t, X[1, ], xlab = "time", ylab = "phenotype", ylim = c(-2, 2), typ

為了看到這結(jié)果如何取決于σ2,我們比較除以10 的SIG2的結(jié)果:
X <- matrix(rnorm(n = nsim * (length(t) - 1), sd = sqrt(sig2/10)), nsim,

然后,我們使用for循環(huán) :
e = "l") ?
for (i in 1:nsim) lines(t, X[i, ])

如上所述,根據(jù)布朗運(yùn)動的預(yù)期方差只是σ2。然后,我將使用模擬10000個相同的條件下的結(jié)果,以“理順”我們的結(jié)果是:
v <- apply(X, 2, var) ?
plot(t, v, type = "l", xlab = "time", ylab = "variance among simulation

物種進(jìn)化
然后,我們嘗試用布朗運(yùn)動模擬物種進(jìn)化樹狀圖。查看數(shù)據(jù)的變化情況:
t <- 100? # 總時間 ?n <- 30? # 總分支 ?b <- (log(n) - log(2))/t

現(xiàn)在,來模擬樹,我們只需要分別模擬在每個分支的所有分支,然后由最終狀態(tài)“轉(zhuǎn)向”每個子分支它的父節(jié)點(diǎn)。 因?yàn)樵诿總€時間步布朗進(jìn)化的結(jié)果是獨(dú)立于其它所有時間步長。
沿著每條邊模擬進(jìn)化
yy <- sapply(yy, function(x, y) y[[x]][length(y[[x]])], y = X) ?
text(x = max(H), y = yy, tree$tip.label)

在現(xiàn)實(shí)中,布朗運(yùn)動的大部分模擬使用連續(xù)的而不是離散的時間進(jìn)行。這是因?yàn)椴祭蔬\(yùn)動意味著不同物種之間的協(xié)方差之間的預(yù)期差異。
關(guān)于布朗進(jìn)化的一些其他特點(diǎn):
在某些情況下,在樹的不同部分的布朗進(jìn)化有可能存在不同的速率。因此可以簡單的模仿不同部門的不同的速率布朗運(yùn)動。
tree <- sim.history(tree, Q, anc = "1")

els = TRUE, ?
??? spread.cost = c(1, 0))

?下面模擬不同的樹從而通過散點(diǎn)圖證實(shí)相同的父節(jié)點(diǎn)產(chǎn)生的樹擁有相似的協(xié)方差。
plot(tree, edge.width = 2, direction = "downwards")

rplotMatrix(t(X))

布朗運(yùn)動不假定在其下個體譜系移動的過程是高斯過程。其結(jié)果將服從高斯分布 - 和中心極限定理。
t <- 0:100?? ?
sig2 <- 0.01 ?
nsim <- 1000
二項(xiàng)分布的布朗運(yùn)動
我們模擬二項(xiàng)分布的布朗運(yùn)動 并查看方差是否和之前一樣等于1
apply(X[2:nsim, ], 1, function(x, t) lines(t, x), t = t)



布朗運(yùn)動,一般認(rèn)為是沒有趨勢;然而它(在某些情況下)可以模擬一個模型的趨勢。這里是一個模擬(使用如上述相同的一般方法)趨勢的一個例子。
X <- matrix(rnorm(mean = 0.02, n = nsim * (length(t) - 1), sd = sqrt(sig2/4)), ?
??? nsim, length(t) - 1)

對于布朗運(yùn)動的數(shù)學(xué)模型的簡單形式的形式: S_T= eS_t-1? 其中e是從概率分布繪制。因此,后續(xù)還有更多的應(yīng)用值得進(jìn)一步研究。

?最受歡迎的見解
1.R語言泊松Poisson回歸模型分析案例
2.R語言進(jìn)行數(shù)值模擬:模擬泊松回歸模型
3.使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價預(yù)測
4.R語言對布豐投針(蒲豐投針)實(shí)驗(yàn)進(jìn)行模擬和動態(tài)可視化
5.用R語言模擬混合制排隊(duì)隨機(jī)服務(wù)排隊(duì)系統(tǒng)
6.GARCH(1,1),MA以及歷史模擬法的VaR比較
7.R語言做復(fù)雜金融產(chǎn)品的幾何布朗運(yùn)動的模擬
8.R語言進(jìn)行數(shù)值模擬:模擬泊松回歸模型
9.R語言對巨災(zāi)風(fēng)險下的再保險合同定價研究案例:廣義線性模型和帕累托分布Pareto distributions