R中积分的积分

R中积分的积分,r,integral,R,Integral,我想在R中解决以下问题: ∫0H[π(t)∫tH A(x)dx]dt 其中π(t)是先验函数,A(x)是下面定义的A函数 prior <- function(t) dbeta(t, 1, 24) A <- function(x) dbeta(x, 1, 4) expected_loss <- function(H){ integrand <- function(t) prior(t) * integrate(A, lower = t, upper =

我想在R中解决以下问题:

∫0H[π(t)∫tH A(x)dx]dt

其中π(t)是先验函数,A(x)是下面定义的A函数

prior <- function(t) dbeta(t, 1, 24)
A     <- function(x) dbeta(x, 1, 4)
expected_loss <- function(H){
  integrand     <- function(t) prior(t) * integrate(A, lower = t, upper = H)$value
  loss          <- integrate(integrand, lower = 0, upper = H)$value
  return(loss)
} 

我不确定我做错了什么。

在您的
被积函数中,
lower=t
没有矢量化,因此对集成的调用没有达到您的预期*。对
t
进行矢量化可解决此问题

expected_loss <- function(H){
  integrand <- function(t) prior(t) * integrate(A, lower = t, upper = H)$value
  vint <- Vectorize(integrand, "t")
  loss <- integrate(vint, lower = 0, upper = H)$value
  return(loss)
} 

expected_loss(.5)
# [1] 0.7946429
expected_loss(1)
# [1] 0.8571429

expected_loss在这种特殊情况下,您不需要
Vectorize
,因为
dbeta
的积分已经通过
pbeta
在R中实现。试试这个:

prior <- function(t) dbeta(t, 1, 24)
#define the integral of the A function instead
Aint     <- function(x,H) pbeta(H, 1, 4) - pbeta(x,1,4)
expected_loss <- function(H){
  integrand<-function(x) Aint(x,H)*prior(x)
  loss          <- integrate(integrand, lower = 0, upper = H)$value
  return(loss)
}
expected_loss(.5)
#[1] 0.7946429
expected_loss(1)
#[1] 0.8571429
prior
prior <- function(t) dbeta(t, 1, 24)
#define the integral of the A function instead
Aint     <- function(x,H) pbeta(H, 1, 4) - pbeta(x,1,4)
expected_loss <- function(H){
  integrand<-function(x) Aint(x,H)*prior(x)
  loss          <- integrate(integrand, lower = 0, upper = H)$value
  return(loss)
}
expected_loss(.5)
#[1] 0.7946429
expected_loss(1)
#[1] 0.8571429