R:概率的近似值

时间:2015-12-23 00:00:05

标签: r probability approximation

设X和Y是两个独立的随机变量,密度函数为f_x(x)= x * exp(0.5 * x ^ 2)其中x> 0且f_y(y)= 0.5,其中y为[-1,1]

我试图近似概率P(Z> 1),其中Z = X + Y; 这是我的R代码:

u <-runif(10000, min=0, max=1000000); 
v<-runif(10000, min=-1, max=1);
f<-function(x){x*exp(-0.5*x^2)} ; 
g<-function(x){1/2} ; 
for ( i in 1:10000) {
I[i] = integrate ( f ,lower = 0 , upper = u[i]) ; 
J[i] = integrate ( g, lower =-1 , upper = v[i]) ; 
}
mean( (I+J)>1 ) ; 

我收到了这个错误:

Error in integrate(g, lower = -1, upper = v[i]) : 
  evaluation of function gave a result of wrong length
In addition: Warning message:
In I[i] = integrate(f, lower = 0, upper = u[i]) :
  number of items to replace is not a multiple of replacement length

1 个答案:

答案 0 :(得分:0)

g <- function(x){1/2}替换为g <- Vectorize(function(x){1/2} ),将integrate(...)替换为integrate(...)$value

u <-runif(10000, min=0, max=1000000)
v<-runif(10000, min=-1, max=1)
f<-function(x){x*exp(-0.5*x^2)} 
g<-Vectorize(function(x){1/2 + 1e-12*x})

I <- rep(NA,10000)
J <- rep(NA,10000)

for ( i in 1:10000) {
  I[i] = integrate ( f ,lower = 0 , upper = u[i])$value
  J[i] = integrate ( g , lower =-1 , upper = v[i])$value 
}
mean( (I+J)>1 ) 

> mean( (I+J)>1 ) 
[1] 0.0048
>