的prob
包数值计算特性函数为基础R分布。 对于几乎所有的分布存在现有的公式。 在少数情况下,虽然没有封闭形式的解决方案是已知的。 案例分析:威布尔分布(见下文)。
对于韦伯的特色功能基本上我计算两个积分,并把它们放在一起:
fr <- function(x) cos(t * x) * dweibull(x, shape, scale)
fi <- function(x) sin(t * x) * dweibull(x, shape, scale)
Rp <- integrate(fr, lower = 0, upper = Inf)$value
Ip <- integrate(fi, lower = 0, upper = Inf)$value
Rp + (0+1i) * Ip
是的,它的笨拙,但它的作品出奇地好! ...... 啊哈 ,大部分的时间。 用户近日报道,以下游:
cfweibull(56, shape = 0.5, scale = 1)
Error in integrate(fr, lower = 0, upper = Inf) :
the integral is probably divergent
现在,我们知道,积分不发散,所以它必须是一个数字问题。 随着一些摆弄我能得到以下工作:
fr <- function(x) cos(56 * x) * dweibull(x, 0.5, 1)
integrate(fr, lower = 0.00001, upper = Inf, subdivisions=1e7)$value
[1] 0.08024055
这是确定的,但它是不完全正确,再加上它需要摆弄它不能很好地扩展公平一点。 我一直在调查这为更好的解决方案。 我发现了一个最近出版的“封闭形式”与特征函数scale > 1
( 见这里 ),但它涉及到赖特的广义超几何函数未在R(还)来实现。 我看着档案的integrate
方案,并有一吨的东西在那里它似乎并没有很好地组织。
作为其中的一部分搜索它发生,我通过反正切, 瞧整合的区域转化为有限区间! 看看这个:
cfweibull3 <- function (t, shape, scale = 1){
if (shape <= 0 || scale <= 0)
stop("shape and scale must be positive")
fr <- function(x) cos(t * tan(x)) * dweibull(tan(x), shape, scale)/(cos(x))^2
fi <- function(x) sin(t * tan(x)) * dweibull(tan(x), shape, scale)/(cos(x))^2
Rp <- integrate(fr, lower = 0, upper = pi/2, stop.on.error = FALSE)$value
Ip <- integrate(fi, lower = 0, upper = pi/2, stop.on.error = FALSE)$value
Rp + (0+1i) * Ip
}
> cfweibull3(56, shape=0.5, scale = 1)
[1] 0.08297194+0.07528834i
问题:
- 你可以做的比这更好的?
- 是否有一些关于数值积分例程人谁是专家对这种事情会揭示这里发生了什么一些轻? 我有一个鬼鬼祟祟的怀疑对于大
t
余弦快速波动导致的问题......? - 是否有现有研发程序/包,其更适合这种类型的问题,并可能有人点我到一个精心布置的位置(山)开始攀登?
评论:
- 是的,这是不好的做法,使用
t
作为函数参数。 - 我计算了确切的答案
shape > 1
使用公布的结果与枫叶,和brute-force-integrate-by-the-definition-with-R
踢枫的屁股。 也就是说,我得到相同的答案(最多计算精度)在第二的一小部分,价格甚至更小部分。
编辑:
我要写下我在寻找确切的积分,但似乎这个特定的网站不支持MathJAX所以我给链接,而不是。 我期待数值评价特征函数中的Weibull分布合理的投入t
(意义)。 该值是一个复杂的数字,但我们可以把它分成了实部和虚部,而这正是我打电话Rp
和Ip
以上。
最后一个评论:维基百科具有用于威布尔CF中列出的式(无穷级数)和式相匹配的在我上面引用的纸证明了, 但是 ,该系列只被证明保持shape > 1
。 的情况下0 < shape < 1
仍然是一个未解决的问题; 详见纸。