r - 如何在 R 中绘制阶乘函数

我正在尝试绘制:

使用以下 R 代码没有成功:

N= seq(from=150, to=2000)
P=((factorial(60) / factorial(50))*(factorial(N-60) /factorial(N-150))) /(factorial(N) /factorial(N-100))
plot(N,P)

最佳答案

几乎总是,涉及阶乘的概率表达式是“N 选择 K”计算的一些结果:

但是通过阶乘来计算它的效率非常低,最重要的是,它在数值上不稳定。使用 factorial() 查看您的代码:您得到了 NaN

在 R 中,choose(N, K) 函数快速稳定地计算“N 选择 K”。

现在,仔细检查您给定的公式表明它等同于:

choose(N-100, 50) / choose(N, 60)

所以,你可以这样做:

P <- choose(N-100, 50) / choose(N, 60)
plot(N, P, type = "l")


跟进

Hi, this is a very efficient function. But mean, mode, and median of this plot doesn't match the ones I have in my course materials for the same plot? The mean should be 727, Mode= 600, median= 679!! How can I get these descriptives from your suggested plot?

我对您的类(class) Material 试图做什么感到困惑。您给出的概率是条件概率 P(D | N),即随机变量 D 的概率。当我们针对 N 绘制 P 时。 因此,上图不是概率质量函数!那么,我们如何使用它来计算随机变量 N 的均值、众数和中位数等统计量???

无论如何,既然您提出问题并坚持要得到答案,让我们假装这是随机变量 N 的概率质量函数。但由于它不是真实的,sum(P) 不是甚至接近 1。我们实际上有 sum(P) = 3.843678e-12。因此,要将其用作适当的概率质量函数,我们需要先对其进行归一化。

P <- P / sum(P)

现在 P 总和为 1。

为了计算均值,我们这样做

sum(N * P)
# [1] 726.978

为了计算模式,我们做

N[which.max(P)]
# 599

为了计算中位数,我们这样做

N[which(cumsum(P) > 0.5)[1]]
# 679

https://stackoverflow.com/questions/38510834/

相关文章:

google-apps-script - 可以在谷歌脚本中设置一个标题

git - 无法解析主机名

git - 是否可以轻松地将所有提交从一个分支移动到另一个分支作为一个提交?

c# - 计算两个日期之间的天数并将其显示在标签中

assembly - 汇编中的函数结语

xamarin.forms - 从 Xamarin 的 Picker 中获取选定的值

types - 结构的透析器错误

php - woocommerce rest API 每次调用仅提供 10 个订单

regex - 向量化模式匹配返回 R 中的模式

erlang - 了解透析器结果