如何在R语言中计算负二项分布概率?
计算R语言中的负二项分布概率
Hey there! First off, kudos on that volunteer earthquake prediction work—super meaningful stuff. Sorry Poisson didn't cut it for your count data (sounds like you ran into overdispersion, which is super common with real-world event counts like earthquakes). Let's walk through exactly how to calculate negative binomial probabilities in R.
先搞懂R里负二项分布的两种参数化方式
R的负二项函数有两种常用参数形式,这很关键,别搞混:
- 形式1:基于成功次数和成功概率:
dnbinom(x, size, prob)表示「在获得size次“成功”之前,出现x次“失败”」的概率。这里的“成功/失败”是统计定义,对应你的场景可以把“发生一次5级地震”当作成功或者失败,全看你怎么定义。 - 形式2:基于均值和分散参数:
dnbinom(x, size, mu)更适合你的预测场景,其中mu是事件发生次数的均值,size是分散参数(数值越大,分布越接近泊松;数值越小,离散程度越高)。
常用的负二项分布核心函数
R里有四个核心函数处理负二项分布:
dnbinom():概率质量函数(PMF),计算恰好发生x次事件的概率pnbinom():累积分布函数(CDF),计算发生次数≤x的概率qnbinom():分位数函数,找到对应概率的事件次数阈值rnbinom():生成负二项分布的随机数
结合你的地震预测场景举例子
假设你已经通过历史数据估计出:3月全球5级以上地震的平均次数mu=7,分散参数size=3(因为方差大于均值,所以用负二项替代泊松)。
1. 计算恰好发生5次地震的概率
# 定义参数和目标次数 target_count <- 5 mu_earthquake <- 7 size_param <- 3 # 计算恰好发生target_count次的概率 exact_prob <- dnbinom(x = target_count, mu = mu_earthquake, size = size_param) cat("3月恰好发生", target_count, "次5级以上地震的概率:", round(exact_prob, 4), "\n")
2. 计算发生不超过5次地震的累积概率
cumulative_prob <- pnbinom(q = target_count, mu = mu_earthquake, size = size_param) cat("3月发生不超过", target_count, "次5级以上地震的概率:", round(cumulative_prob, 4), "\n")
3. 如果用成功概率的参数形式(比如定义“地震发生”为成功)
假设你知道每单位时间地震发生的概率prob=0.2,想要计算“出现3次地震前,有10次‘无地震’时段”的概率:
prob_success <- 0.2 target_successes <- 3 failure_count <- 10 prob <- dnbinom(x = failure_count, size = target_successes, prob = prob_success) cat("出现3次地震前有10次无地震时段的概率:", round(prob, 4), "\n")
小提示
如果你还没估计出mu和size参数,可以用MASS包的glm.nb()函数拟合负二项回归模型,从你的历史地震数据中得到这些参数值。在R里敲?dnbinom可以查看函数的详细定义和参数说明,避免参数混淆。
内容的提问来源于stack exchange,提问作者NonReformed Bayesianist
相关产品推荐
相关产品推荐

