Mô phỏng liên quan đến điều hòa trên tổng các biến ngẫu nhiên


8

Tôi đã đọc câu hỏi này và nghĩ về việc mô phỏng số lượng cần thiết. Vấn đề như sau: Nếu B là iid tiêu chuẩn bình thường, E ( A 2 | A + B ) là gì? Vì vậy, tôi muốn mô phỏng E ( A 2 | A + B ) . (đối với giá trị được chọn là A + B )ABE(A2|A+B)E(A2|A+B)A+B

Tôi đã thử đoạn mã sau để đạt được điều này:

n <- 1000000
x <- 1 # the sum of A and B

A <- rnorm(n)
B <- rnorm(n)

sum_AB = A+B

estimate <- 1/sum(sum_AB==x) * sum( (A[sum_AB==x])^2 )

Vấn đề là hầu như không có giá trị sum_ABnào phù hợp x(trên các mô phỏng). Nếu tôi chọn một số phần tử từ sum_ABđó, thì nó thường là ví dụ duy nhất của giá trị của nó trong vectơ.

Nói chung, làm thế nào người ta có thể giải quyết vấn đề này và thực hiện một mô phỏng chính xác để tìm thấy một kỳ vọng về hình thức đã cho? ( B có thể không nhất thiết phải được phân phối bình thường hoặc từ cùng một phân phối.)AB


1
Chỉnh sửa gần đây của bạn thay đổi đáng kể câu hỏi, như trao đổi ý kiến ​​của chúng tôi chỉ ra. Nó trở nên khó khăn hơn để trả lời trong tổng quát lớn hơn nhiều mà bạn cho rằng bây giờ. Chẳng hạn, tồn tại các kỹ thuật đặc biệt - và khá liên quan - chỉ để trả lời khi giá trị của rất hiếm (nằm ở một trong các đuôi). A+B
whuber

@whuber Không phải tất cả các giá trị đều tương đối hiếm khi chúng ta xử lý hai biến ngẫu nhiên liên tục?
Comp_War Warrior

1
Có, nhưng các dải giá trị hẹp - thường đủ cho các mô phỏng như vậy - sẽ không bao giờ hoạt động ở đuôi (cũng như ở bất kỳ khu vực nào khác mà PDF rất nhỏ), trong khi khi mật độ tương đối lớn, bạn có thể dễ dàng thực hiện tính toán brute-force được đảm bảo tạo ra một số lượng dữ liệu kha khá có đủ gần với giá trị mong muốn của nó để cho phép một số kết luận được rút ra từ mô phỏng. A+B
whuber

@whuber Tôi thấy - bạn có thể đưa ra một số chỉ dẫn trong câu trả lời của bạn về các kỹ thuật đặc biệt mà bạn đề cập không? Xin lỗi vì không chỉ ra những gì tôi quan tâm dưới đây trong các ý kiến.
Comp_War Warrior

Comp_War Warrior Tôi đang nối thêm một giải pháp thứ hai mà tôi tin là những gì @whuber đang ám chỉ.
Dan

Câu trả lời:


5

