r - 关于 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
我想知道为什么会出现这个问题以及如何解决这个问题。
解决方案
问题在于,与 不同F1_t
,F2
它没有向量化,这意味着它不会返回 的向量的结果向量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_t
,F3_t(1,1,2)
运行良好。
推荐阅读
- typescript - 如何防止在 TypeScript 中使用默认类型?
- sql - PostgreSQL 获取 json 格式的数据
- python - 未达到气流传感器超时
- odoo - 如何在不缩放的情况下更改树视图的大小?奥多 14
- c# - JSON 文件在将新对象附加到数组后显示额外的反斜杠
- r - 从 R 中的 3-D 数组中删除 NA 值并计算平均值
- php - Laravel 内部连接与演员
- django - 在 Django 中引用另一个模型中的关联字段
- kubernetes - EKS:如何在 eks cloudmap 中注册动态生成的 eks loadbalancer dns?
- python - 从 Scipy gaussian_kde 中检索值