Mô phỏng một tích phân ngẫu nhiên


7

Tôi đang cố gắng giải bài tập 3.9.10 trên p. 66 trong "Tính toán chuyển động Brownian" của Ubbo F. Wiersema (John Wiley & Sons, 2008) , yêu cầu mô phỏng tích phân ngẫu nhiên

01B(t) dB(t)
ban đầu bằng cách sử dụng phân vùng thành khoảng phụ và chạy mô phỏng của tích phân ngẫu nhiên rời rạc cho này , sau đó lặp lại quy trình này bằng cách liên tục nhân đôi lên . Bài tập yêu cầu so sánh kết quả với giá trị trung bình và phương sai của dạng đóng của tích phân, cụ thể là là và (vì là biến ngẫu nhiên tiêu chuẩn thông thường).[0,1]n=281000
I(n)=i=0n1B(ti)(B(ti+1)B(ti))
nn211
01B(t) dB(t)=12B(1)212
012B(1)

Tôi đã viết một mô phỏng trong R, như hình dưới đây. Tuy nhiên, phương sai dẫn đến từ mô phỏng này là

> v_sim
        8         9        10        11 
0.4771895 0.4304475 0.5260542 0.4664552

không xuất hiện để hội tụ đến giá trị dự đoán . Hiện tượng tương tự được quan sát thấy khi thay đổi hạt giống thành và cũng như khi số lượng các khoảng phụ được tăng lên thành . Tôi đang làm gì sai?0.523212215

NSIMS <- 1000L # number of simulations of the integral for every "level"
LEVELS <- 8L:11L # level n corresponds to 2^n sample points between 0 and 1
SEED <- 1

set.seed(SEED)

sims <- data.frame(simid = 1L:NSIMS) # sims contains one colum per every level.
                                        # The column simid is a dummy column
                                        # intended to avoid an error message
                                        # when columns are added to sims
                                        # on the fly inside the following loop.
                                        # This column is deleted after the loop
                                        # ends.
for (n in LEVELS)
{
        nticks <- 2^n # nticks is the number of sample points between 0 and 1
        delta <- 1/nticks
        ticks <- seq(from = 0, to = 1, by = delta)
        std <- sqrt(delta)
        sim <- vector(mode = "numeric", length = NSIMS)
        for (j in 1L:NSIMS)
        {
                b <- cumsum(c(0, rnorm(nticks, sd = std))) # b is a simulated
                                                        # Brownian motion path
                                                        # sampled at the tick
                                                        # marks.
                integral <- 0
                for (i in 1L:(length(b) - 1L))
                {
                        integral <- integral + b[i]*(b[i + 1] - b[i])
                }
                sim[j] <- integral
        }
        sims[, as.character(n)] <- sim
}
sims$simid <- NULL

m_sim <- sapply(sims, mean)
v_sim <- sapply(sims, var)

Bạn đã tính phương sai ở mỗi n chưa? Bạn sẽ không bao giờ nhận được chính xác 0,5 vì vậy những gì bạn cần làm là xác định xem bạn có thể từ chối giả thuyết không có giá trị của bạn ở mức 0,5 hay không.
Greg Petersen

@GregPeteren: Tôi không mong đợi để nhìn thấy chính xác , nhưng tôi thực sự mong đợi sẽ thấy sự hội tụ nhất quán đến , ví dụ: . 0.50.50.4771895,0.48044750.51605420.4964552
Evan Aad

2
Chương trình thực hiện những gì nó cần, mặc dù nó có thể được thực hiện cả đơn giản và hiệu quả hơn: sử dụng cumsumthay cho ivòng lặp. Ma trận / áp dụng cũng có thể được ưa thích ở đây cho khung dữ liệu / sapply, v.v ... Đây là một bài tập rất tốt. Gợi ý: nêu rõ những gì bạn mong muốn tìm và tại sao, tìm phân phối chung của biến tổng hợp nói . nXi
Yves

Câu trả lời:


4

Bạn có hai nguồn phân kỳ từ 0,5 và bạn chỉ thực hiện thay đổi đối với một trong số chúng; kết quả là bạn sẽ không mong đợi để thấy loại hội tụ mà bạn đề xuất. [Thay vào đó, bạn sẽ thấy một sự cải thiện nhỏ ở các giá trị nhỏ nhất sẽ biến thành nhiễu khi bạn tăng thêm .]nn

Nguồn phân kỳ đầu tiên được ghi nhận trong câu hỏi của bạn - xấp xỉ quy trình liên tục bằng một xấp xỉ rời rạc.

Nguồn thứ hai là biến thể ngẫu nhiên do mô phỏng. Tại một số mô phỏng hữu hạn ( ), bạn hy vọng rằng phép tính biến đổi mẫu sẽ khác với giá trị "đúng" cơ bản mà bạn nhận được với bất kỳ xấp xỉ rời rạc nào được đưa ra là .bb

Để xem liệu đây có thực sự là vấn đề hay không, bạn có thể thử một chuỗi các giá trị , giả sử n = 100,1000,10000 (và có lẽ nhiều hơn nếu bạn có thể) ở mỗi . Ngoài ra, bạn có thể tính toán phương sai lý thuyết của số lượng bạn in ra (và do đó là lỗi tiêu chuẩn), từ đó bạn có thể biết liệu kết quả của mình có mâu thuẫn rõ ràng với 1/2 hay không (vì trở nên lớn nên bạn sẽ thấy sự không nhất quán trở nên khó khăn hơn bởi vì nó sẽ yêu cầu lớn hơn nhiều để xác định).nnnb


