R語言中的模擬過程和離散化:泊松過程和維納過程
原文連結:http://tecdat.cn/?p=17303
本文中,我們討論了一個將Poisson過程與Wiener過程結合在一起的最佳演算法的問題。實際上,為了生成泊松過程,我們總是習慣於模擬跳躍之間的持續時間。我們使用給定時間間隔內跳躍的均勻性,該條件取決於跳躍的次數。
首先,我們可以生成一個可能具有漂移的維納過程,然後在其旁邊,我們可以生成指數定律(這將對應於跳躍之間的時間),還可以生成跳躍幅度 。我們在這裡
要麼。我們首先通過注意
其中增量是高斯(均值和方差),並且彼此獨立。至於跳躍之間的持續時間,它們是獨立的平均指數定律。這是程式碼,
- n=1000
- h=1/n
- lambda=5
- set.seed(2)
- W=c(0,cumsum(rnorm(n,sd=sqrt(h))))
- W=rexp(100,lambda)
- N=sum(cumsum(W)<1)
- T=cumsum(W[1:N])
- X=-rexp(N)
問題是對於維納過程,我們必須離散化,而對於複合泊松過程,我們不能離散化。但是,他們有相同的時間範圍。第一種方法是建立trunc函式
- W[trunc(n*t)+1]+sum(X[T<=t])+lambda*t
然後視覺化
- L=Vectorize(Lt
- plot(u,L(u),type="l
另一種可能性是使用我在引言中提到的泊松過程的均勻性。因為泊松過程滿足一個特性:如果是第i個跳躍發生的日期,則有條件基於以下事實:,變數
對應於的訂單統計獨立變數,是均勻分佈
該屬性可在Wolff(1982)中找到。我們從一個(單個)跳躍開始,
即我們找到一個統一的分佈函式。然後,我們進行2跳,3跳等迭代。
這個想法的R翻譯很簡單
N=rpois(1,lambda)
然後,一種策略是離散化Poisson過程,與Wiener過程的時間步長相同,
- indice=trunc(T*n
- processus=W+cumsum(saut)+lambda*u
我們發現與以前相同的軌跡
通過此過程,我們不能在同一時間間隔內有兩次跳躍。泊松過程的特徵是
因此,極少有機會同時進行兩次跳躍,尤其是在時間步長較小的情況下。如果我們生成數千條軌跡,那麼一次出現問題的可能性就可以忽略不計。
有一個主意是採用離散均勻分佈,
T=c(0,sort(sample((1:(n-1)/n),size=N,replace=FALSE)))
以避免同時發生兩次跳躍。
為此,我們可以做一些測試。例如,生成一些模擬以具有一百次跳躍(因此兩次跳躍之間的持續時間為一百次),然後進行指數定律檢驗。
- VT=0
- for(ns in 1:20){
- N=rpois(1
我們在這裡做了20個迴圈
lambda=5
我想進行一百次觀察來進行檢驗。然後,我們可以進行指數擬合檢驗,
ks.test(VT[-1],"pexp",lambda)$p.value
如果我們重複很多次,則通過更改時間步長(或時間間隔的細分數),實際上,如果時間步長很大(在左下方),我們將通常拒絕,指數定律也是如此。但是很快,這是一個不成立的假設,
我們有兩個不錯的演算法來生成萊維過程。
最受歡迎的見解