我试图整合以下功能: 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
公式是否有意义,这是我的主要问题。