4

Để cho Xi:=B(ti)[B(ti+1)B(ti)] cho i=0 đến n1. Các rv.s Xi là gaussian và độc lập do tính độc lập của gia số của B(t). hơn thế nữaE(Xi)=0

Var(Xi)=E[Xi2]=E[B(ti)2]E[(B(ti+1)B(ti))2]=ti(ti+1ti),
vì thế Var(Xi)=i/n2 nếu các điểm ti:=i/nđược sử dụng. Sau đó
Var(I(n))=i=0n1Var(Xi)=1n2i=0n1i=1n2(n1)n2=[11n]12.
Đến hạn 1/n, sự phân phối của I(n) gần như giống nhau cho tất cả n. Bằng cách vẽ một số, nóiNsim, độc lập I(n), chúng tôi nhận được một mẫu kích thước Nsim từ một phân phối chỉ phụ thuộc một chút n và gần như bình thường với trung bình 0 và phương sai 1/2. Vì vậy, trong chương trình, các phần tử v_simtương ứng nlà (trừ khi nnhỏ) chỉ đơn giản là phương sai của các mẫu kích thước độc lậpNsim từ Norm(0,1/2).

Con số nđiểm gần như không liên quan ở đây vì tích hợp cụ thể được xem xét. Tình huống có thể được so sánh với việc đánh giá tích phân không ngẫu nhiên01tdtsử dụng quy tắc hình thang. Kết quả sẽ không thay đổi khi sử dụng nhiều hình thang hơn. Rõ ràng mọi thứ sẽ khác nếu một quy trình hoặc chức năng thích nghi khác được sử dụng làm integrand, một thiết kế dày đặc hơn[ti]i dẫn đến một thiên vị nhỏ hơn.


2
Lỗi đánh máy nhỏ tôi nghĩ trong phương trình hiển thị đầu tiên với các ô vuông bị thiếu.
jdods

0

Để mô phỏng sự hội tụ, mô phỏng giá trị trung bình của SỰ KHÁC BIỆT bình phương giữa tích phân dựa trên n bước và tích phân dựa trên 2 bước. Sau đó, tương tự cho sự khác biệt giữa các tích phân cho 2n bước và 4n bước. Sau đó, sự khác biệt giữa 4n bước và 8n bước. Sử dụng quỹ đạo chuyển động SAME Brownian (trong khoảng thời gian đơn vị) cho tất cả. Có thể nhìn thấy mô hình hội tụ tương tự bằng cách sử dụng phương sai của SỰ KHÁC BIỆT giữa các cặp tích phân đã đề cập ở trên. Mục 3,4 của cuốn sách của tôi bao gồm điều này. Ubbo


-2

3.9.10 BdB.R

tích phân B.dB

viết lại bài tập 3.9.10 như sau:

xóa dòng 5 trở đi cho đến khi dòng 8 câu bắt đầu bằng Lặp lại

cũng xóa câu bắt đầu bằng So sánh

set.seed (123) # tùy chọn; số nguyên dương sim <- 1000 # số mô phỏng

BdB.sim <- function (n) {B.steps <- 2 * n # số bước thời gian trong đường dẫn Brownian Motion

# integrals B.dB based on successively halved time partitions
I.n <-  numeric(sims)  # n steps
I.2n <- numeric(sims)  # 2*n steps

dt <- 1/B.steps
sqrt.dt <- sqrt(dt)
k.max <- 1+B.steps     # last timepoint index of B

# timepoints
# ---------------------------------------
k.seq.n <- seq(from=3,to=k.max,by=2)
length(k.seq.n)

k.seq.2n <- seq(from=2,to=k.max,by=1)
length(k.seq.2n)

k.seq.step <- seq(from=3,to=k.max-1,by=2)
length(k.seq.step)
# ---------------------------------------

for(sim.nr in 1:sims) {
    # each simulation starts by generating a Brownian Motion path of n timesteps, denoted B
    B <- c(0,cumsum(rnorm(B.steps,mean=0,sd=sqrt.dt)))  # Brownian Motion path timestep dt; B[1]=0
    for(k in k.seq.n) {I.n[sim.nr] <- I.n[sim.nr] + B[k-2]*(B[k]-B[k-2])}
    for(k in k.seq.2n) {I.2n[sim.nr] <- I.2n[sim.nr]  + B[k-1]*(B[k]-B[k-1])}
}

mean.sq.diff <- mean((I.n-I.2n)^2)
exact <- 1/(4*n)

return(data.frame(n=n,double=2*n,mean.sq.diff=mean.sq.diff,exact=exact))

}

(n.seq <- c (2 ^ 8, 2 ^ 9, 2 ^ 10,2 ^ 11))

dấu vết <- data.frame (n = NA, double = NA, mean.sq.diff = NA, chính xác = NA)

for (m in 1: length (n.seq)) {out <- BdB.sim (n.seq [m]) trail <- rbind (trail, out)}

dấu vết [-1,] # cho thấy sự hội tụ

write.csv (trail [-1,], "3.9.10 BdB hội tụ.csv", row.names = FALSE) # tùy chọn

--------------------------

Ubbo Wiersema 26 tháng 2 năm 2018


Đối với các lũy thừa liên tiếp của n, tỷ lệ 1 / (4 (n + 1)) trên 1 / 4n bằng n / (n + 1) và vì n là lũy thừa của 2, tỷ lệ đó bằng. Chênh lệch bình phương trung bình giảm một nửa khi số lượng khoảng thời gian tăng từ 2ⁿ đến 2ⁿ⁺¹.
dùng186735
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.