gpt4 book ai didi

r - 计算给定的 Lambda

转载 作者:行者123 更新时间:2023-12-02 01:29:55 27 4
gpt4 key购买 nike

我正在使用 R 并尝试计算未知的 lambda。已知是泊松分布中的一个区域。

x <- cbind("q" = rpois(n = 4, lambda = 3),  "ppois" = runif(n = 4), "lambda_unknown" = rep(NA, times = 4))
x
# q ppois lambda_unknown
# [1,] 4 0.05207818 NA
# [2,] 5 0.61127960 NA
# [3,] 3 0.83317758 NA
# [4,] 4 0.94495935 NA

我想要一个函数来帮助我计算未知的 lambda,所以 "ppois"=ppois(q = q, "lambda_unknown")

所需的(大致)输出:

x
# q ppois lambda_unknown
# [1,] 4 0.05 ~9.15
# [2,] 5 0.61 ~5.02
# [3,] 3 0.83 ~1.4
# [4,] 4 0.94 ~2.05

以最后一行为例:

ppois(4, 2.05)
# [1] 0.9427231

最佳答案

不幸的是,我认为没有内置函数,但我们可以很容易地编写一个函数来使用数字方法。

例如,使用二分法,我们可以做到

approx<-function(q,p,epsilon) {
lower<-0
upper<-1
while(ppois(q,upper)>p) {upper<-upper*2}
while (upper-lower>epsilon) {
middle<-(upper+lower)/2
if (ppois(q,middle)<p) {upper<-middle}
else {lower<-middle}
}
return ((upper+lower)/2)
}

此函数将找到 lambda 的近似值,它会导致 p 在某个所需 epsilon 内(实际上在 epsilon/2 内)具有所需 q 的概率。为了使用它,我们必须使用 ppois 函数在 lambda 区间 [0,infinity) 上单调递减的事实。如果函数是单调递增的,它仍然可以通过修改来工作,但是在我们的解决方案附近需要单调性才能使二分法工作。

使用这个

approx(4,0.05,0.01) # 9.152344
approx(5,0.61,0.01) # 5.035156
approx(3,0.83,0.01) # 2.144531
approx(4,0.94,0.01) # 2.082031

参见 here有关二分法的更多信息。其他数值方法速度更快,但更难编码。

为了用所需的值替换 lambda_unknown 列,我们可以像这样使用应用函数:

x[,"lambda_unknown"]<-apply(x,1,function(z){approx(z["q"],z["ppois"],0.01)})

这会将内联函数应用于矩阵 x 的每一行(1 表示按行应用,2 表示按列应用)。内联函数获取给定的行并计算从该行输入正确参数的近似函数。

关于r - 计算给定的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34895865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com