如何在R中绘制阶乘函数

时间:2016-07-21 17:36:28

标签: r plot

我试图策划:

enter image description here

使用以下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)

1 个答案:

答案 0 :(得分:7)

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

enter image description here

但是通过阶乘来计算它是非常低效的,最重要的是,它在数值上并不稳定。使用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")

enter image description here

<强>后续

  

嗨,这是一个非常有效的功能。但是这个情节的平均值,模式和中位数与我在同一情节的课程材料中的含义不一致?平均值应为727,Mode = 600,中位数= 679 !!如何从建议的情节中获取这些描述?

我对你的课程材料试图做的事感到困惑。您给出的概率是条件概率P(D | N),即随机变量D的概率。我们对P草拟了N因此,上图不是概率质量函数!那么,我们如何使用它来计算随机变量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