我正在尝试绘制:
使用以下 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/