【问题标题】:Weighted Likelihood of an Event Occurring事件发生的加权可能性
【发布时间】:2020-11-05 22:34:06
【问题描述】:

我想确定某个范围内某些事件发生的概率。

最小值 = 600 最大值 = 50,000 最常见的结果 = 600

我生成了一系列事件:numbers <- seq(600,50000,by=1)

这就是我卡住的地方。不确定使用错误的发行版或尝试执行是否走错了路。

qpois(numbers, lambda = 600) 产生 NaN

因此,期望的结果是能够获得加权概率的输出(加权到 600 的平均值)。然后能够通过对这些数字的概率求和来评估大约 30000 为 5% 或不同削减的异常事件的可能性。

有点生疏,好几年没用了,所以也感谢任何在线资源刷新!

【问题讨论】:

    标签: r statistics prediction


    【解决方案1】:

    首先,我认为您正在寻找ppois 而不是qpois。函数qpois(p, 600) 采用概率 的向量p。如果您执行qpois(0.75, 600),您将得到 616,这意味着 75% 的观察值将等于或低于 616。

    ppoisqpois 相反。如果您执行ppois(616, 600),您将获得(大约)0.75。

    至于您的具体分布,它不可能是泊松分布。让我们看看平均值为 600 的泊松分布是什么样的:

    x <- 500:700
    plot(x, dpois(x, 600), type = "h")
    

    获得大于 900 的值的概率(基本上)为零:

    1 - ppois(900, 600)
    #> [1] 0
    

    因此,如果您的数据包含 30,000 或 50,000 以及 600 的值,那么它肯定不是泊松分布。

    如果不了解更多关于您的实际数据的信息,就无法真正说出您的分布情况。也许如果您在问题中包含它的示例,我们可能会提供更多帮助。


    编辑

    通过 cmets 中提供的数字样本,我们可以看看实际的经验分布:

    hist(numbers, 200)
    

    如果我们想知道任意点的概率,我们可以像这样创建经验累积分布函数:

    get_probability_of <- ecdf(numbers)
    

    这让我们可以这样做:

    number <- 1:50000
    plot(number, get_probability_of(number), ylab = "probability", type = "l")
    

    get_probability_of(30000)
    #> [1] 0.83588
    

    这意味着得到一个大于30,000的数字的概率是

    1 - get_probability_of(30000)
    #> [1] 0.16412
    

    但是,在这种情况下,我们知道分布是如何生成的,因此我们可以仅使用一些简单的几何来计算 精确 理论 cdf(我不会在这里展示我的工作,因为虽然它是简单,比较冗长,枯燥,不适用于其他发行版):

    cdf <- function(x) ifelse(x < 600, 0, 1 - ((49400 - (x - 600)) / 49400)^2)
    

    cdf(30000)
    #> [1] 0.8360898
    

    与经验值非常接近,但理论上比经验值更准确。

    【讨论】:

    • 当然,这里是随机生成的列表 [link] (filebin.net/sfima1vqlh8vlhas) 在 python 中创建通过:import numpy as np import matplotlib.pyplot as plt a = 600 b = 50000 c = 600 num = np.ma.round(np.random.triangular( left = a - 0.5, mode = c, right = b + 0.5, size = 50000) )
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多