繁体   English   中英

如何在R中绘制阶乘函数

[英]How to plot a factorial function in 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 select K”计算的一些结果:

在此处输入图片说明

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

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

现在,仔细检查您给定的配方,它等同于:

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

因此,您可以执行以下操作:

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

在此处输入图片说明


跟进

嗨,这是一个非常有效的功能。 但是,该图的均值,众数和中位数与我在课程材料中针对同一图的那些不匹配吗? 平均值应该是727,Mode = 600,中位数= 679! 我如何从您建议的情节中获得这些描述?

我对您的课程材料想做什么感到困惑。 您给出的概率是条件概率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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM