提问人:Aku-Ville Lehtimäki 提问时间:10/6/2023 最后编辑:ThomasIsCodingAku-Ville Lehtimäki 更新时间:10/6/2023 访问量:84
如何计算 R 中给定分布的期望值?
How to calculate expected value of a given distribution in R?
问:
我遇到了一个问题,乍一看似乎根本没有问题。
我想编写一个函数,它将采用分布名称和参数作为参数,并返回给定分布的预期值。在我的代码中,我将使用参数 alpha = 0.2 和 beta = 0.3 的 Beta 分布。此分布的预期值为:0.2 / (0.2 + 0.3) = 0.2 / 0.5 = 0.4
最简单的方法似乎是采样:
estimatedExpectedValue <- function(distribution, parameters) {
do.call(get(paste0("r",distribution)), as.list(c(10000, parameters))) %>% mean
}
estimatedExpectedValue("beta",c(0.2,0.3))
[1] 0.4006945
虽然这很容易实现,但样本均值“仅”是期望值的最大似然估计值,因此它总是有一些误差。这取决于上下文,这是否重要。
那么我们也知道,期望值的定义是:
...其中 f(x) 是密度函数,在 R 中我们可以进行数值积分,因此:
expectedValueFromIntegration <- function(distribution, parameters) {
fnToBeIntegrated <- Vectorize(
function(x) {x * do.call(get(paste0("d",distribution)), as.list(c(x, parameters)))},
vectorize.args = c("x"))
integrate(fnToBeIntegrated, lower = -Inf, upper = Inf)
}
expectedValueFromIntegration("beta",c(0.2,0.3))
Error in integrate(fnToBeIntegrated, lower = -Inf, upper = Inf) :
non-finite function value
但是,正如你所看到的,由于某种原因,dbeta 在某个时候放弃了 NaN,而集成函数不喜欢它。我很清楚对 Beta 分布的支持从 0 开始,到 1 结束,但在支持之外的密度应该是 0,从数学上讲,如果我们只是在实轴上积分,那么对于任何分布(即使是离散分布),一切都应该很好。
但是,在 R 中,如果我通过支持进行集成,它就会起作用:
expectedValueFromIntegration <- function(distribution, parameters) {
fnToBeIntegrated <- Vectorize(
function(x) {x * do.call(get(paste0("d",distribution)), as.list(c(x, parameters)))},
vectorize.args = c("x"))
integrate(fnToBeIntegrated, lower = 0, upper = 1)
}
expectedValueFromIntegration("beta",c(0.2,0.3))
0.4 with absolute error < 1.9e-05
但是,现在我需要知道(即输入)对分布的支持,或者至少创建一个某种查找表,因为据我所知,R 有不同分布的支持信息无处存储,我说得对吗?
有没有第三种方法可以做到这一点?我正在寻找一种通用的方法,因为我不喜欢做ifelse-structure,并且对每个发行版使用不同的方法。
答:
3赞
ThomasIsCoding
10/6/2023
#1
如果需要分布的支持,可以使用(分位数函数)通过指定为分位数来求解支持。q*
c(0,1)
以下是一些示例,您可以根据自己的编码风格对其进行自定义
# support of beta distribution
> qbeta(0:1, 0.2, 0.3)
[1] 0 1
# support of gamma distribution
> qgamma(0:1, 0.2)
[1] 0 Inf
# support of norm distribution
> qnorm(0:1)
[1] -Inf Inf
评论
0赞
Aku-Ville Lehtimäki
10/6/2023
当然,这(再次)比我想象的要容易。
评论