首页 > 解决方案 > 关于 Weibull 分布卷积的积分问题

问题描述

嗨,我试图用参数 t、lambda(尺度参数)和 k 计算 Weibull 分布的卷积,如下所示:

f.x <- function(x,lambda,k){
  dweibull(x,k,lambda)
}
cum <- function(T,lambda,k)
{ 
  return(1 - exp(-(T/lambda)^k))
}

F1_t = function(t,lambda,k){
  cum(t,lambda,k)
}
F2_t = function(t,lambda,k){
  integrate(function(x) F1_t(t-x,lambda,k)*f.x(x,lambda,k),0,t)$value

}
F3_t = function(t, lambda ,k){
  integrate(function(x) F2_t(t-x,lambda,k)*f.x(x,lambda,k),0,t)$value
}

其中 F2_t 和 F3_t 是第二个和第三个卷积的卷积定义,F2_t 工作正常,但我用 F3_t 评估

F3_t(1,1,2)

我从 R 收到以下警告:

 Error in integrate(function(x) F1_t(t - x, lambda, k) * f.x(x, lambda,  : 
  length(upper) == 1 is not TRUE 

我想知道为什么会出现这个问题以及如何解决这个问题。

标签: rcontinuous-integrationconvolutionmaintenanceweibull

解决方案


问题在于,与 不同F1_tF2它没有向量化,这意味着它不会返回 的向量的结果向量t

请注意

F1_t(c(1,2), 1, 1)

工作正常,而

F2_t(c(1,2), 1, 1)

失败,因为您无法为 提供积分上限向量integrate

因此,解决方案是矢量化F2_t

F2_t = function(t,lambda,k){
  sapply(t, function(y) integrate(function(x) F1_t(t-x,lambda,k)*f.x(x,lambda,k), lower = 0, upper = y)$value)
}

使用上面的代码F2_tF3_t(1,1,2)运行良好。


推荐阅读