Nhận xét của tôi trong luồng được tham chiếu gợi ý một cách tiếp cận hiệu quả: bởi vì Y = A - B cùng bình thường với hiệp phương sai bằng 0, chúng độc lập, do đó mô phỏng chỉ cần tạo Y (có nghĩa là 0 và phương sai 2 ) và xây dựng A = (X=A+BY=ABY02 . Trong ví dụ này, phân phối của A 2 | ( A + B = 3 )A=(X+Y)/2A2|(A+B=3)được kiểm tra bằng biểu đồ của giá trị mô phỏng.105

x <- 3
y <- rnorm(1e5, 0, sqrt(2))
a <- (x+y)/2
hist(a^2)

Kỳ vọng có thể được ước tính là

mean(a^2)

Câu trả lời sẽ có gần .11/4=2.75


1
Cảm ơn - điều này có ý nghĩa. Tuy nhiên, tôi có đúng không khi hiểu rằng sự đơn giản hóa này sẽ chỉ hoạt động nếu cả hai biến ngẫu nhiên trong câu hỏi là iid bình thường? Điều gì xảy ra nếu tôi gặp trường hợp B ở phân phối khác (và có thể tách biệt với nhau)? AB
Comp_War Warrior

1
Sự am hiểu của bạn đa đung đăn. Đây là một lý do Các biến thông thường rất phổ biến, cả về lý thuyết và mô hình máy tính! Tuy nhiên, ý tưởng cơ bản về tìm kiếm một cách để biến đổi các biến thành các bộ biến độc lập (hoặc dễ liên quan) sẽ chuyển sang một thiết lập tổng quát hơn.
whuber

2

(A,B)(A,A+B=S)(A,S)

fA,S(a,s)=fA(a)fB(sa)
AS=s
fA|S(a|s)fA(a)fB(sa)
SfS(s)1B=SA(A,B)S
fA,B|S(a,b|s)fA(a)fB(sa)Ia+b=s

1

Bạn có thể giải quyết vấn đề này bằng cách sử dụng các mẫu bootstrap. Ví dụ,

n <- 1000000

A <- rnorm(n)
B <- rnorm(n)
AB <- cbind(A,B)

boots <- 100
bootstrap_data <- matrix(NA,nrow=boots*n,ncol=2)


for(i in 1:boots){
    index <- sample(1:n,n,replace=TRUE)
    bootstrap_data[(i*n-n+1):(i*n),] <- cbind(A[index],B[index]) 
}

sum_AB <- bootstrap_data[,1] + bootstrap_data[,2]
x <- sum_AB[sample(1:n,1)]

idx <- which(sum_AB == x)

estimate <- mean(bootstrap_data[idx,1]^2)

Chạy mã này chẳng hạn, tôi có được những điều sau đây

> estimate
[1] 0.7336328
> x
[1] 0.9890429

A+B=0.9890429E(A2|A+B=0.9890429)=0.7336328 .

Bây giờ để xác thực rằng đây sẽ là câu trả lời, chúng ta hãy chạy mã của trình duyệt trong giải pháp của anh ấy. Vì vậy, chạy mã của mình vớix<-0.9890429 kết quả như sau:

> x <- 0.9890429
> y <- rnorm(1e5, 0, sqrt(2))
> a <- (x+y)/2
> hist(a^2)
>
> mean(a^2)
[1] 0.745045

Và do đó, hai giải pháp rất gần gũi và trùng khớp với nhau. Tuy nhiên, cách tiếp cận vấn đề của tôi thực sự sẽ cho phép bạn nhập bất kỳ phân phối nào bạn muốn thay vì dựa vào thực tế là dữ liệu đến từ các phân phối bình thường.


Một giải pháp mạnh mẽ hơn thứ hai dựa trên thực tế là khi mật độ tương đối lớn, bạn có thể dễ dàng thực hiện một phép tính vũ phu như sau

n <- 1000000

x <- 3  #The desired sum to condition on

A <- rnorm(n)
B <- rnorm(n)
sum_AB <- A+B

epsilon <- .01
idx <- which(sum_AB > x-epsilon & sum_AB < x+epsilon)
estimate <- mean(A[idx]^2)

estimate

Chạy mã này, chúng tôi có được những điều sau đây

> estimate
[1] 2.757067

A+B=3E(A2|A+B=3)=2.757067


1
A+BA+B3

@whuber bạn hoàn toàn chính xác. Tôi chỉ có thể làm điều đó cho số tiền mà tôi biết sẽ xuất hiện.
Dân

0

Dường như với tôi rằng câu hỏi trở thành thế này:

  1. Cách mô phỏng (X, Y) có điều kiện trên X + Y = k và sau đó
  2. sử dụng monte carlo để ước tính EU (X, Y) cho một số hàm U (x, y)

hãy bắt đầu bằng cách xem xét lấy mẫu quan trọng :

EV(Z1)=V(z)f1(z)=V(z)f1(z)f2(z)f2(z)=EV(Z2)f1(Z2)f2(Z2)

Z1f1(z)Z2f2(z)

zif11niV(zi)zif21niV(zi)f1(zi)f2(zi)

U(x,y)=x2(X,Y)f(x,y)x+y=kf(x,y)A=x+y=kf(x,y)

vì vậy bây giờ thủ tục là:

  1. g(x)Xi
  2. Yi=kXig(x)I(x+y=k)I()
  3. 1niU(xi,yi)f(xi,yi)Ag(xi)

1
A=0
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.