微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回 CDF作为函数给定值向量及其对应的概率 矢量化

如何解决返回 CDF作为函数给定值向量及其对应的概率 矢量化

考虑以下简化示例:

x <- c(1,2,3)
p <- rep(1,times = 3)/3

这表明我有一个离散概率分布,概率 1/3 分配给 123 中的每一个。您可以假设 xp 已按上述适当排序(即 x 的每个分量在 p 中都有相应的概率),其中 x 在升序如上。您应该假设 x 仅采用整数值,并且您应该假设 p 在每个组件中都是相同的。在我的实际问题中,xp 可以是长度约为 100 的向量。

我想输出一个 函数(不是图形,就像我从其他例子中看到的那样),它输出的值等于上面 R 中给出的概率质量函数的累积分布函数,使用 xp


对于概率背景:如果你不熟悉概率,累积分布函数就是你得到一个小于或等于某个值的概率。我们将此称为“特定值”t

如果我给你任何值 t < 1,那么根据上面的例子,累积分布函数应该输出 0,因为没有概率分配给小于 1 的值。

假设我给你一个满足 tt >= 1 的值 t < 2。那么在这个区间中,分配给1的概率是1/3,因此对于t >= 1t < 2,累积分布函数应该输出1/3

如果 t >= 2t < 3,到目前为止,根据前面的讨论,我们有 1/3 的概率来自前面的步骤,以及 {{ 1}} 在 1/3。因此,如果 t = 2t >= 2,累积分布函数应该输出 t < 3

如果2/3,累积分布函数应该输出t >= 3


理论上我们可以将这个函数写成如下代码,并让 1 成为唯一的参数:

t

然而,从我的角度来看,这里的困难在于根据向量 x_cdf <- function(t) { if (t < 1) { return(0) } if (t >= 1 & t < 2) { return(1/3) } if (t >= 2 & t < 3) { return(2/3) } if (t >= 3) { return(1) } } if 生成 x 语句。

再次强调:CDF 应该只依赖于 p 作为参数,并且应该很容易从 tx 生成。必须允许 p 是向量 tNOT 的值。


我认为我正在寻找的伪代码

x

解决方法

你基本上就在那里。

把它放在你正在创建的函数体中:

sum( p[ x <= t ] )

generate_cdf <- function(x,p) {
    cdf <- function(t) {
        sum( p[ x <= t ] )
    }
    return(cdf)
}

f <- generate_cdf(x,p)

cbind( 0:4,sapply( 0:4,f ) )

输出:


> cbind( 0:4,f ) )
     [,1]      [,2]
[1,]    0 0.0000000
[2,]    1 0.3333333
[3,]    2 0.6666667
[4,]    3 1.0000000
[5,]    4 1.0000000

矢量化

为了增加技巧,您也可以Vectorize,让它一次性处理多个值:


generate_cdf <- function(x,p) {
    cdf <- function(t) {
        sum( p[ x <= t ] )
    }
    return(Vectorize(cdf))
}

f <- generate_cdf(x,p)

f( c(1,2) ) # outputs [1] 0.3333333 0.6666667

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。