包含非参数pdf和CDF的函数的数值积分

时间:2016-03-23 14:29:55

标签: r integrate numerical-integration

我试图整合以下功能: t *((1 - F(t))^((1 - .75 * b)/(.75 * a)))* f (t)在随机变量 X 的实现与其上界之间的有限区间内。 F(x)是CDF,而f(x)是pdf。 F(x)f(x)都是非参数化的(使用np包),分别为无条件CDF和pdf。我使用integrate库中的stats来执行数值积分。我需要对向量x中的每个值执行此操作。

# create the values for x
n <- 10
s <- 100
x <- rlnorm(c(n), meanlog = 5, sdlog = 1)
for(i in 2:s){
x <-c(x, rlnorm(c(n), meanlog = 5, sdlog = 1))
}
trim <- 0.01
a <- .2
b <- .3

# Compute pdf and CDF
bw_pdf <- npudensbw(dat = x, bwmethod = 'normal-reference', 
                   trim = trim)
bw_CDF <- npudistbw(dat = x, bwmethod = 'normal-reference', 
                   trim = trim)

f1 <- npudens(bws=bw_pdf)
F1 <- npudist(bws=bw_CDF)


X <- data.frame(x, F1$dist, f1$dens, row.names=NULL)
integ1 <- function(t){
i <- which.min((X$x - t)>=0)
cdf <- X$F1.dist[i]
pdf <- X$f1.dens[i]
vi <- X$x[i]
vector1 <- vi * ( ( 1 - cdf )^( ( 1 - .75* b ) / (.75 * a ) ) ) * pdf
return( vector1 )
}

y <- c()
for(i in 1:length( x ) ){
vv <-x[i]
Z <- integrate( integ1(vv),lower = vv, upper = max(x) )
y <- rbind(y,Z)
}

我得到的错误是:

Error in match.fun(f) : 'integ1(vv)' is not a function, character or symbol

最后,我不确定which公式是否正确。我使用它来查找向量 X 中的值,该值仅大于vv,仅在vv和上层的内部执行集成X

感谢您的帮助。

编辑:使用quadgk库中的Pracma命令,如下所示,集成有效:

integ1 <- function(t){
   i <- which.min((X$x - t)>=0)
   cdf1 <- X$F1.dist[i]
   pdf1 <- X$f1.dens[i]
   vi1 <- X$x[i]
   vector1 <- t * ( ( 1 - cdf )^( ( 1 - .75* b ) / (.75 * a ) ) ) * pdf
   return( vector1 )
}

for(i in 1:length( x ) ){
  vv <-x[i]
  Z <- quadgk( integ1, vv, max(x) )
}

我仍然不确定which公式是否有意义,这是我的主要问题。

0 个答案:

没有答案
相关问题