如何使用库函数 scipy.stats.binom.pmf return 给定概率的二项分布中的试验次数 (n)?
How to return the number of trials (n) in a binomial distribution for a given probability using library function scipy.stats.binom.pmf?
是否有可能得到scipy.stats.binom.pmf(x, n, p)
到return的试验次数(n)与概率,成功次数(x), 和成功概率 (p) 已知?
示例问题:
Alex 需要投多少次才能有 90% 的把握至少命中 10 次目标?
其中:
- 概率 = 0.90
- p = 0.50
- x = 10
你可以这样做。您要计算的是 scipy.stats
所谓的生存函数 (sf
),即 1-cdf
。由于你感兴趣的是大于或等于10次成功——也就是10次或更多次成功的概率之和,也就是1-cdf
。 sf
函数可以采用一个 numpy 数组作为参数,因此我们为 n
传入一个数组(改变试验次数)。然后我们寻找给我们的值大于定义的 confidence
.
的试验次数
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
# Defining model parameters
p = 0.5
k = 10
confidence = 0.9
n = np.arange(k, 5*k)
# Generating survival function distribution and computing the number of required trials
binomSurvivalDist = scipy.stats.binom.sf(k, n, p)
nrequired = n[binomSurvivalDist >= confidence][0]
# Plotting the results to Verify that this works
fig, ax = plt.subplots(1, 1, figsize=(12, 10))
x = np.arange(0, nrequired+1, 1)
ax.plot(x, scipy.stats.binom.sf(x, nrequired, p), lw=2)
ax.set_xlabel("Number of Successes", fontsize=16)
ax.set_ylabel("Probability of Getting At Least this Many Success", fontsize=16)
ax.set_title("Distribution for %i Trials" % nrequired, fontsize=18)
print(nrequired)
plt.show()
该图不是计算所必需的,但可以让我们验证该过程是否给了我们正确的答案。
是否有可能得到scipy.stats.binom.pmf(x, n, p)
到return的试验次数(n)与概率,成功次数(x), 和成功概率 (p) 已知?
示例问题:
Alex 需要投多少次才能有 90% 的把握至少命中 10 次目标?
其中:
- 概率 = 0.90
- p = 0.50
- x = 10
你可以这样做。您要计算的是 scipy.stats
所谓的生存函数 (sf
),即 1-cdf
。由于你感兴趣的是大于或等于10次成功——也就是10次或更多次成功的概率之和,也就是1-cdf
。 sf
函数可以采用一个 numpy 数组作为参数,因此我们为 n
传入一个数组(改变试验次数)。然后我们寻找给我们的值大于定义的 confidence
.
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
# Defining model parameters
p = 0.5
k = 10
confidence = 0.9
n = np.arange(k, 5*k)
# Generating survival function distribution and computing the number of required trials
binomSurvivalDist = scipy.stats.binom.sf(k, n, p)
nrequired = n[binomSurvivalDist >= confidence][0]
# Plotting the results to Verify that this works
fig, ax = plt.subplots(1, 1, figsize=(12, 10))
x = np.arange(0, nrequired+1, 1)
ax.plot(x, scipy.stats.binom.sf(x, nrequired, p), lw=2)
ax.set_xlabel("Number of Successes", fontsize=16)
ax.set_ylabel("Probability of Getting At Least this Many Success", fontsize=16)
ax.set_title("Distribution for %i Trials" % nrequired, fontsize=18)
print(nrequired)
plt.show()
该图不是计算所必需的,但可以让我们验证该过程是否给了我们正确的答案。